1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.kew.util;
17
18 import org.apache.commons.lang.text.StrSubstitutor;
19 import org.kuali.rice.core.api.CoreApiServiceLocator;
20 import org.kuali.rice.core.api.util.KeyValue;
21 import org.kuali.rice.kew.actionrequest.ActionRequestValue;
22 import org.kuali.rice.kew.api.KewApiConstants;
23 import org.kuali.rice.kim.api.KimConstants;
24
25 import java.util.Calendar;
26 import java.util.Collections;
27 import java.util.Comparator;
28 import java.util.Date;
29 import java.util.HashMap;
30 import java.util.List;
31 import java.util.Map;
32
33
34
35
36
37
38
39 public final class Utilities {
40
41
42
43
44 private static final StrSubstitutor SUBSTITUTOR = new StrSubstitutor(new ConfigStringLookup());
45
46 private Utilities() {
47 throw new UnsupportedOperationException("do not call");
48 }
49
50
51
52
53
54
55
56
57
58 public static String substituteConfigParameters(String applicationId, String string) {
59 StrSubstitutor sub = new StrSubstitutor(new ConfigStringLookup(applicationId));
60 return sub.replace(string);
61 }
62
63
64
65
66
67
68
69 public static String substituteConfigParameters(String string) {
70 return SUBSTITUTOR.replace(string);
71 }
72
73 public static String parseGroupNamespaceCode(String namespaceAndNameCombo) {
74 if (namespaceAndNameCombo == null) {
75 return null;
76 }
77 String[] groupData = namespaceAndNameCombo.split(KewApiConstants.KIM_GROUP_NAMESPACE_NAME_DELIMITER_CHARACTER);
78 if (groupData.length == 1) {
79 return KimConstants.KIM_GROUP_WORKFLOW_NAMESPACE_CODE;
80 } else if (groupData.length == 2) {
81 return groupData[0].trim();
82 } else {
83 return null;
84 }
85 }
86
87 public static String parseGroupName(String namespaceAndNameCombo) {
88 if (namespaceAndNameCombo == null) {
89 return null;
90 }
91 String[] groupData = namespaceAndNameCombo.split(KewApiConstants.KIM_GROUP_NAMESPACE_NAME_DELIMITER_CHARACTER);
92 if (groupData.length == 1) {
93 return groupData[0].trim();
94 } else if (groupData.length == 2) {
95 return groupData[1].trim();
96 } else {
97 return null;
98 }
99 }
100
101
102
103
104
105 public static class PrioritySorter implements Comparator<ActionRequestValue> {
106 @Override
107 public int compare(ActionRequestValue ar1, ActionRequestValue ar2) {
108 int value = ar1.getPriority().compareTo(ar2.getPriority());
109 if (value == 0) {
110 value = ActionRequestValue.compareActionCode(ar1.getActionRequested(), ar2.getActionRequested(), true);
111 if (value == 0) {
112 if ( (ar1.getActionRequestId() != null) && (ar2.getActionRequestId() != null) ) {
113 value = ar1.getActionRequestId().compareTo(ar2.getActionRequestId());
114 } else {
115
116 value = 0;
117 }
118 }
119 }
120 return value;
121 }
122 }
123
124
125
126
127
128 public static class RouteLogActionRequestSorter extends PrioritySorter implements Comparator<ActionRequestValue> {
129 @Override
130 public int compare(ActionRequestValue ar1, ActionRequestValue ar2) {
131 if (! ar1.getChildrenRequests().isEmpty()) {
132 Collections.sort(ar1.getChildrenRequests(), this);
133 }
134 if (! ar2.getChildrenRequests().isEmpty()) {
135 Collections.sort(ar2.getChildrenRequests(), this);
136 }
137
138 int routeLevelCompareVal = ar1.getRouteLevel().compareTo(ar2.getRouteLevel());
139 if (routeLevelCompareVal != 0) {
140 return routeLevelCompareVal;
141 }
142
143 if (ar1.isActive() && ar2.isPending()) {
144 return -1;
145 } else if (ar2.isActive() && ar1.isPending()) {
146 return 1;
147 }
148
149 return super.compare(ar1, ar2);
150 }
151 }
152
153 public static boolean checkDateRanges(String fromDate, String toDate) {
154 try {
155 Date parsedDate = CoreApiServiceLocator.getDateTimeService().convertToDate(fromDate.trim());
156 Calendar fromCalendar = Calendar.getInstance();
157 fromCalendar.setLenient(false);
158 fromCalendar.setTime(parsedDate);
159 fromCalendar.set(Calendar.HOUR_OF_DAY, 0);
160 fromCalendar.set(Calendar.MINUTE, 0);
161 fromCalendar.set(Calendar.SECOND, 0);
162 fromCalendar.set(Calendar.MILLISECOND, 0);
163 parsedDate = CoreApiServiceLocator.getDateTimeService().convertToDate(toDate.trim());
164 Calendar toCalendar = Calendar.getInstance();
165 toCalendar.setLenient(false);
166 toCalendar.setTime(parsedDate);
167 toCalendar.set(Calendar.HOUR_OF_DAY, 0);
168 toCalendar.set(Calendar.MINUTE, 0);
169 toCalendar.set(Calendar.SECOND, 0);
170 toCalendar.set(Calendar.MILLISECOND, 0);
171 if (fromCalendar.after(toCalendar)) {
172 return false;
173 }
174 return true;
175 } catch (Exception ex) {
176 return false;
177 }
178 }
179
180
181
182
183
184
185 public static <T extends KeyValue> Map<String, String> getKeyValueCollectionAsMap(List<T> collection) {
186 Map<String, String> map = new HashMap<String, String>(collection.size());
187 for (KeyValue kv: collection) {
188 map.put(kv.getKey(), kv.getValue());
189 }
190 return map;
191 }
192
193
194
195
196
197
198
199
200 public static <T extends KeyValue> Map<String, T> getKeyValueCollectionAsLookupTable(List<T> collection) {
201 Map<String, T> map = new HashMap<String, T>(collection.size());
202 for (T kv: collection) {
203 map.put(kv.getKey(), kv);
204 }
205 return map;
206 }
207 }