1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.impl.peopleflow;
17
18 import org.apache.commons.lang.StringUtils;
19 import org.kuali.rice.core.api.resourceloader.GlobalResourceLoader;
20 import org.kuali.rice.core.api.uif.RemotableAttributeField;
21 import org.kuali.rice.kew.api.KewApiServiceLocator;
22 import org.kuali.rice.kew.api.peopleflow.PeopleFlowDefinition;
23 import org.kuali.rice.kew.api.repository.type.KewTypeDefinition;
24 import org.kuali.rice.kew.framework.peopleflow.PeopleFlowTypeService;
25 import org.kuali.rice.krad.bo.Note;
26 import org.kuali.rice.krad.maintenance.MaintainableImpl;
27 import org.kuali.rice.krad.uif.container.CollectionGroup;
28 import org.kuali.rice.krad.uif.container.Container;
29 import org.kuali.rice.krad.uif.util.ObjectPropertyUtils;
30 import org.kuali.rice.krad.uif.view.View;
31 import org.kuali.rice.krad.util.KRADConstants;
32 import org.kuali.rice.krad.web.form.MaintenanceDocumentForm;
33
34 import javax.xml.namespace.QName;
35 import java.util.ArrayList;
36 import java.util.Collection;
37 import java.util.Collections;
38 import java.util.Comparator;
39 import java.util.List;
40
41
42
43
44
45
46 public class PeopleFlowMaintainableImpl extends MaintainableImpl {
47
48
49
50
51
52
53
54
55
56 @Override
57 protected void addLine(Collection<Object> collection, Object addLine, boolean insertFirst) {
58 if (collection instanceof List) {
59 ((List) collection).add(0, addLine);
60 if (addLine instanceof PeopleFlowMemberBo) {
61 Collections.sort((List) collection, new Comparator<Object>() {
62 public int compare(Object o1, Object o2) {
63 if ((o1 instanceof PeopleFlowMemberBo) && (o1 instanceof PeopleFlowMemberBo)) {
64 return ((PeopleFlowMemberBo) o1).getPriority() - ((PeopleFlowMemberBo) o2)
65 .getPriority();
66 }
67 return 0;
68 }
69 });
70 }
71 } else {
72 collection.add(addLine);
73 }
74 }
75
76
77
78
79
80
81
82
83
84
85 public List<RemotableAttributeField> retrieveTypeAttributes(View view, Object model, Container container) {
86 List<RemotableAttributeField> remoteFields = new ArrayList<RemotableAttributeField>();
87
88 PeopleFlowBo peopleFlow =
89 (PeopleFlowBo) ((MaintenanceDocumentForm) model).getDocument().getNewMaintainableObject().getDataObject();
90
91
92 String typeId = peopleFlow.getTypeId();
93 if (StringUtils.isNotBlank(typeId)) {
94 KewTypeDefinition typeDefinition = KewApiServiceLocator.getKewTypeRepositoryService().getTypeById(typeId);
95 PeopleFlowTypeService peopleFlowTypeService = GlobalResourceLoader.<PeopleFlowTypeService>getService(
96 QName.valueOf(typeDefinition.getServiceName()));
97 remoteFields = peopleFlowTypeService.getAttributeFields(typeId);
98 }
99
100 return remoteFields;
101 }
102
103
104
105
106
107 @Override
108 public void saveDataObject() {
109 ((PeopleFlowBo) getDataObject()).updateAttributeBoValues();
110
111 PeopleFlowDefinition peopleFlowDefinition;
112 if (KRADConstants.MAINTENANCE_COPY_ACTION.equals(getMaintenanceAction())) {
113 peopleFlowDefinition = PeopleFlowBo.maintenanceCopy(((PeopleFlowBo) getDataObject()));
114 } else {
115
116 peopleFlowDefinition = PeopleFlowBo.to(((PeopleFlowBo) getDataObject()));
117 }
118 if (StringUtils.isNotBlank(peopleFlowDefinition.getId())) {
119 KewApiServiceLocator.getPeopleFlowService().updatePeopleFlow(peopleFlowDefinition);
120 } else {
121 KewApiServiceLocator.getPeopleFlowService().createPeopleFlow(peopleFlowDefinition);
122 }
123 }
124
125
126
127
128
129
130
131
132
133
134
135
136 protected void processAfterAddLine(View view, CollectionGroup collectionGroup, Object model, Object addLine, String collectionPath) {
137
138 if (model instanceof MaintenanceDocumentForm
139 && KRADConstants.MAINTENANCE_EDIT_ACTION.equals(((MaintenanceDocumentForm)model).getMaintenanceAction()) && !(addLine instanceof Note)) {
140
141
142
143
144 String oldCollectionPath = collectionPath.replace("newMaintainableObject","oldMaintainableObject");
145 Collection<Object> oldCollection = ObjectPropertyUtils.getPropertyValue(model, oldCollectionPath );
146 try {
147 Object blankLine = collectionGroup.getCollectionObjectClass().newInstance();
148 oldCollection.add(blankLine);
149 } catch (Exception e) {
150 throw new RuntimeException("Unable to create new line instance for old maintenance object", e);
151 }
152 }
153 }
154
155
156
157
158
159
160
161
162
163 @Override
164 public void processCollectionDeleteLine(View view, Object model, String collectionPath, int lineIndex) {
165
166 CollectionGroup collectionGroup = view.getViewIndex().getCollectionGroupByPath(collectionPath);
167 if (collectionGroup == null) {
168 logAndThrowRuntime("Unable to get collection group component for path: " + collectionPath);
169 }
170
171
172 Collection<Object> collection = ObjectPropertyUtils.getPropertyValue(model, collectionPath);
173 if (collection == null) {
174 logAndThrowRuntime("Unable to get collection property from model for path: " + collectionPath);
175 }
176
177
178
179 if (collection instanceof List) {
180 Object deleteLine = ((List<Object>) collection).get(lineIndex);
181
182
183 boolean isValid = performDeleteLineValidation(view, collectionGroup, deleteLine);
184 if (isValid) {
185 ((List<Object>) collection).remove(lineIndex);
186 processAfterDeleteLine(view, collectionPath, model, lineIndex);
187 }
188 } else {
189 logAndThrowRuntime("Only List collection implementations are supported for the delete by index method");
190 }
191 }
192
193
194
195
196
197
198
199
200
201
202
203
204
205 protected void processAfterDeleteLine(View view, String collectionPath, Object model, int lineIndex) {
206
207
208 if (model instanceof MaintenanceDocumentForm
209 && KRADConstants.MAINTENANCE_EDIT_ACTION.equals(((MaintenanceDocumentForm)model).getMaintenanceAction())) {
210
211
212 String oldCollectionPath = collectionPath.replace("newMaintainableObject","oldMaintainableObject");
213 Collection<Object> oldCollection = ObjectPropertyUtils.getPropertyValue(model, oldCollectionPath);
214 try {
215
216 oldCollection.remove(oldCollection.toArray()[lineIndex]);
217 } catch (Exception e) {
218 throw new RuntimeException("Unable to delete line instance for old maintenance object", e);
219 }
220 }
221 }
222
223
224 }