]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java
794b9e55b364a524c9e5a8fe583e153c10d8d429
[simantics/platform.git] / bundles / org.simantics.document.server.io / src / org / simantics / document / server / io / JSONObjectUtils.java
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
9  *\r
10  * Contributors:\r
11  *     Semantum Oy - initial API and implementation\r
12  *******************************************************************************/\r
13 package org.simantics.document.server.io;\r
14 \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
19 \r
20 public class JSONObjectUtils {\r
21     \r
22     public static String getText(IJSONObject object) {\r
23         return getValueOrDefault(object, "text", "");\r
24     }\r
25     \r
26     public static String getLink(IJSONObject object) {\r
27         return getValueOrDefault(object, "link", "");\r
28     }\r
29     \r
30     public static String getTarget(IJSONObject object) {\r
31         return getValueOrDefault(object, "target", "");\r
32     }\r
33     \r
34     public static String getHyperLinkTarget(IJSONObject object){\r
35         return getValueOrDefault(object, "hyperlinkTarget", "");\r
36     }\r
37     \r
38     public static String getWidth(IJSONObject object) {\r
39         return getValueOrDefault(object, "width", "");\r
40     }\r
41     \r
42     public static String getHeight(IJSONObject object) {\r
43         return getValueOrDefault(object, "height", "");\r
44     }\r
45 \r
46     public static String getParent(IJSONObject object) {\r
47         return object.getValue("parent");\r
48     }\r
49     \r
50     public static boolean enabled(IJSONObject object) {\r
51         return getValueOrDefault(object, "enabled", true);\r
52     }\r
53     \r
54     public static boolean visible(IJSONObject object) {\r
55         return getValueOrDefault(object, "visible", true);\r
56     }\r
57     \r
58     public static boolean readOnly(IJSONObject object) {\r
59         return getValueOrDefault(object, "readOnly", false);\r
60     }\r
61     \r
62     public static boolean selected(IJSONObject object) {\r
63         return getValueOrDefault(object, "selected", false);\r
64     }\r
65     \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
69         return result;\r
70     }\r
71 \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
75         return result;\r
76     }\r
77     \r
78     public static <T> T getValueOrDefault(IJSONObject object, String key, T defaultValue) {\r
79         try {\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
84         }\r
85         return defaultValue;        \r
86     }\r
87     \r
88     public static String[] getStringArrayValueOrDefault(IJSONObject object, String key, String[] defaultValue) {\r
89         try {\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
97             }\r
98         } catch (ClassCastException e) {\r
99             e.printStackTrace();\r
100         }\r
101         return defaultValue;\r
102     }\r
103 \r
104     public static float[] getFloatArrayValueOrDefault(IJSONObject object, String key, float[] defaultValue) {\r
105         try {\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
111                 int pos = 0;\r
112                 for (float value : list) {\r
113                         result[pos++] = value;\r
114                 }\r
115                 return result;\r
116             } else if (o instanceof float[]) {\r
117                 return (float[]) o;\r
118             }\r
119         } catch (ClassCastException e) {\r
120             e.printStackTrace();\r
121         }\r
122         return defaultValue;\r
123     }\r
124 \r
125     public static int[] getIntArrayValueOrDefault(IJSONObject object, String key, int[] defaultValue) {\r
126         try {\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
132                 int pos = 0;\r
133                 for (int i : list) {\r
134                         result[pos++] = i;\r
135                 }\r
136                 return result;\r
137             } else if (o instanceof int[]) {\r
138                 return (int[]) o;\r
139             }\r
140         } catch (ClassCastException e) {\r
141             e.printStackTrace();\r
142         }\r
143         return defaultValue;\r
144     }\r
145 \r
146     public static double[] getDoubleArrayValueOrDefault(IJSONObject object, String key, double[] defaultValue) {\r
147         try {\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
153                 int pos = 0;\r
154                 for (double value : list) {\r
155                         result[pos++] = value;\r
156                 }\r
157                 return result;\r
158             } else if (o instanceof double[]) {\r
159                 return (double[]) o;\r
160             }\r
161         } catch (ClassCastException e) {\r
162             e.printStackTrace();\r
163         }\r
164         return defaultValue;\r
165     }\r
166     \r
167 //    public static String[] getObjectArrayValue(IJSONObject object, String key) {\r
168 //        try {\r
169 //            String value = (String)object.getValue(key);\r
170 //            if(value != null && value.startsWith("[") && value.endsWith("]")) {\r
171 //              \r
172 //              if(value.length() == 2) return new String[0];\r
173 //              \r
174 //                value = value.substring(1, value.length() - 1);\r
175 //                String[] split = value.split(",");\r
176 //                \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
180 //                }\r
181 //                \r
182 //                return split;\r
183 //            }\r
184 //        } catch (ClassCastException e) {\r
185 //            e.printStackTrace();\r
186 //            return null;\r
187 //        }\r
188 //        \r
189 //        return null;\r
190 //    }\r
191 \r
192     public static Collection<ICommand> getCommands(IJSONObject object) {\r
193         try {\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
198         }\r
199         return Collections.emptyList();\r
200     }\r
201     \r
202     @SuppressWarnings("unchecked")\r
203     public static Collection<IChartItem> getChartItems(IJSONObject object) {\r
204         try {\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
212             }\r
213             return (List<IChartItem>) values;\r
214         } catch (ClassCastException e) {\r
215             e.printStackTrace();\r
216         }\r
217         \r
218         return Collections.emptyList();\r
219     }\r
220     \r
221 //    public static TaskSeriesCollection getGanttTasks(IJSONObject object) {\r
222 //        TaskSeriesCollection collection = new TaskSeriesCollection();\r
223 //        try {\r
224 //            \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
230 //                \r
231 //                TaskSeries series = new TaskSeries(getStringValueOrNull(seriesObject, "name"));\r
232 //                \r
233 //                //JSONArray tasksArray = seriesObject.getJSONArray("tasks");\r
234 //                @SuppressWarnings("unchecked")\r
235 //                List<IJSONObject> tasksArray = (List<IJSONObject>) object.getValue("tasks");\r
236 //                \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
242 //                    \r
243 ////                    System.out.println("Task: " + name + ", start: " + start + ", end: " + end);\r
244 //                    \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
247 //                        \r
248 //                        try {\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
262 //                                }\r
263 //                            }\r
264 //                        } catch (ClassCastException e) {\r
265 //                            // Some tasks may not have subtasks\r
266 //                            e.printStackTrace();\r
267 //                        }\r
268 //                        \r
269 //                        series.add(task);\r
270 //                    }\r
271 //                }\r
272 //                \r
273 //                collection.add(series);\r
274 //            }\r
275 //        } catch (ClassCastException e) {\r
276 //            e.printStackTrace();\r
277 //        }\r
278 //        return collection;\r
279 //    }\r
280     \r
281     @SuppressWarnings("unchecked")\r
282     public static Collection<IDataDefinition> getDataDefinitions(IJSONObject object) {\r
283         try {\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
288         }\r
289         return Collections.emptyList();\r
290     }\r
291     \r
292     @SuppressWarnings("unchecked")\r
293     public static Collection<ITableCell> getTableCell(IJSONObject object) {\r
294         try {\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
300             }\r
301             if (tableCells != null) {\r
302                 return (List<ITableCell>) tableCells;\r
303             } else {\r
304                 return Collections.emptyList();\r
305             }\r
306         } catch (ClassCastException e) {\r
307             e.printStackTrace();\r
308         }\r
309         return Collections.emptyList();\r
310     }\r
311     \r
312     public static Collection<FileInfo> getFiles(IJSONObject object) {\r
313         try {\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
325                 }\r
326             }\r
327             return fileList;\r
328         } catch (ClassCastException e) {\r
329             e.printStackTrace();\r
330         }\r
331         \r
332         return Collections.emptyList();\r
333     }\r
334 \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
339         else\r
340             return Collections.<IListItem>emptyList();\r
341     }\r
342 }\r