1 /*******************************************************************************
\r
2 * Copyright (c) 2013, 2014 Association for Decentralized
\r
3 * Information Management in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the THTH Simantics
\r
6 * Division Member Component License which accompanies this
\r
7 * distribution, and is available at
\r
8 * http://www.simantics.org/legal/sdmcl-v10.html
\r
11 * Semantum Oy - initial API and implementation
\r
12 *******************************************************************************/
\r
13 package org.simantics.document.server.io;
\r
15 import java.util.ArrayList;
\r
16 import java.util.Collection;
\r
17 import java.util.Collections;
\r
18 import java.util.List;
\r
20 public class JSONObjectUtils {
\r
22 public static String getText(IJSONObject object) {
\r
23 return getValueOrDefault(object, "text", "");
\r
26 public static String getLink(IJSONObject object) {
\r
27 return getValueOrDefault(object, "link", "");
\r
30 public static String getTarget(IJSONObject object) {
\r
31 return getValueOrDefault(object, "target", "");
\r
34 public static String getHyperLinkTarget(IJSONObject object){
\r
35 return getValueOrDefault(object, "hyperlinkTarget", "");
\r
38 public static String getWidth(IJSONObject object) {
\r
39 return getValueOrDefault(object, "width", "");
\r
42 public static String getHeight(IJSONObject object) {
\r
43 return getValueOrDefault(object, "height", "");
\r
46 public static String getParent(IJSONObject object) {
\r
47 return object.getValue("parent");
\r
50 public static boolean enabled(IJSONObject object) {
\r
51 return getValueOrDefault(object, "enabled", true);
\r
54 public static boolean visible(IJSONObject object) {
\r
55 return getValueOrDefault(object, "visible", true);
\r
58 public static boolean readOnly(IJSONObject object) {
\r
59 return getValueOrDefault(object, "readOnly", false);
\r
62 public static boolean selected(IJSONObject object) {
\r
63 return getValueOrDefault(object, "selected", false);
\r
66 public static String getType(IJSONObject object) {
\r
67 String result = (String)object.getValue("type");
\r
68 if(result == null) throw new IllegalStateException("No type for object " + object);
\r
72 public static String getId(IJSONObject object) {
\r
73 String result = (String)object.getValue("id");
\r
74 if(result == null) throw new IllegalStateException("No type for object " + object);
\r
78 public static <T> T getValueOrDefault(IJSONObject object, String key, T defaultValue) {
\r
80 T value = (T)object.getValue(key);
\r
81 if(value != null) return value;
\r
82 } catch (ClassCastException e) {
\r
83 e.printStackTrace();
\r
85 return defaultValue;
\r
88 public static String[] getStringArrayValueOrDefault(IJSONObject object, String key, String[] defaultValue) {
\r
90 Object o = object.getValue(key);
\r
91 if (o instanceof List) {
\r
92 @SuppressWarnings("unchecked")
\r
93 List<String> s = (List<String>) o;
\r
94 return s.toArray(new String[s.size()]);
\r
95 } else if (o instanceof String[]) {
\r
96 return (String[]) o;
\r
98 } catch (ClassCastException e) {
\r
99 e.printStackTrace();
\r
101 return defaultValue;
\r
104 public static float[] getFloatArrayValueOrDefault(IJSONObject object, String key, float[] defaultValue) {
\r
106 Object o = object.getValue(key);
\r
107 if (o instanceof List) {
\r
108 @SuppressWarnings("unchecked")
\r
109 List<Float> list = (List<Float>) o;
\r
110 float[] result = new float[list.size()];
\r
112 for (float value : list) {
\r
113 result[pos++] = value;
\r
116 } else if (o instanceof float[]) {
\r
117 return (float[]) o;
\r
119 } catch (ClassCastException e) {
\r
120 e.printStackTrace();
\r
122 return defaultValue;
\r
125 public static int[] getIntArrayValueOrDefault(IJSONObject object, String key, int[] defaultValue) {
\r
127 Object o = object.getValue(key);
\r
128 if (o instanceof List) {
\r
129 @SuppressWarnings("unchecked")
\r
130 List<Integer> list = (List<Integer>) o;
\r
131 int[] result = new int[list.size()];
\r
133 for (int i : list) {
\r
137 } else if (o instanceof int[]) {
\r
140 } catch (ClassCastException e) {
\r
141 e.printStackTrace();
\r
143 return defaultValue;
\r
146 public static double[] getDoubleArrayValueOrDefault(IJSONObject object, String key, double[] defaultValue) {
\r
148 Object o = object.getValue(key);
\r
149 if (o instanceof List) {
\r
150 @SuppressWarnings("unchecked")
\r
151 List<Double> list = (List<Double>) o;
\r
152 double[] result = new double[list.size()];
\r
154 for (double value : list) {
\r
155 result[pos++] = value;
\r
158 } else if (o instanceof double[]) {
\r
159 return (double[]) o;
\r
161 } catch (ClassCastException e) {
\r
162 e.printStackTrace();
\r
164 return defaultValue;
\r
167 // public static String[] getObjectArrayValue(IJSONObject object, String key) {
\r
169 // String value = (String)object.getValue(key);
\r
170 // if(value != null && value.startsWith("[") && value.endsWith("]")) {
\r
172 // if(value.length() == 2) return new String[0];
\r
174 // value = value.substring(1, value.length() - 1);
\r
175 // String[] split = value.split(",");
\r
177 // for(int i = 0; i < split.length; i++) {
\r
178 // if(split[i].startsWith("\"") && split[i].endsWith("\""))
\r
179 // split[i] = split[i].substring(1, split[i].length() - 1);
\r
184 // } catch (ClassCastException e) {
\r
185 // e.printStackTrace();
\r
192 public static Collection<ICommand> getCommands(IJSONObject object) {
\r
194 Collection<ICommand> result = object.getValue("commands");
\r
195 if(result != null) return result;
\r
196 } catch (ClassCastException e) {
\r
197 e.printStackTrace();
\r
199 return Collections.emptyList();
\r
202 @SuppressWarnings("unchecked")
\r
203 public static Collection<IChartItem> getChartItems(IJSONObject object) {
\r
205 Object values = object.getValue("values");
\r
206 if (values == null)
\r
207 return Collections.emptyList();
\r
208 if (values instanceof String) {
\r
209 String valuess = (String) values;
\r
210 if (valuess.length() == 0)
\r
211 return Collections.emptyList();
\r
213 return (List<IChartItem>) values;
\r
214 } catch (ClassCastException e) {
\r
215 e.printStackTrace();
\r
218 return Collections.emptyList();
\r
221 // public static TaskSeriesCollection getGanttTasks(IJSONObject object) {
\r
222 // TaskSeriesCollection collection = new TaskSeriesCollection();
\r
225 // //JSONArray seriesArray = object.getJSONArray("ganttSeries");
\r
226 // @SuppressWarnings("unchecked")
\r
227 // List<IJSONObject> seriesArray = (List<IJSONObject>) object.getValue("ganttSeries");
\r
228 // for(IJSONObject seriesObject : seriesArray) {
\r
229 // //IJSONObject seriesObject = seriesArray.getJSONObject(i);
\r
231 // TaskSeries series = new TaskSeries(getStringValueOrNull(seriesObject, "name"));
\r
233 // //JSONArray tasksArray = seriesObject.getJSONArray("tasks");
\r
234 // @SuppressWarnings("unchecked")
\r
235 // List<IJSONObject> tasksArray = (List<IJSONObject>) object.getValue("tasks");
\r
237 // for(IJSONObject taskObject : tasksArray) {
\r
238 // //IJSONObject taskObject = tasksArray.getJSONObject(j);
\r
239 // String name = getStringValueOrNull(taskObject, "name");
\r
240 // Double start = getDoubleValueOrNull(taskObject, "start");
\r
241 // Double end = getDoubleValueOrNull(taskObject, "end");
\r
243 //// System.out.println("Task: " + name + ", start: " + start + ", end: " + end);
\r
245 // if(start >= 0 && end >= 0 && start < end) {
\r
246 // Task task = new Task(name, new Date(start.intValue()), new Date(end.intValue()));
\r
249 // //JSONArray subtasksArray = taskObject.getJSONArray("subtasks");
\r
250 // @SuppressWarnings("unchecked")
\r
251 // List<IJSONObject> subtasksArray = (List<IJSONObject>) object.getValue("subtasks");
\r
252 //// System.out.println("\tFound " + subtasksArray.length() + " subtasks");
\r
253 // for(IJSONObject subtaskObject : subtasksArray) {
\r
254 // //IJSONObject subtaskObject = subtasksArray.getJSONObject(s);
\r
255 // String subtaskname = getStringValueOrNull(subtaskObject, "name");
\r
256 // Double subtaskstart = getDoubleValueOrNull(subtaskObject, "start");
\r
257 // Double subtaskend = getDoubleValueOrNull(subtaskObject, "end");
\r
258 // if(subtaskstart >= 0 && subtaskend >= 0 && subtaskstart < subtaskend) {
\r
259 // Task subtask = new Task(subtaskname + " subtask " + (subtasksArray.indexOf(subtaskObject)), new Date(subtaskstart.intValue()), new Date(subtaskend.intValue()));
\r
260 // task.addSubtask(subtask);
\r
261 //// System.out.println("\tSubTask: " + subtaskname + ", start: " + subtaskstart + ", end: " + subtaskend);
\r
264 // } catch (ClassCastException e) {
\r
265 // // Some tasks may not have subtasks
\r
266 // e.printStackTrace();
\r
269 // series.add(task);
\r
273 // collection.add(series);
\r
275 // } catch (ClassCastException e) {
\r
276 // e.printStackTrace();
\r
278 // return collection;
\r
281 @SuppressWarnings("unchecked")
\r
282 public static Collection<IDataDefinition> getDataDefinitions(IJSONObject object) {
\r
284 Collection<IDataDefinition> result = (List<IDataDefinition>) object.getValue("dataDefinitions");
\r
285 if(result != null) return result;
\r
286 } catch (ClassCastException e) {
\r
287 e.printStackTrace();
\r
289 return Collections.emptyList();
\r
292 @SuppressWarnings("unchecked")
\r
293 public static Collection<ITableCell> getTableCell(IJSONObject object) {
\r
295 Object tableCells = object.getValue("tableCells");
\r
296 if (tableCells instanceof String) {
\r
297 String tableCellsS = (String) tableCells;
\r
298 if (tableCellsS.length() == 0)
\r
299 return Collections.emptyList();
\r
301 if (tableCells != null) {
\r
302 return (List<ITableCell>) tableCells;
\r
304 return Collections.emptyList();
\r
306 } catch (ClassCastException e) {
\r
307 e.printStackTrace();
\r
309 return Collections.emptyList();
\r
312 public static Collection<FileInfo> getFiles(IJSONObject object) {
\r
314 @SuppressWarnings("unchecked")
\r
315 List<IJSONObject> fileArray = (List<IJSONObject>) object.getValue("files");
\r
316 ArrayList<FileInfo> fileList = new ArrayList<FileInfo>();
\r
317 for(IJSONObject f : fileArray) {
\r
318 String name = getValueOrDefault(f, "name", "");
\r
319 String content = getValueOrDefault(f, "content", "");
\r
320 Long resourceId = getValueOrDefault(f, "resourceId", 0L);
\r
321 Long creationTimeMillis = getValueOrDefault(f, "creationTimeMillis", 0L);
\r
322 boolean canModify = getValueOrDefault(f, "canModify", false);
\r
323 if(name != null && content != null) {
\r
324 fileList.add(new FileInfo(name, content, resourceId, creationTimeMillis, canModify));
\r
328 } catch (ClassCastException e) {
\r
329 e.printStackTrace();
\r
332 return Collections.emptyList();
\r
335 public static List<IListItem> getListItems(IJSONObject object) {
\r
336 Object items = object.getValue("listItems");
\r
337 if (items instanceof List<?>)
\r
338 return (List<IListItem>) items;
\r
340 return Collections.<IListItem>emptyList();
\r