]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.views/src/org/simantics/views/ViewUtils.java b/bundles/org.simantics.views/src/org/simantics/views/ViewUtils.java
new file mode 100644 (file)
index 0000000..f22e5ad
--- /dev/null
@@ -0,0 +1,294 @@
+package org.simantics.views;\r
+\r
+import org.eclipse.jface.viewers.ISelection;\r
+import org.eclipse.jface.viewers.ISelectionProvider;\r
+import org.eclipse.ui.PlatformUI;\r
+import org.simantics.Simantics;\r
+import org.simantics.databoard.Bindings;\r
+import org.simantics.databoard.binding.Binding;\r
+import org.simantics.databoard.binding.error.BindingException;\r
+import org.simantics.databoard.util.Bean;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.common.request.TernaryRead;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.common.utils.Functions;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.variable.Variable;\r
+import org.simantics.db.procedure.Listener;\r
+import org.simantics.scl.runtime.function.Function1;\r
+import org.simantics.scl.runtime.function.Function2;\r
+import org.simantics.views.ontology.ViewsResources;\r
+\r
+public class ViewUtils {\r
+\r
+       public static class ExtendedMargins {\r
+               \r
+        public int left, right, top, bottom;\r
+               \r
+    }\r
+\r
+    public static final Binding EXTENDED_MARGINS_BINDING = Bindings.getBindingUnchecked(ExtendedMargins.class);\r
+       \r
+       public static class GridLayoutBean extends Bean {\r
+               \r
+               public int numColumns;\r
+               public int horizontalSpacing;\r
+               public int verticalSpacing;\r
+               public int marginLeft;\r
+               public int marginRight;\r
+               public int marginTop;\r
+               public int marginBottom;\r
+               \r
+       }\r
+       \r
+       public static class GridDataBean extends Bean {\r
+               \r
+               public int horizontalSpan;\r
+               public boolean grabExcessHorizontalSpace;\r
+               public boolean grabExcessVerticalSpace;\r
+               public int horizontalAlignment;\r
+               public int verticalAlignment;\r
+               public int widthHint;\r
+               public int heightHint;\r
+               \r
+       }\r
+       \r
+       public static class ColumnBean extends Bean {\r
+               \r
+               public String key;\r
+               public String label;\r
+               public String alignment;\r
+               public int width;\r
+               public String tooltip;\r
+               public boolean grab;\r
+               public int weight;\r
+               \r
+       }\r
+       \r
+\r
+       \r
+       public static GridLayoutBean getLayout(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
+\r
+               return processor.sync(new ResourceRead<GridLayoutBean>(configuration) {\r
+\r
+                       @Override\r
+                       public GridLayoutBean perform(ReadGraph graph) throws DatabaseException {\r
+\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+\r
+                               Integer columns = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_columnCount, Bindings.INTEGER);\r
+                               Integer horizontalSpacing = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_horizontalSpacing, Bindings.INTEGER);\r
+                               Integer verticalSpacing = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_verticalSpacing, Bindings.INTEGER);\r
+                               ExtendedMargins extendedMargins = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_extendedMargins, EXTENDED_MARGINS_BINDING);\r
+                               \r
+                               GridLayoutBean layout = new GridLayoutBean();//.fillDefaults().numColumns(1).equalWidth(false).margins(0, 0).spacing(0, 0).create();\r
+                               layout.numColumns = columns;\r
+                               layout.horizontalSpacing = horizontalSpacing;\r
+                               layout.verticalSpacing = verticalSpacing;\r
+                               layout.marginLeft = extendedMargins.left;\r
+                               layout.marginRight = extendedMargins.right;\r
+                               layout.marginTop = extendedMargins.top;\r
+                               layout.marginBottom = extendedMargins.bottom;\r
+\r
+                               return layout;\r
+\r
+                       }\r
+\r
+               });\r
+               \r
+       }\r
+\r
+       public static GridDataBean getGridData(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
+       \r
+               return processor.sync(new ResourceRead<GridDataBean>(configuration) {\r
+\r
+                       @Override\r
+                       public GridDataBean perform(ReadGraph graph) throws DatabaseException {\r
+\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               GridDataBean data = new GridDataBean();\r
+                               \r
+                               data.horizontalSpan = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalSpan, Bindings.INTEGER);\r
+                               data.grabExcessHorizontalSpace = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalGrab, Bindings.BOOLEAN);\r
+                               data.grabExcessVerticalSpace = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_verticalGrab, Bindings.BOOLEAN);\r
+                               data.horizontalAlignment = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_horizontalAlignment, Bindings.INTEGER);\r
+                               data.verticalAlignment = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_verticalAlignment, Bindings.INTEGER);\r
+                               data.widthHint = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_preferredWidth, Bindings.INTEGER);\r
+                               data.heightHint = graph.getPossibleRelatedValue(resource, VIEW.GridLayout_GridData_preferredHeight, Bindings.INTEGER);\r
+\r
+                               return data;\r
+                               \r
+                       }\r
+\r
+               });\r
+    \r
+       }\r
+\r
+       public static int getStyle(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
+               \r
+               return processor.sync(new ResourceRead<Integer>(configuration) {\r
+\r
+                       @Override\r
+                       public Integer perform(ReadGraph graph) throws DatabaseException {\r
+\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               \r
+                               int result = 0;\r
+                               for(Resource constant : graph.getObjects(resource, VIEW.Control_Style_HasConstant)) {\r
+                                       int value = graph.getValue(constant, Bindings.INTEGER);\r
+                                       result |= value;\r
+                               }\r
+                               \r
+                               return result;\r
+                               \r
+                       }\r
+\r
+               });\r
+    \r
+       }\r
+\r
+       public static ColumnBean getColumn(RequestProcessor processor, Resource configuration) throws DatabaseException {\r
+               \r
+               return processor.sync(new ResourceRead<ColumnBean>(configuration) {\r
+\r
+                       @Override\r
+                       public ColumnBean perform(ReadGraph graph) throws DatabaseException {\r
+\r
+                               ViewsResources VIEW = ViewsResources.getInstance(graph);\r
+                               String key = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasKey, Bindings.STRING);\r
+                               String label = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasLabel, Bindings.STRING);\r
+                               String alignment = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasAlignment, Bindings.STRING);\r
+                               Integer width = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasWidth, Bindings.INTEGER);\r
+                               String tooltip = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasTooltip, Bindings.STRING);\r
+                               Boolean grab = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasGrab, Bindings.BOOLEAN);\r
+                               Integer weight = graph.getPossibleRelatedValue(resource, VIEW.Explorer_Column_HasWeight, Bindings.INTEGER);\r
+                               \r
+                               ColumnBean bean = new ColumnBean();\r
+                               bean.key = key;\r
+                               bean.label = label;\r
+                               bean.alignment = alignment;\r
+                               bean.width = width;\r
+                               bean.tooltip = tooltip;\r
+                               bean.grab = grab;\r
+                               bean.weight = weight;\r
+                               \r
+                               return bean;\r
+                               \r
+                       }\r
+                       \r
+               });\r
+    \r
+       }\r
+       \r
+       public static <T> void listen(Resource configuration, Variable context, String relationURI, final Binding binding, final Function1<T, Boolean> function) throws DatabaseException {\r
+\r
+               Simantics.getSession().async(new TernaryRead<Resource, Variable, String, T> (configuration, context, relationURI) {\r
+\r
+                       @Override\r
+                       public T perform(ReadGraph graph) throws DatabaseException {\r
+                               Object value = graph.getRelatedValue2(parameter, graph.getResource(parameter3), parameter2);\r
+                               Object result = binding.createDefaultUnchecked();\r
+                               try {\r
+                                       binding.readFrom(Bindings.getBinding(binding.type()), value, result);\r
+                               } catch (BindingException e) {\r
+//                                     e.printStackTrace();\r
+                                       throw new DatabaseException(e);\r
+                               }\r
+                               return (T)result;\r
+                       }\r
+                       \r
+               }, new Listener<T>() {\r
+\r
+                       private boolean disposed = false;\r
+                       \r
+            @Override\r
+            public void exception(Throwable t) {\r
+//             t.printStackTrace();\r
+            }\r
+\r
+            @Override\r
+            public void execute(T result) {\r
+               disposed = function.apply(result);\r
+            }\r
+\r
+            @Override\r
+            public boolean isDisposed() {\r
+                return disposed;\r
+            }\r
+\r
+        });\r
+    \r
+       }\r
+       \r
+       public static <T> void listen(Resource configuration, Variable context, String relationURI, final Function1<T, Boolean> function) throws DatabaseException {\r
+\r
+               Simantics.getSession().async(new TernaryRead<Resource, Variable, String, T> (configuration, context, relationURI) {\r
+\r
+                       @Override\r
+                       public T perform(ReadGraph graph) throws DatabaseException {\r
+                       return graph.getRelatedValue2(parameter, graph.getResource(parameter3), parameter2);\r
+                       }\r
+                       \r
+               }, new Listener<T>() {\r
+\r
+                       private boolean disposed = false;\r
+                       \r
+            @Override\r
+            public void exception(Throwable t) {\r
+//             t.printStackTrace();\r
+            }\r
+\r
+            @Override\r
+            public void execute(T result) {\r
+               disposed = function.apply(result);\r
+            }\r
+\r
+            @Override\r
+            public boolean isDisposed() {\r
+                return disposed;\r
+            }\r
+\r
+        });\r
+    \r
+       }\r
+       \r
+       public static Function2<Object, Object, Object> getActionFunctionDeprecated(final Resource configuration, final Resource runtime, final String relationURI) throws DatabaseException {\r
+               \r
+               return new Function2<Object, Object, Object>() {\r
+                       \r
+                       @Override\r
+                       public Object apply(final Object selection, final Object event) {\r
+                               \r
+                               Simantics.getSession().async(new WriteRequest() {\r
+\r
+                                       @Override\r
+                                       public void perform(WriteGraph graph) throws DatabaseException {\r
+\r
+                                       Resource relation = graph.getResource(relationURI);\r
+                                       \r
+                                       final Resource function = graph.getSingleObject(configuration, relation);\r
+                                               \r
+                                               Functions.exec(graph, function, graph, runtime, selection, event);\r
+                                               \r
+                                       }\r
+                                       \r
+                               });\r
+                               \r
+                               return null;\r
+                               \r
+                       }\r
+                       \r
+               };\r
+    \r
+       }\r
+       \r
+       public static void setWorkbenchSelection(ISelection selection) {\r
+               ISelectionProvider provider = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActivePart().getSite().getSelectionProvider();\r
+        provider.setSelection(selection);\r
+       }\r
+       \r
+}\r