]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/view/ProfileSelectionProcessor.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.diagram.profile / src / org / simantics / diagram / profile / view / ProfileSelectionProcessor.java
diff --git a/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/view/ProfileSelectionProcessor.java b/bundles/org.simantics.diagram.profile/src/org/simantics/diagram/profile/view/ProfileSelectionProcessor.java
new file mode 100644 (file)
index 0000000..36c93aa
--- /dev/null
@@ -0,0 +1,86 @@
+package org.simantics.diagram.profile.view;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.Collections;\r
+import java.util.Set;\r
+import java.util.TreeSet;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.db.layer0.SelectionHints;\r
+import org.simantics.diagram.stubs.DiagramResource;\r
+import org.simantics.selectionview.ComparableTabContributor;\r
+import org.simantics.selectionview.SelectionProcessor;\r
+import org.simantics.utils.ui.ErrorLogger;\r
+import org.simantics.utils.ui.ISelectionUtils;\r
+\r
+/**\r
+ * @author Tuukka Lehtonen\r
+ */\r
+public class ProfileSelectionProcessor implements SelectionProcessor<Object, ReadGraph> {\r
+\r
+    @Override\r
+    public Collection<?> process(Object selection, ReadGraph g) {\r
+        try {\r
+            Resource object = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, Resource.class);\r
+            ResourcePair object2 = ISelectionUtils.getSinglePossibleKey(selection, SelectionHints.KEY_MAIN, ResourcePair.class);\r
+\r
+            return processInternal(g, object, object2, selection);\r
+               \r
+        } catch (DatabaseException e) {\r
+            ErrorLogger.defaultLogError(e);\r
+        }\r
+\r
+        return Collections.emptyList();\r
+    }\r
+\r
+    private Collection<?> processInternal(ReadGraph g, Resource object, ResourcePair pair, Object selection) throws DatabaseException {\r
+\r
+       Collection<Object> inputs = new ArrayList<Object>();\r
+       \r
+       parseResourceInput(g, object, pair, inputs);\r
+\r
+        return accept(inputs);\r
+    }\r
+\r
+    Collection<ComparableTabContributor> accept(Collection<?> inputs) {\r
+        Set<ComparableTabContributor> result = new TreeSet<ComparableTabContributor>();\r
+//        System.out.println("accept:");\r
+        for (Object input : inputs) {\r
+//            System.out.println("\tINPUT: " + input);\r
+               if (input instanceof SCLInput) {\r
+               SCLInput configurationInput = (SCLInput)input;\r
+                result.add(new ComparableTabContributor(new SCLEditorComposite(), configurationInput.priority, configurationInput.getDatum(), configurationInput.text));\r
+//                result.add(new ComparableTabContributor(new ResourceDescriptionSourceComposite(), -4, configurationInput.getDatum(), "Source"));\r
+            }\r
+        }\r
+        return result;\r
+    }\r
+\r
+    private void parseResourceInput(ReadGraph g, Resource part, ResourcePair pair, Collection<Object> inputs) throws DatabaseException {\r
+        getGroups(g, part, pair, inputs);\r
+    }\r
+\r
+    void getGroups(ReadGraph g, Resource r, ResourcePair p, Collection<Object> result) throws DatabaseException {\r
+        DiagramResource dr = DiagramResource.getInstance(g);\r
+        if (r != null && g.isInstanceOf(r, dr.SCLGroup)) {\r
+            result.add(new SCLInput(r, 1, "SCL Group"));\r
+        }\r
+        if (r != null && g.isInstanceOf(r, dr.SCLTextStyle)) {\r
+            result.add(new SCLInput(r, 2, "SCL Text Style"));\r
+        }\r
+        if (p != null && g.isInstanceOf(p.getSecond(), dr.GroupStyleProfileEntry)) {\r
+               Resource group = g.getPossibleObject(p.getSecond(), dr.ProfileEntry_HasGroup);\r
+                       if (group != null && g.isInstanceOf(group, dr.SCLGroup)) {\r
+                result.add(new SCLInput(group, 1, "SCL Group"));\r
+            }\r
+               Resource style = g.getPossibleObject(p.getSecond(), dr.ProfileEntry_HasStyle);\r
+                       if (style != null && g.isInstanceOf(style, dr.SCLTextStyle)) {\r
+                result.add(new SCLInput(style, 2, "SCL Text Style"));\r
+            }\r
+        }\r
+    }\r
+\r
+}
\ No newline at end of file