]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/flag/DiagramFlagPreferences.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / flag / DiagramFlagPreferences.java
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/flag/DiagramFlagPreferences.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/flag/DiagramFlagPreferences.java
new file mode 100644 (file)
index 0000000..9756606
--- /dev/null
@@ -0,0 +1,109 @@
+package org.simantics.diagram.flag;\r
+\r
+import org.simantics.Simantics;\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.RequestProcessor;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.Session;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.common.primitiverequest.PossibleObject;\r
+import org.simantics.db.common.request.ResourceRead;\r
+import org.simantics.db.common.request.WriteRequest;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.utils.datastructures.Callback;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class DiagramFlagPreferences {\r
+\r
+    /**\r
+     * Return the resource describing the currently active flag labeling scheme\r
+     * from the specified resource. The default intended resource for checking\r
+     * the scheme from is the active project.\r
+     */\r
+    public static class ReadFlagLabelingSchemeResource extends ResourceRead<Resource> {\r
+\r
+        public ReadFlagLabelingSchemeResource(Resource resource) {\r
+            super(resource);\r
+        }\r
+\r
+        @Override\r
+        public Resource perform(ReadGraph graph) throws DatabaseException {\r
+            DiagramResource DIA = DiagramResource.getInstance(graph);\r
+            Resource scheme = graph.syncRequest(new PossibleObject(resource,\r
+                    DIA.UsesLocalFlagLabelingScheme));\r
+            return scheme;\r
+        }\r
+\r
+    }\r
+\r
+    /**\r
+     * Adapt {@link FlagLabelingScheme} instance from the resource describing\r
+     * the currently active flag labeling scheme according to\r
+     * {@link ReadFlagLabelingSchemeResource}.\r
+     */\r
+    public static class ReadFlagLabelingScheme extends ResourceRead<FlagLabelingScheme> {\r
+\r
+        public ReadFlagLabelingScheme(Resource resource) {\r
+            super(resource);\r
+        }\r
+\r
+        @Override\r
+        public FlagLabelingScheme perform(ReadGraph graph) throws DatabaseException {\r
+            DiagramResource DIA = DiagramResource.getInstance(graph);\r
+            Resource scheme = graph.syncRequest(new ReadFlagLabelingSchemeResource(resource));\r
+            if (scheme == null)\r
+                return graph.adapt(DIA.FlagLabelingScheme_Alphabetical, FlagLabelingScheme.class);\r
+            return graph.adapt(scheme, FlagLabelingScheme.class);\r
+        }\r
+\r
+    }\r
+\r
+    public static Resource getActiveFlagLabelingSchemeResource(RequestProcessor processor) throws DatabaseException {\r
+        Resource project = Simantics.getProjectResource();\r
+        if (project == null)\r
+            throw new IllegalStateException("no project is active");\r
+\r
+        return processor.syncRequest(new ReadFlagLabelingSchemeResource(project));\r
+    }\r
+\r
+    public static FlagLabelingScheme getActiveFlagLabelingScheme(RequestProcessor processor) throws DatabaseException {\r
+        Resource project = Simantics.getProjectResource();\r
+        if (project == null)\r
+            throw new IllegalStateException("no project is active");\r
+\r
+        return processor.syncRequest(new ReadFlagLabelingScheme(project));\r
+    }\r
+\r
+    public static void setProjectFlagLabelingScheme(Resource scheme) {\r
+        Resource project = Simantics.getProjectResource();\r
+        if (project == null)\r
+            throw new IllegalStateException("no project is active");\r
+        setFlagLabelingScheme(Simantics.getSession(), project, scheme);\r
+    }\r
+\r
+    public static void setFlagLabelingScheme(Session session, final Resource forTarget, final Resource scheme) {\r
+        session.asyncRequest(new WriteRequest() {\r
+            @Override\r
+            public void perform(WriteGraph graph) throws DatabaseException {\r
+                setFlagLabelingScheme(graph, forTarget, scheme);\r
+            }\r
+        }, new Callback<DatabaseException>() {\r
+            @Override\r
+            public void run(DatabaseException parameter) {\r
+                if (parameter != null)\r
+                    ErrorLogger.defaultLogError(parameter);\r
+            }\r
+        });\r
+    }\r
+\r
+    public static void setFlagLabelingScheme(WriteGraph graph, Resource forTarget, Resource scheme) throws DatabaseException {\r
+        DiagramResource DIA = DiagramResource.getInstance(graph);\r
+        graph.deny(forTarget, DIA.UsesLocalFlagLabelingScheme);\r
+        graph.claim(forTarget, DIA.UsesLocalFlagLabelingScheme, scheme);\r
+    }\r
+\r
+}\r