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