1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package edu.sampleu.travel.service;
17
18 import java.util.ArrayList;
19 import java.util.Collection;
20 import java.util.HashMap;
21 import java.util.Iterator;
22 import java.util.List;
23 import java.util.Map;
24
25 import org.kuali.rice.kns.service.BusinessObjectService;
26 import org.kuali.rice.kns.service.KNSServiceLocator;
27 import org.kuali.rice.kns.service.KNSServiceLocatorWeb;
28 import org.kuali.rice.kns.service.LookupService;
29 import org.springframework.beans.BeanUtils;
30
31 import edu.sampleu.travel.bo.FiscalOfficer;
32 import edu.sampleu.travel.bo.TravelAccount;
33 import edu.sampleu.travel.dto.FiscalOfficerInfo;
34 import edu.sampleu.travel.dto.TravelAccountInfo;
35
36
37
38
39
40 public class FiscalOfficerServiceImpl implements FiscalOfficerService {
41
42 protected static String[] FOI_SKIP = { "accounts" };
43
44 protected BusinessObjectService businessObjectService;
45 protected LookupService lookupService;
46
47 @Override
48 public FiscalOfficerInfo createFiscalOfficer(FiscalOfficerInfo fiscalOfficerInfo) {
49 getBusinessObjectService().save(toFiscalOfficer(fiscalOfficerInfo));
50
51 Map<String, Object> criteria = new HashMap<String, Object>();
52 criteria.put("id", fiscalOfficerInfo.getId());
53 FiscalOfficer fiscalOfficer = getBusinessObjectService().findByPrimaryKey(FiscalOfficer.class, criteria);
54 return toFiscalOfficerInfo(fiscalOfficer);
55 }
56
57 @Override
58 public List<FiscalOfficerInfo> lookupFiscalOfficer(Map<String, String> criteria) {
59 @SuppressWarnings("unchecked")
60 Collection<FiscalOfficer> temp = getLookupService().findCollectionBySearch(FiscalOfficer.class, criteria);
61
62 List<FiscalOfficerInfo> results = new ArrayList<FiscalOfficerInfo>();
63 if(temp != null) {
64 for(FiscalOfficer fiscalOfficer : temp) {
65 results.add(toFiscalOfficerInfo(fiscalOfficer));
66 }
67 }
68
69 return results;
70 }
71
72 @Override
73 public FiscalOfficerInfo retrieveFiscalOfficer(Long id) {
74 FiscalOfficer temp = getBusinessObjectService().findBySinglePrimaryKey(FiscalOfficer.class, id);
75 FiscalOfficerInfo result = toFiscalOfficerInfo(temp);
76 return result;
77 }
78
79 @Override
80 public FiscalOfficerInfo updateFiscalOfficer(FiscalOfficerInfo fiscalOfficerInfo) {
81 FiscalOfficer fiscalOfficer = getBusinessObjectService().findBySinglePrimaryKey(FiscalOfficer.class, fiscalOfficerInfo.getId());
82
83 if(fiscalOfficer != null) {
84 getBusinessObjectService().save(toFiscalOfficerUpdate(fiscalOfficerInfo, fiscalOfficer));
85 fiscalOfficer = getBusinessObjectService().findBySinglePrimaryKey(FiscalOfficer.class, fiscalOfficerInfo.getId());
86 }
87
88 return toFiscalOfficerInfo(fiscalOfficer);
89 }
90
91
92
93
94
95
96
97
98
99 protected FiscalOfficer toFiscalOfficerUpdate(FiscalOfficerInfo fiscalOfficerInfo,
100 FiscalOfficer fiscalOfficer) {
101
102 BeanUtils.copyProperties(fiscalOfficerInfo, fiscalOfficer, FOI_SKIP);
103
104 List<TravelAccountInfo> newAccounts = new ArrayList<TravelAccountInfo>();
105 Map<String, TravelAccountInfo> accountInfoMap = new HashMap<String, TravelAccountInfo>();
106
107
108 for(TravelAccountInfo accountInfo : fiscalOfficerInfo.getAccounts()) {
109 if(accountInfo.getVersionNumber() == null) {
110 newAccounts.add(accountInfo);
111 }
112 else {
113 accountInfoMap.put(accountInfo.getNumber(), accountInfo);
114 }
115 }
116
117
118 Iterator<TravelAccount> iterator = fiscalOfficer.getAccounts().iterator();
119 while(iterator.hasNext()) {
120 TravelAccount account = iterator.next();
121 TravelAccountInfo accountInfo = accountInfoMap.get(account.getNumber());
122
123 if(accountInfo == null) {
124
125
126
127
128 account.setFoId(null);
129 account.setFiscalOfficer(null);
130 }
131 else {
132 BeanUtils.copyProperties(accountInfo, account);
133 }
134 }
135
136
137 for(TravelAccountInfo accountInfo : newAccounts) {
138 fiscalOfficer.getAccounts().add(toTravelAccount(accountInfo));
139 }
140
141 return fiscalOfficer;
142 }
143
144 protected FiscalOfficer toFiscalOfficer(FiscalOfficerInfo fiscalOfficerInfo) {
145 FiscalOfficer fiscalOfficer = new FiscalOfficer();
146
147 BeanUtils.copyProperties(fiscalOfficerInfo, fiscalOfficer, FOI_SKIP);
148
149 if(fiscalOfficerInfo.getAccounts() != null) {
150 for(TravelAccountInfo accountInfo : fiscalOfficerInfo.getAccounts()) {
151 fiscalOfficer.getAccounts().add(toTravelAccount(accountInfo));
152 }
153 }
154
155 return fiscalOfficer;
156 }
157
158 protected FiscalOfficerInfo toFiscalOfficerInfo(FiscalOfficer fiscalOfficer) {
159 FiscalOfficerInfo fiscalOfficerInfo = null;
160
161 if(fiscalOfficer != null) {
162 fiscalOfficerInfo = new FiscalOfficerInfo();
163
164 BeanUtils.copyProperties(fiscalOfficer, fiscalOfficerInfo, FOI_SKIP);
165
166 if(fiscalOfficer.getAccounts() != null) {
167 List<TravelAccountInfo> accountInfoList = new ArrayList<TravelAccountInfo>();
168
169 for(TravelAccount travelAccount : fiscalOfficer.getAccounts()) {
170 accountInfoList.add(toTravelAccountInfo(travelAccount));
171 }
172
173 fiscalOfficerInfo.setAccounts(accountInfoList);
174 }
175 }
176
177 return fiscalOfficerInfo;
178 }
179
180 protected TravelAccountInfo toTravelAccountInfo(TravelAccount travelAccount) {
181 TravelAccountInfo travelAccountInfo = new TravelAccountInfo();
182
183 BeanUtils.copyProperties(travelAccount, travelAccountInfo);
184
185 return travelAccountInfo;
186 }
187
188 protected TravelAccount toTravelAccount(TravelAccountInfo travelAccountInfo) {
189 TravelAccount travelAccount = new TravelAccount();
190
191 BeanUtils.copyProperties(travelAccountInfo, travelAccount);
192
193 return travelAccount;
194 }
195
196 protected BusinessObjectService getBusinessObjectService() {
197 if(businessObjectService == null) {
198 businessObjectService = KNSServiceLocator.getBusinessObjectService();
199 }
200 return this.businessObjectService;
201 }
202
203 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
204 this.businessObjectService = businessObjectService;
205 }
206
207 protected LookupService getLookupService() {
208 if(lookupService == null) {
209 lookupService = KNSServiceLocatorWeb.getLookupService();
210 }
211 return this.lookupService;
212 }
213
214 public void setLookupService(LookupService lookupService) {
215 this.lookupService = lookupService;
216 }
217
218 }