]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.charts/src/org/simantics/charts/ui/SubscriptionDropActionFactory.java
Sync git svn branch with SVN repository r33406.
[simantics/platform.git] / bundles / org.simantics.charts / src / org / simantics / charts / ui / SubscriptionDropActionFactory.java
index fe865cb8d4cfa462207ad23505031080db967903..ee3975d9515975a7c4f514830d162260221a14ab 100644 (file)
@@ -14,10 +14,12 @@ package org.simantics.charts.ui;
 import java.util.Collections;\r
 import java.util.HashSet;\r
 import java.util.List;\r
+import java.util.Optional;\r
 import java.util.Set;\r
 \r
 import org.simantics.Simantics;\r
 import org.simantics.browsing.ui.common.ErrorLogger;\r
+import org.simantics.charts.internal.JsonUtils;\r
 import org.simantics.databoard.type.Datatype;\r
 import org.simantics.databoard.util.ObjectUtils;\r
 import org.simantics.db.ReadGraph;\r
@@ -38,8 +40,6 @@ import org.simantics.modeling.ModelingResources;
 import org.simantics.modeling.PropertyVariables;\r
 import org.simantics.modeling.PropertyVariablesImpl;\r
 import org.simantics.modeling.utils.VariableReferences;\r
-import org.simantics.utils.datastructures.Callback;\r
-import org.simantics.utils.datastructures.collections.CollectionUtils;\r
 import org.simantics.utils.ui.ISelectionUtils;\r
 \r
 /**\r
@@ -57,68 +57,64 @@ public class SubscriptionDropActionFactory implements DropActionFactory {
         Resource targetModel = g.syncRequest(new PossibleModel(subscription));\r
 \r
         if(source instanceof RVI) {\r
+            RVI rvi = (RVI)source;\r
+            List<VariableReference> refs = Collections.singletonList(new VariableReference(rvi, getDatatype(g, targetModel, rvi), null));\r
+            return addSubscriptions(g, subscription, refs, Collections.<Resource>emptySet());\r
+        }\r
 \r
-               RVI rvi = (RVI)source;\r
-               List<VariableReference> refs = CollectionUtils.toList(new VariableReference(rvi, getDatatype(g, targetModel, rvi), null));\r
-               if (!refs.isEmpty())\r
-                       return addSubscriptions(g, subscription, refs, Collections.<Resource>emptySet());\r
-               \r
+        List<PropertyVariables> vars = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, PropertyVariables.class);\r
+        if (!vars.isEmpty()) {\r
+            // FIXME: this is a hack for indexed value support\r
+            vars = PropertyVariablesImpl.resolve(g, vars);\r
+            List<VariableReference> references = g.syncRequest(VariableReferences.toReferences(targetModel, vars));\r
+            if (!references.isEmpty())\r
+                return addSubscriptions(g, subscription, references, Collections.<Resource>emptySet());\r
         } else {\r
-        \r
-               List<PropertyVariables> vars = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, PropertyVariables.class);\r
-               if (!vars.isEmpty()) {\r
-                       // FIXME: this is a hack for indexed value support\r
-                       vars = PropertyVariablesImpl.resolve(g, vars);\r
+            List<Resource> srcs = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);\r
+            ModelingResources MOD = ModelingResources.getInstance(g);\r
+            Set<Resource> movedItems = new HashSet<>();\r
+            for (Resource src : srcs) {\r
+                if (g.isInstanceOf(src, MOD.Subscription_Item)) {\r
+                    Resource model = g.syncRequest(new PossibleModel(src));\r
+                    if (ObjectUtils.objectEquals(targetModel, model))\r
+                        movedItems.add(src);\r
+                }\r
+            }\r
+            if (!movedItems.isEmpty())\r
+                return addSubscriptions(g, subscription, Collections.emptyList(), movedItems);\r
+        }\r
 \r
-                       List<VariableReference> references = g.syncRequest(VariableReferences.toReferences(targetModel, vars));\r
-                       if (!references.isEmpty())\r
-                               return addSubscriptions(g, subscription, references, Collections.<Resource>emptySet());\r
-               } else {\r
-                       List<Resource> srcs = ISelectionUtils.getPossibleKeys(source, SelectionHints.KEY_MAIN, Resource.class);\r
-                       ModelingResources MOD = ModelingResources.getInstance(g);\r
-                       Set<Resource> movedItems = new HashSet<Resource>();\r
-                       for (Resource src : srcs) {\r
-                               if (g.isInstanceOf(src, MOD.Subscription_Item)) {\r
-                                       Resource model = g.syncRequest(new PossibleModel(src));\r
-                                       if (ObjectUtils.objectEquals(targetModel, model))\r
-                                               movedItems.add(src);\r
-                               }\r
-                       }\r
-                       if (!movedItems.isEmpty())\r
-                               return addSubscriptions(g, subscription, Collections.<VariableReference>emptyList(), movedItems);\r
-               }\r
-        \r
+        if (source instanceof String) {\r
+            // JSON ?\r
+            Optional<Variable> v = JsonUtils.tryParseJsonPropertyVariable(g, (String) source);\r
+            if (v.isPresent()) {\r
+                List<VariableReference> references = g.syncRequest(VariableReferences.variablesToReferences(targetModel, Collections.singletonList(v.get())));\r
+                return addSubscriptions(g, subscription, references, Collections.emptySet());\r
+            }\r
         }\r
 \r
         return null;\r
     }\r
 \r
-    private Runnable addSubscriptions(ReadGraph graph, final Resource subscription, final List<VariableReference> references,\r
-            final Set<Resource> movedSubscriptionItems) throws DatabaseException {\r
-        final AddVariableToChartAction action = new AddVariableToChartAction(null, subscription, references);\r
-        action.init(graph);\r
-        return new Runnable() {\r
-            @Override\r
-            public void run() {\r
-                action.run();\r
-                if(!movedSubscriptionItems.isEmpty()) {\r
-                    Simantics.getSession().asyncRequest(new WriteRequest() {\r
-                        @Override\r
-                        public void perform(WriteGraph graph) throws DatabaseException {\r
-                            Layer0 L0 = Layer0.getInstance(graph);\r
-                            for (Resource item : movedSubscriptionItems) {\r
-                                graph.deny(item, L0.PartOf);\r
-                                graph.claim(subscription, L0.ConsistsOf, item);\r
-                            }\r
-                        }\r
-                    }, new Callback<DatabaseException>() {\r
-                        @Override\r
-                        public void run(DatabaseException e) {\r
-                            if (e != null)\r
-                                ErrorLogger.defaultLogError(e);\r
+    private Runnable addSubscriptions(ReadGraph graph, Resource subscription, List<VariableReference> references,\r
+            Set<Resource> movedSubscriptionItems) throws DatabaseException {\r
+        AddVariableToChartAction action = new AddVariableToChartAction(null, subscription, references).init(graph);\r
+        return () -> {\r
+            action.run();\r
+            if(!movedSubscriptionItems.isEmpty()) {\r
+                Simantics.getSession().asyncRequest(new WriteRequest() {\r
+                    @Override\r
+                    public void perform(WriteGraph graph) throws DatabaseException {\r
+                        Layer0 L0 = Layer0.getInstance(graph);\r
+                        for (Resource item : movedSubscriptionItems) {\r
+                            graph.deny(item, L0.PartOf);\r
+                            graph.claim(subscription, L0.ConsistsOf, item);\r
                         }\r
-                    });\r
-                }\r
+                    }\r
+                }, e -> {\r
+                    if (e != null)\r
+                        ErrorLogger.defaultLogError(e);\r
+                });\r
             }\r
         };\r
     }\r