]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.document.server.io/src/org/simantics/document/server/io/JSONObjectUtils.java
Merge commit 'bf75fd9'
[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 boolean followEditMode(IJSONObject object) {\r
67         return getValueOrDefault(object, "followEditMode", true);\r
68     }\r
69 \r
70     public static String getType(IJSONObject object) {\r
71         String result = (String)object.getValue("type");\r
72         if(result == null) throw new IllegalStateException("No type for object " + object);\r
73         return result;\r
74     }\r
75 \r
76     public static String getId(IJSONObject object) {\r
77         String result = (String)object.getValue("id");\r
78         if(result == null) throw new IllegalStateException("No type for object " + object);\r
79         return result;\r
80     }\r
81     \r
82     public static <T> T getValueOrDefault(IJSONObject object, String key, T defaultValue) {\r
83         try {\r
84                 T value = (T)object.getValue(key);\r
85                 if(value != null) return value;\r
86         } catch (ClassCastException e) {\r
87             e.printStackTrace();\r
88         }\r
89         return defaultValue;        \r
90     }\r
91     \r
92     public static String[] getStringArrayValueOrDefault(IJSONObject object, String key, String[] defaultValue) {\r
93         try {\r
94             Object o = object.getValue(key);\r
95             if (o instanceof List) {\r
96                 @SuppressWarnings("unchecked")\r
97                 List<String> s = (List<String>) o;\r
98                 return s.toArray(new String[s.size()]);\r
99             } else if (o instanceof String[]) {\r
100                 return (String[]) o;\r
101             }\r
102         } catch (ClassCastException e) {\r
103             e.printStackTrace();\r
104         }\r
105         return defaultValue;\r
106     }\r
107 \r
108     public static float[] getFloatArrayValueOrDefault(IJSONObject object, String key, float[] defaultValue) {\r
109         try {\r
110                 Object o = object.getValue(key);\r
111             if (o instanceof List) {\r
112                 @SuppressWarnings("unchecked")\r
113                 List<Float> list = (List<Float>) o;\r
114                 float[] result = new float[list.size()];\r
115                 int pos = 0;\r
116                 for (float value : list) {\r
117                         result[pos++] = value;\r
118                 }\r
119                 return result;\r
120             } else if (o instanceof float[]) {\r
121                 return (float[]) o;\r
122             }\r
123         } catch (ClassCastException e) {\r
124             e.printStackTrace();\r
125         }\r
126         return defaultValue;\r
127     }\r
128 \r
129     public static int[] getIntArrayValueOrDefault(IJSONObject object, String key, int[] defaultValue) {\r
130         try {\r
131             Object o = object.getValue(key);\r
132             if (o instanceof List) {\r
133                 @SuppressWarnings("unchecked")\r
134                 List<Integer> list = (List<Integer>) o;\r
135                 int[] result = new int[list.size()];\r
136                 int pos = 0;\r
137                 for (int i : list) {\r
138                         result[pos++] = i;\r
139                 }\r
140                 return result;\r
141             } else if (o instanceof int[]) {\r
142                 return (int[]) o;\r
143             }\r
144         } catch (ClassCastException e) {\r
145             e.printStackTrace();\r
146         }\r
147         return defaultValue;\r
148     }\r
149 \r
150     public static double[] getDoubleArrayValueOrDefault(IJSONObject object, String key, double[] defaultValue) {\r
151         try {\r
152                 Object o = object.getValue(key);\r
153             if (o instanceof List) {\r
154                 @SuppressWarnings("unchecked")\r
155                 List<Double> list = (List<Double>) o;\r
156                 double[] result = new double[list.size()];\r
157                 int pos = 0;\r
158                 for (double value : list) {\r
159                         result[pos++] = value;\r
160                 }\r
161                 return result;\r
162             } else if (o instanceof double[]) {\r
163                 return (double[]) o;\r
164             }\r
165         } catch (ClassCastException e) {\r
166             e.printStackTrace();\r
167         }\r
168         return defaultValue;\r
169     }\r
170     \r
171 //    public static String[] getObjectArrayValue(IJSONObject object, String key) {\r
172 //        try {\r
173 //            String value = (String)object.getValue(key);\r
174 //            if(value != null && value.startsWith("[") && value.endsWith("]")) {\r
175 //              \r
176 //              if(value.length() == 2) return new String[0];\r
177 //              \r
178 //                value = value.substring(1, value.length() - 1);\r
179 //                String[] split = value.split(",");\r
180 //                \r
181 //                for(int i = 0; i < split.length; i++) {\r
182 //                      if(split[i].startsWith("\"") && split[i].endsWith("\""))\r
183 //                                      split[i] = split[i].substring(1, split[i].length() - 1);\r
184 //                }\r
185 //                \r
186 //                return split;\r
187 //            }\r
188 //        } catch (ClassCastException e) {\r
189 //            e.printStackTrace();\r
190 //            return null;\r
191 //        }\r
192 //        \r
193 //        return null;\r
194 //    }\r
195 \r
196     public static Collection<ICommand> getCommands(IJSONObject object) {\r
197         try {\r
198                 Collection<ICommand> result = object.getValue("commands");\r
199                 if(result != null) return result;\r
200         } catch (ClassCastException e) {\r
201             e.printStackTrace();\r
202         }\r
203         return Collections.emptyList();\r
204     }\r
205     \r
206     @SuppressWarnings("unchecked")\r
207     public static Collection<IChartItem> getChartItems(IJSONObject object) {\r
208         try {\r
209             Object values = object.getValue("values");\r
210             if (values == null)\r
211                 return Collections.emptyList();\r
212             if (values instanceof String) {\r
213                 String valuess = (String) values;\r
214                 if (valuess.length() == 0)\r
215                     return Collections.emptyList();\r
216             }\r
217             return (List<IChartItem>) values;\r
218         } catch (ClassCastException e) {\r
219             e.printStackTrace();\r
220         }\r
221         \r
222         return Collections.emptyList();\r
223     }\r
224     \r
225 //    public static TaskSeriesCollection getGanttTasks(IJSONObject object) {\r
226 //        TaskSeriesCollection collection = new TaskSeriesCollection();\r
227 //        try {\r
228 //            \r
229 //            //JSONArray seriesArray = object.getJSONArray("ganttSeries");\r
230 //            @SuppressWarnings("unchecked")\r
231 //            List<IJSONObject> seriesArray = (List<IJSONObject>) object.getValue("ganttSeries");\r
232 //            for(IJSONObject seriesObject : seriesArray) {\r
233 //                //IJSONObject seriesObject = seriesArray.getJSONObject(i);\r
234 //                \r
235 //                TaskSeries series = new TaskSeries(getStringValueOrNull(seriesObject, "name"));\r
236 //                \r
237 //                //JSONArray tasksArray = seriesObject.getJSONArray("tasks");\r
238 //                @SuppressWarnings("unchecked")\r
239 //                List<IJSONObject> tasksArray = (List<IJSONObject>) object.getValue("tasks");\r
240 //                \r
241 //                for(IJSONObject taskObject : tasksArray) {\r
242 //                    //IJSONObject taskObject = tasksArray.getJSONObject(j);\r
243 //                    String name = getStringValueOrNull(taskObject, "name");\r
244 //                    Double start = getDoubleValueOrNull(taskObject, "start");\r
245 //                    Double end = getDoubleValueOrNull(taskObject, "end");\r
246 //                    \r
247 ////                    System.out.println("Task: " + name + ", start: " + start + ", end: " + end);\r
248 //                    \r
249 //                    if(start >= 0 && end >= 0 && start < end) {\r
250 //                        Task task = new Task(name,  new Date(start.intValue()), new Date(end.intValue()));\r
251 //                        \r
252 //                        try {\r
253 //                            //JSONArray subtasksArray = taskObject.getJSONArray("subtasks");\r
254 //                            @SuppressWarnings("unchecked")\r
255 //                            List<IJSONObject> subtasksArray = (List<IJSONObject>) object.getValue("subtasks");\r
256 ////                            System.out.println("\tFound " + subtasksArray.length() + " subtasks");\r
257 //                            for(IJSONObject subtaskObject : subtasksArray) {\r
258 //                                //IJSONObject subtaskObject = subtasksArray.getJSONObject(s);\r
259 //                                String subtaskname = getStringValueOrNull(subtaskObject, "name");\r
260 //                                Double subtaskstart = getDoubleValueOrNull(subtaskObject, "start");\r
261 //                                Double subtaskend = getDoubleValueOrNull(subtaskObject, "end");\r
262 //                                if(subtaskstart >= 0 && subtaskend >= 0 && subtaskstart < subtaskend) {\r
263 //                                    Task subtask = new Task(subtaskname + " subtask " + (subtasksArray.indexOf(subtaskObject)),  new Date(subtaskstart.intValue()), new Date(subtaskend.intValue()));\r
264 //                                    task.addSubtask(subtask);\r
265 ////                                    System.out.println("\tSubTask: " + subtaskname + ", start: " + subtaskstart + ", end: " + subtaskend);\r
266 //                                }\r
267 //                            }\r
268 //                        } catch (ClassCastException e) {\r
269 //                            // Some tasks may not have subtasks\r
270 //                            e.printStackTrace();\r
271 //                        }\r
272 //                        \r
273 //                        series.add(task);\r
274 //                    }\r
275 //                }\r
276 //                \r
277 //                collection.add(series);\r
278 //            }\r
279 //        } catch (ClassCastException e) {\r
280 //            e.printStackTrace();\r
281 //        }\r
282 //        return collection;\r
283 //    }\r
284     \r
285     @SuppressWarnings("unchecked")\r
286     public static Collection<IDataDefinition> getDataDefinitions(IJSONObject object) {\r
287         try {\r
288                 Collection<IDataDefinition> result = (List<IDataDefinition>) object.getValue("dataDefinitions");\r
289                 if(result != null) return result;\r
290         } catch (ClassCastException e) {\r
291             e.printStackTrace();\r
292         }\r
293         return Collections.emptyList();\r
294     }\r
295     \r
296     @SuppressWarnings("unchecked")\r
297     public static Collection<ITableCell> getTableCell(IJSONObject object) {\r
298         try {\r
299             Object tableCells = object.getValue("tableCells");\r
300             if (tableCells instanceof String) {\r
301                 String tableCellsS = (String) tableCells;\r
302                 if (tableCellsS.length() == 0)\r
303                     return Collections.emptyList();\r
304             }\r
305             if (tableCells != null) {\r
306                 return (List<ITableCell>) tableCells;\r
307             } else {\r
308                 return Collections.emptyList();\r
309             }\r
310         } catch (ClassCastException e) {\r
311             e.printStackTrace();\r
312         }\r
313         return Collections.emptyList();\r
314     }\r
315     \r
316     public static Collection<FileInfo> getFiles(IJSONObject object) {\r
317         try {\r
318             @SuppressWarnings("unchecked")\r
319             List<IJSONObject> fileArray = (List<IJSONObject>) object.getValue("files");\r
320             ArrayList<FileInfo> fileList = new ArrayList<FileInfo>();\r
321             for(IJSONObject f : fileArray) {\r
322                 String name = getValueOrDefault(f, "name", "");\r
323                 String content = getValueOrDefault(f, "content", "");\r
324                 Long resourceId = getValueOrDefault(f, "resourceId", 0L);\r
325                 Long creationTimeMillis = getValueOrDefault(f, "creationTimeMillis", 0L);\r
326                 boolean canModify = getValueOrDefault(f, "canModify", false);\r
327                 if(name != null && content != null) {\r
328                     fileList.add(new FileInfo(name, content, resourceId, creationTimeMillis, canModify));\r
329                 }\r
330             }\r
331             return fileList;\r
332         } catch (ClassCastException e) {\r
333             e.printStackTrace();\r
334         }\r
335         \r
336         return Collections.emptyList();\r
337     }\r
338 \r
339     public static List<IListItem> getListItems(IJSONObject object) {\r
340         Object items =  object.getValue("listItems");\r
341         if (items instanceof List<?>)\r
342             return (List<IListItem>) items;\r
343         else\r
344             return Collections.<IListItem>emptyList();\r
345     }\r
346 }\r