1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.kuali.rice.krad.uif.util;
17
18 import org.apache.commons.lang.StringEscapeUtils;
19 import org.apache.commons.lang.StringUtils;
20 import org.apache.commons.lang.math.NumberUtils;
21 import org.kuali.rice.core.api.util.type.TypeUtils;
22 import org.springframework.util.Assert;
23
24 import java.beans.PropertyDescriptor;
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28 import java.util.Set;
29
30
31
32
33
34
35 public class ScriptUtils {
36
37
38
39
40
41
42
43
44
45
46
47
48 public static String translateValue(Object value) {
49 String jsValue = "";
50
51 if (value == null) {
52 jsValue = "null";
53 return jsValue;
54 }
55
56 if (value instanceof List) {
57 jsValue = "[";
58
59 List<Object> list = (List<Object>) value;
60 for (Object listItem : list) {
61 jsValue += translateValue(listItem);
62 jsValue += ",";
63 }
64 jsValue = StringUtils.removeEnd(jsValue, ",");
65
66 jsValue += "]";
67 } else if (value instanceof Set) {
68 jsValue = "[";
69
70 Set<Object> set = (Set<Object>) value;
71 for (Object setItem : set) {
72 jsValue += translateValue(setItem);
73 jsValue += ",";
74 }
75 jsValue = StringUtils.removeEnd(jsValue, ",");
76
77 jsValue += "]";
78 } else if (value instanceof Map) {
79 jsValue = "{";
80
81 Map<Object, Object> map = (Map<Object, Object>) value;
82 for (Map.Entry<Object, Object> mapEntry : map.entrySet()) {
83 jsValue += "\"" + mapEntry.getKey().toString() + "\":";
84 jsValue += translateValue(mapEntry.getValue());
85 jsValue += ",";
86 }
87 jsValue = StringUtils.removeEnd(jsValue, ",");
88
89 jsValue += "}";
90 } else {
91 Class<?> valueClass = value.getClass();
92 if (TypeUtils.isSimpleType(valueClass) || TypeUtils.isClassClass(valueClass)) {
93 boolean quoteValue = true;
94
95 if (TypeUtils.isBooleanClass(valueClass) ||
96 TypeUtils.isDecimalClass(valueClass) ||
97 TypeUtils.isIntegralClass(valueClass)) {
98 quoteValue = false;
99 }
100
101 if (quoteValue) {
102 jsValue = "\"";
103 }
104
105
106 jsValue += value.toString();
107
108 if (quoteValue) {
109 jsValue += "\"";
110 }
111 } else {
112
113 jsValue = "{";
114 Map<String, PropertyDescriptor> propertyDescriptors = ObjectPropertyUtils
115 .getPropertyDescriptors(valueClass);
116 for (String propertyName : propertyDescriptors.keySet()) {
117 if (ObjectPropertyUtils.isReadableProperty(value, propertyName)
118 && !"class".equals(propertyName)) {
119 Object propertyValue = ObjectPropertyUtils.getPropertyValue(value, propertyName);
120 jsValue += propertyName + ":";
121 jsValue += translateValue(propertyValue);
122 jsValue += ",";
123 }
124 }
125 jsValue = StringUtils.removeEnd(jsValue, ",");
126
127 jsValue += "}";
128 }
129 }
130
131 return jsValue;
132 }
133
134
135
136
137
138
139
140 public static String toJSON(Map<String, String> map) {
141 StringBuffer sb = new StringBuffer("{");
142
143 for (String key : map.keySet()) {
144 String optionValue = map.get(key);
145 if (sb.length() > 1) {
146 sb.append(",");
147 }
148 sb.append("\"" + key + "\"");
149
150 sb.append(":");
151 sb.append("\"" + escapeJSONString(optionValue) + "\"");
152 }
153 sb.append("}");
154
155 return sb.toString();
156 }
157
158
159
160
161
162
163
164 public static String escapeJSONString(String jsonString) {
165 if (jsonString != null) {
166 jsonString = jsonString.replace("\"", """);
167 }
168
169 return jsonString;
170 }
171
172
173
174
175
176
177
178
179
180 public static String convertToJsValue(Map<String, String> stringMap) {
181 if (stringMap == null || stringMap.isEmpty()) {
182 return "{}";
183 }
184
185 String convertedValue = "{";
186 for (String key : stringMap.keySet()) {
187 convertedValue = convertedValue + "\"" + key + "\":" + convertToJsValue(stringMap.get(key)) + ",";
188 }
189
190 convertedValue = StringUtils.removeEnd(convertedValue, ",");
191 convertedValue = convertedValue + "}";
192
193 return convertedValue;
194 }
195
196
197
198
199
200
201
202
203 public static String convertToJsValue(String value) {
204
205
206 String originalValue = value;
207
208
209 value = StringUtils.strip(value);
210
211
212
213 if (StringUtils.startsWith(value, "{") || StringUtils.startsWith(value, "[")) {
214 return originalValue;
215 }
216
217
218 else if (value.equalsIgnoreCase("false") || value.equalsIgnoreCase("true")) {
219 return originalValue.toLowerCase();
220 }
221
222 else if (StringUtils.startsWith(value, "function") && StringUtils.endsWith(value, "}")) {
223 return originalValue;
224 }
225
226 else if (NumberUtils.isNumber(value)) {
227 return originalValue;
228 } else {
229
230 return "\"" + originalValue + "\"";
231 }
232 }
233
234
235
236
237
238
239
240
241 public static String escapeName(String name) {
242 name = name.replace("'", "\\'");
243 return name;
244 }
245
246
247
248
249
250
251
252 public static String convertStringListToJsArray(List<String> list) {
253 String array = "[";
254
255 if (list != null) {
256 for (String s : list) {
257 array = array + "'" + s + "',";
258 }
259 array = StringUtils.removeEnd(array, ",");
260 }
261 array = array + "]";
262
263 return array;
264 }
265
266
267
268
269
270
271
272
273
274
275
276
277 public static String escapeHtml(String string) {
278 if (string == null) {
279 return null;
280 } else {
281 return StringEscapeUtils.escapeHtml(string).replace("'", "'").replace(""", "\\u0022");
282 }
283 }
284
285
286
287
288
289
290
291 public static List<String> escapeHtml(List<String> strings) {
292 if (strings == null) {
293 return null;
294 } else if (strings.isEmpty()) {
295 return strings;
296 } else {
297 List<String> result = new ArrayList<String>(strings.size());
298 for (String string : strings) {
299 result.add(escapeHtml(string));
300 }
301 return result;
302 }
303 }
304
305
306
307
308
309
310
311
312
313 public static String appendScript(String script, String appendScript) {
314 String appendedScript = script;
315 if (appendedScript == null) {
316 appendedScript = "";
317 } else if (StringUtils.isNotBlank(appendedScript) && !appendedScript.trim().endsWith(";")) {
318 appendedScript += "; ";
319 }
320
321 appendedScript += appendScript;
322
323 return appendedScript;
324 }
325
326
327
328
329
330
331
332
333
334
335 public static String buildFunctionCall(String functionName, Object... arguments) {
336 StringBuffer sb = new StringBuffer(functionName).append("(");
337
338 if (arguments != null) {
339 List<String> jsArguments = new ArrayList<String>();
340 for (Object argument : arguments) {
341 jsArguments.add(translateValue(argument));
342 }
343
344 sb.append(StringUtils.join(jsArguments, ","));
345 }
346
347 sb.append(");");
348
349 return sb.toString();
350 }
351
352
353
354
355
356
357
358
359
360
361
362 public static String buildEventHandlerScript(String id, String eventName, String eventScript) {
363 if (StringUtils.isBlank(eventScript)) {
364 return "";
365 }
366
367 Assert.hasLength(id, "Id is required for building event handler script");
368 Assert.hasLength(eventName, "Event name is required for building event handler script");
369
370 StringBuffer sb = new StringBuffer();
371
372 sb.append("jQuery('#" + id + "').on('");
373 sb.append(eventName);
374 sb.append("', function(e) {");
375 sb.append(eventScript);
376 sb.append("}); ");
377
378 return sb.toString();
379 }
380 }