]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.views/src/org/simantics/views/ViewUtils.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.views / src / org / simantics / views / ViewUtils.java
1 package org.simantics.views;\r
2 \r
3 import org.eclipse.jface.viewers.ISelection;\r
4 import org.eclipse.jface.viewers.ISelectionProvider;\r
5 import org.eclipse.ui.PlatformUI;\r
6 import org.simantics.Simantics;\r
7 import org.simantics.databoard.Bindings;\r
8 import org.simantics.databoard.binding.Binding;\r
9 import org.simantics.databoard.binding.error.BindingException;\r
10 import org.simantics.databoard.util.Bean;\r
11 import org.simantics.db.ReadGraph;\r
12 import org.simantics.db.RequestProcessor;\r
13 import org.simantics.db.Resource;\r
14 import org.simantics.db.WriteGraph;\r
15 import org.simantics.db.common.request.ResourceRead;\r
16 import org.simantics.db.common.request.TernaryRead;\r
17 import org.simantics.db.common.request.WriteRequest;\r
18 import org.simantics.db.common.utils.Functions;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.db.layer0.variable.Variable;\r
21 import org.simantics.db.procedure.Listener;\r
22 import org.simantics.scl.runtime.function.Function1;\r
23 import org.simantics.scl.runtime.function.Function2;\r
24 import org.simantics.views.ontology.ViewsResources;\r
25 \r
26 public class ViewUtils {\r
27 \r
28         public static class ExtendedMargins {\r
29                 \r
30         public int left, right, top, bottom;\r
31                 \r
32     }\r
33 \r
34     public static final Binding EXTENDED_MARGINS_BINDING = Bindings.getBindingUnchecked(ExtendedMargins.class);\r
35         \r
36         public static class GridLayoutBean extends Bean {\r
37                 \r
38                 public int numColumns;\r
39                 public int horizontalSpacing;\r
40                 public int verticalSpacing;\r
41                 public int marginLeft;\r
42                 public int marginRight;\r
43                 public int marginTop;\r
44                 public int marginBottom;\r
45                 \r
46         }\r
47         \r
48         public static class GridDataBean extends Bean {\r
49                 \r
50                 public int horizontalSpan;\r
51                 public boolean grabExcessHorizontalSpace;\r
52                 public boolean grabExcessVerticalSpace;\r
53                 public int horizontalAlignment;\r
54                 public int verticalAlignment;\r
55                 public int widthHint;\r
56                 public int heightHint;\r
57                 \r
58         }\r
59         \r
60         public static class ColumnBean extends Bean {\r
61                 \r
62                 public String key;\r
63                 public String label;\r
64                 public String alignment;\r
65                 public int width;\r
66                 public String tooltip;\r
67                 public boolean grab;\r
68                 public int weight;\r
69                 \r
70         }\r
71         \r
72 \r
73         \r
74         public static GridLayoutBean getLayout(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
75 \r
76                 return processor.sync(new ResourceRead<GridLayoutBean>(configuration) {\r
77 \r
78                         @Override\r
79                         public GridLayoutBean perform(ReadGraph graph) throws DatabaseException {\r
80 \r
81                                 ViewsResources VIEW = ViewsResources.getInstance(graph);\r
82 \r
83                                 Integer columns = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_columnCount, Bindings.INTEGER);\r
84                                 Integer horizontalSpacing = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_horizontalSpacing, Bindings.INTEGER);\r
85                                 Integer verticalSpacing = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_verticalSpacing, Bindings.INTEGER);\r
86                                 ExtendedMargins extendedMargins = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_extendedMargins, EXTENDED_MARGINS_BINDING);\r
87                                 \r
88                                 GridLayoutBean layout = new GridLayoutBean();//.fillDefaults().numColumns(1).equalWidth(false).margins(0, 0).spacing(0, 0).create();\r
89                                 layout.numColumns = columns;\r
90                                 layout.horizontalSpacing = horizontalSpacing;\r
91                                 layout.verticalSpacing = verticalSpacing;\r
92                                 layout.marginLeft = extendedMargins.left;\r
93                                 layout.marginRight = extendedMargins.right;\r
94                                 layout.marginTop = extendedMargins.top;\r
95                                 layout.marginBottom = extendedMargins.bottom;\r
96 \r
97                                 return layout;\r
98 \r
99                         }\r
100 \r
101                 });\r
102                 \r
103         }\r
104 \r
105         public static GridDataBean getGridData(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
106         \r
107                 return processor.sync(new ResourceRead<GridDataBean>(configuration) {\r
108 \r
109                         @Override\r
110                         public GridDataBean perform(ReadGraph graph) throws DatabaseException {\r
111 \r
112                                 ViewsResources VIEW = ViewsResources.getInstance(graph);\r
113                                 GridDataBean data = new GridDataBean();\r
114                                 \r
115                                 data.horizontalSpan = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalSpan, Bindings.INTEGER);\r
116                                 data.grabExcessHorizontalSpace = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalGrab, Bindings.BOOLEAN);\r
117                                 data.grabExcessVerticalSpace = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_verticalGrab, Bindings.BOOLEAN);\r
118                                 data.horizontalAlignment = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalAlignment, Bindings.INTEGER);\r
119                                 data.verticalAlignment = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_verticalAlignment, Bindings.INTEGER);\r
120                                 data.widthHint = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_preferredWidth, Bindings.INTEGER);\r
121                                 data.heightHint = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_preferredHeight, Bindings.INTEGER);\r
122 \r
123                                 return data;\r
124                                 \r
125                         }\r
126 \r
127                 });\r
128     \r
129         }\r
130 \r
131         public static int getStyle(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
132                 \r
133                 return processor.sync(new ResourceRead<Integer>(configuration) {\r
134 \r
135                         @Override\r
136                         public Integer perform(ReadGraph graph) throws DatabaseException {\r
137 \r
138                                 ViewsResources VIEW = ViewsResources.getInstance(graph);\r
139                                 \r
140                                 int result = 0;\r
141                                 for(Resource constant : graph.getObjects(resource, VIEW.Control_Style_HasConstant)) {\r
142                                         int value = graph.getValue(constant, Bindings.INTEGER);\r
143                                         result |= value;\r
144                                 }\r
145                                 \r
146                                 return result;\r
147                                 \r
148                         }\r
149 \r
150                 });\r
151     \r
152         }\r
153 \r
154         public static ColumnBean getColumn(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
155                 \r
156                 return processor.sync(new ResourceRead<ColumnBean>(configuration) {\r
157 \r
158                         @Override\r
159                         public ColumnBean perform(ReadGraph graph) throws DatabaseException {\r
160 \r
161                                 ViewsResources VIEW = ViewsResources.getInstance(graph);\r
162                                 String key = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasKey, Bindings.STRING);\r
163                                 String label = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasLabel, Bindings.STRING);\r
164                                 String alignment = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasAlignment, Bindings.STRING);\r
165                                 Integer width = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasWidth, Bindings.INTEGER);\r
166                                 String tooltip = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasTooltip, Bindings.STRING);\r
167                                 Boolean grab = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasGrab, Bindings.BOOLEAN);\r
168                                 Integer weight = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasWeight, Bindings.INTEGER);\r
169                                 \r
170                                 ColumnBean bean = new ColumnBean();\r
171                                 bean.key = key;\r
172                                 bean.label = label;\r
173                                 bean.alignment = alignment;\r
174                                 bean.width = width;\r
175                                 bean.tooltip = tooltip;\r
176                                 bean.grab = grab;\r
177                                 bean.weight = weight;\r
178                                 \r
179                                 return bean;\r
180                                 \r
181                         }\r
182                         \r
183                 });\r
184     \r
185         }\r
186         \r
187         public static <T> void listen(Resource configuration, Variable context, String relationURI, final Binding binding, final Function1<T, Boolean> function) throws DatabaseException {\r
188 \r
189                 Simantics.getSession().async(new TernaryRead<Resource, Variable, String, T> (configuration, context, relationURI) {\r
190 \r
191                         @Override\r
192                         public T perform(ReadGraph graph) throws DatabaseException {\r
193                                 Object value = graph.getRelatedValue2(parameter, graph.getResource(parameter3), parameter2);\r
194                                 Object result = binding.createDefaultUnchecked();\r
195                                 try {\r
196                                         binding.readFrom(Bindings.getBinding(binding.type()), value, result);\r
197                                 } catch (BindingException e) {\r
198 //                                      e.printStackTrace();\r
199                                         throw new DatabaseException(e);\r
200                                 }\r
201                                 return (T)result;\r
202                         }\r
203                         \r
204                 }, new Listener<T>() {\r
205 \r
206                         private boolean disposed = false;\r
207                         \r
208             @Override\r
209             public void exception(Throwable t) {\r
210 //              t.printStackTrace();\r
211             }\r
212 \r
213             @Override\r
214             public void execute(T result) {\r
215                 disposed = function.apply(result);\r
216             }\r
217 \r
218             @Override\r
219             public boolean isDisposed() {\r
220                 return disposed;\r
221             }\r
222 \r
223         });\r
224     \r
225         }\r
226         \r
227         public static <T> void listen(Resource configuration, Variable context, String relationURI, final Function1<T, Boolean> function) throws DatabaseException {\r
228 \r
229                 Simantics.getSession().async(new TernaryRead<Resource, Variable, String, T> (configuration, context, relationURI) {\r
230 \r
231                         @Override\r
232                         public T perform(ReadGraph graph) throws DatabaseException {\r
233                         return graph.getRelatedValue2(parameter, graph.getResource(parameter3), parameter2);\r
234                         }\r
235                         \r
236                 }, new Listener<T>() {\r
237 \r
238                         private boolean disposed = false;\r
239                         \r
240             @Override\r
241             public void exception(Throwable t) {\r
242 //              t.printStackTrace();\r
243             }\r
244 \r
245             @Override\r
246             public void execute(T result) {\r
247                 disposed = function.apply(result);\r
248             }\r
249 \r
250             @Override\r
251             public boolean isDisposed() {\r
252                 return disposed;\r
253             }\r
254 \r
255         });\r
256     \r
257         }\r
258         \r
259         public static Function2<Object, Object, Object> getActionFunctionDeprecated(final Resource configuration, final Resource runtime, final String relationURI) throws DatabaseException {\r
260                 \r
261                 return new Function2<Object, Object, Object>() {\r
262                         \r
263                         @Override\r
264                         public Object apply(final Object selection, final Object event) {\r
265                                 \r
266                                 Simantics.getSession().async(new WriteRequest() {\r
267 \r
268                                         @Override\r
269                                         public void perform(WriteGraph graph) throws DatabaseException {\r
270 \r
271                                         Resource relation = graph.getResource(relationURI);\r
272                                         \r
273                                         final Resource function = graph.getSingleObject(configuration, relation);\r
274                                                 \r
275                                                 Functions.exec(graph, function, graph, runtime, selection, event);\r
276                                                 \r
277                                         }\r
278                                         \r
279                                 });\r
280                                 \r
281                                 return null;\r
282                                 \r
283                         }\r
284                         \r
285                 };\r
286     \r
287         }\r
288         \r
289         public static void setWorkbenchSelection(ISelection selection) {\r
290                 ISelectionProvider provider = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite().getSelectionProvider();\r
291         provider.setSelection(selection);\r
292         }\r
293         \r
294 }\r