]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/utils/StructuralModelChanges.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / utils / StructuralModelChanges.java
index 8f381a10a19b1100128d2186b813fbae73f6ead5..4586d40897764955e9bc85634692bdbedd9a135c 100644 (file)
-package org.simantics.modeling.utils;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-import gnu.trove.set.hash.THashSet;\r
-\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.databoard.adapter.AdaptException;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.utils.NameUtils;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.layer0.Layer0;\r
-import org.simantics.utils.datastructures.map.Tuple;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class StructuralModelChanges {\r
-\r
-    @SuppressWarnings("unused")\r
-    private static final boolean          TRACE_REFERENCE_FIXES = false;\r
-\r
-    private Resource                      model;\r
-    private THashMap<Resource, Resource>  moves                 = new THashMap<Resource, Resource>();\r
-    private THashMap<Resource, String>    renames               = new THashMap<Resource, String>();\r
-//    private THashMap<Resource, Reference> references            = new THashMap<Resource, Reference>();\r
-\r
-    public StructuralModelChanges(Resource model) {\r
-        this.model = model;\r
-    }\r
-\r
-    public void move(Resource component, Resource target) {\r
-        moves.put(component, target);\r
-    }\r
-\r
-    public void rename(Resource component, String newName) {\r
-        renames.put(component, newName);\r
-    }\r
-\r
-    static class Info extends Tuple {\r
-        public Info(Resource component, String rvi) {\r
-            super(component, rvi);\r
-        }\r
-        public Resource getComponent() {\r
-            return (Resource) getField(0);\r
-        }\r
-        public String getRvi() {\r
-            return (String) getField(1);\r
-        }\r
-    }\r
-\r
-    public void apply(final WriteGraph graph) throws DatabaseException {\r
-        final Layer0 L0 = Layer0.getInstance(graph);\r
-\r
-        try {\r
-            loadAllReferences(graph, model, new THashSet<Resource>());\r
-        } catch (AdaptException e) {\r
-            throw new DatabaseException(e);\r
-        }\r
-\r
-        // 1. Get information on current state of components that are about to\r
-        // be modified somehow\r
-//        Map<Resource, Info> before = getInfo(graph);\r
-\r
-        // 2. Perform modifications\r
-        for (Map.Entry<Resource, Resource> entry : moves.entrySet()) {\r
-            Resource component = entry.getKey();\r
-            Resource target = entry.getValue();\r
-\r
-            for (Resource source : graph.getObjects(component, L0.PartOf))\r
-                graph.deny(component, L0.PartOf, source);\r
-            graph.claim(component, L0.PartOf, L0.ConsistsOf, target);\r
-        }\r
-\r
-        for (Map.Entry<Resource, String> entry : renames.entrySet()) {\r
-            Resource component = entry.getKey();\r
-            Resource container = graph.getSingleObject(component, L0.PartOf);\r
-            String freshName = NameUtils.findFreshName(graph, entry.getValue(), container, L0.ConsistsOf, "%s%d");\r
-            graph.claimLiteral(component, L0.HasName, freshName);\r
-        }\r
-\r
-//        // 3. Get information on the state of modified components after the modifications\r
-//        Map<Resource, Info> after = getInfo(graph);\r
-//        Map<String, String> toNewPath = new HashMap<String, String>();\r
-//        for (Resource component : before.keySet()) {\r
-//            Info b = before.get(component);\r
-//            Info a = after.get(component);\r
-//            toNewPath.put(b.getRvi(), a.getRvi());\r
-//        }\r
-\r
-        // 4. Fix all references\r
-//        next_reference:\r
-//            for (Reference ref : references.values()) {\r
-//                for (String beforePath : toNewPath.keySet()) {\r
-//                    if (ref.getRVI().startsWith(beforePath)) {\r
-//                        String afterPath = toNewPath.get(beforePath);\r
-//                        String newRvi = afterPath + ref.getRVI().substring(beforePath.length());\r
-//                        if (TRACE_REFERENCE_FIXES)\r
-//                            System.out.println("FIX REFERENCE: " + ref.getRVI() + " -> " + newRvi);\r
-//                        writeReference(graph, ref.getReferee(), newRvi);\r
-//                        continue next_reference;\r
-//                    }\r
-//                }\r
-//            }\r
-    }\r
-\r
-//    private Map<Resource, Info> getInfo(ReadGraph graph) throws DatabaseException {\r
-//        Map<Resource, Info> state = new THashMap<Resource, Info>();\r
-//        Set<Resource> modifiedObjects = new THashSet<Resource>();\r
-//        modifiedObjects.addAll(moves.keySet());\r
-//        modifiedObjects.addAll(renames.keySet());\r
-//        for (Resource component : modifiedObjects) {\r
-//            Variable v = graph.getPossibleAdapter(component, Variable.class);\r
-//            String rvi = Variables.getPossibleRVI(graph, v);\r
-//            if (rvi != null) {\r
-//                state.put(component, new Info(component, rvi));\r
-//            }\r
-//        }\r
-//        return state;\r
-//    }\r
-\r
-//    private String lastChildSegment(String rvi) {\r
-//        int propIndex = rvi.indexOf(Role.PROPERTY.getIdentifier());\r
-//        if (propIndex == -1)\r
-//            propIndex = rvi.length();\r
-//        int childIndex = rvi.lastIndexOf(Role.CHILD.getIdentifier(), propIndex);\r
-//        if (childIndex == -1)\r
-//            return null;\r
-//        return rvi.substring(childIndex);\r
-//    }\r
-\r
-    private void loadAllReferences(WriteGraph graph, Resource root, Set<Resource> visited) throws DatabaseException, AdaptException {\r
-        if (!visited.add(root))\r
-            return;\r
-\r
-//        Layer0 L0 = Layer0.getInstance(graph);\r
-//        ModelingResources MOD = ModelingResources.getInstance(graph);\r
-//        ChartResource CHART = ChartResource.getInstance(graph);\r
-\r
-//        for (Resource r : graph.getObjects(root, L0.ConsistsOf)) {\r
-//            if (graph.isInstanceOf(r, MOD.Subscription)) {\r
-//                loadAllReferences(graph, r, visited);\r
-//            } else if (graph.isInstanceOf(r, CHART.ChartGroup)) {\r
-//                loadAllReferences(graph, r, visited);\r
-//            } else if (graph.isInstanceOf(r, CHART.Chart)) {\r
-//                loadAllReferences(graph, r, visited);\r
-//            } else if (graph.isInstanceOf(r, MOD.Subscription_Item)) {\r
-////                addPossibleReference(graph, r);\r
-//            } else if (graph.isInstanceOf(r, CHART.Chart_Item)) {\r
-////                addPossibleReference(graph, r);\r
-//            }\r
-//        }\r
-    }\r
-\r
-//    public Reference addPossibleReference(ReadGraph graph, Resource referee) throws DatabaseException, AdaptException {\r
-//        Reference r = readPossibleReference(graph, referee);\r
-//        if (r != null) {\r
-//            references.put(referee, r);\r
-//            //System.out.println("FOUND REFERENCE: " + r);\r
-//        }\r
-//        return r;\r
-//    }\r
-\r
-//    public Reference readPossibleReference(ReadGraph graph, Resource referee) throws DatabaseException, AdaptException {\r
-//        ModelingResources MOD = ModelingResources.getInstance(graph);\r
-//        String v  = graph.getPossibleRelatedValue(referee, MOD.Subscription_Item_VariableId, Bindings.STRING);\r
-//        if (v == null)\r
-//            return null;\r
-//        return  new Reference(referee, Role.CHILD.getIdentifier() + v);\r
-//    }\r
-//\r
-//    public void writeReference(WriteGraph graph, Resource referee, String newReference) throws DatabaseException {\r
-//        if (newReference.startsWith(Role.CHILD.getIdentifier()))\r
-//            newReference = newReference.substring(Role.CHILD.getIdentifier().length());\r
-//        ModelingResources MOD = ModelingResources.getInstance(graph);\r
-//        graph.claimLiteral(referee, MOD.Subscription_Item_VariableId, newReference, Bindings.STRING);\r
-//    }\r
-\r
-    static class Reference extends Tuple {\r
-        public Reference(Resource referee, String rvi) {\r
-            super(referee, rvi);\r
-        }\r
-        public Resource getReferee() {\r
-            return (Resource) getField(0);\r
-        }\r
-        public String getRVI() {\r
-            return (String) getField(1);\r
-        }\r
-    }\r
-\r
-}\r
+package org.simantics.modeling.utils;
+
+import gnu.trove.map.hash.THashMap;
+import gnu.trove.set.hash.THashSet;
+
+import java.util.Map;
+import java.util.Set;
+
+import org.simantics.databoard.adapter.AdaptException;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.utils.NameUtils;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.layer0.Layer0;
+import org.simantics.utils.datastructures.map.Tuple;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class StructuralModelChanges {
+
+    @SuppressWarnings("unused")
+    private static final boolean          TRACE_REFERENCE_FIXES = false;
+
+    private Resource                      model;
+    private THashMap<Resource, Resource>  moves                 = new THashMap<Resource, Resource>();
+    private THashMap<Resource, String>    renames               = new THashMap<Resource, String>();
+//    private THashMap<Resource, Reference> references            = new THashMap<Resource, Reference>();
+
+    public StructuralModelChanges(Resource model) {
+        this.model = model;
+    }
+
+    public void move(Resource component, Resource target) {
+        moves.put(component, target);
+    }
+
+    public void rename(Resource component, String newName) {
+        renames.put(component, newName);
+    }
+
+    static class Info extends Tuple {
+        public Info(Resource component, String rvi) {
+            super(component, rvi);
+        }
+        public Resource getComponent() {
+            return (Resource) getField(0);
+        }
+        public String getRvi() {
+            return (String) getField(1);
+        }
+    }
+
+    public void apply(final WriteGraph graph) throws DatabaseException {
+        final Layer0 L0 = Layer0.getInstance(graph);
+
+        try {
+            loadAllReferences(graph, model, new THashSet<Resource>());
+        } catch (AdaptException e) {
+            throw new DatabaseException(e);
+        }
+
+        // 1. Get information on current state of components that are about to
+        // be modified somehow
+//        Map<Resource, Info> before = getInfo(graph);
+
+        // 2. Perform modifications
+        for (Map.Entry<Resource, Resource> entry : moves.entrySet()) {
+            Resource component = entry.getKey();
+            Resource target = entry.getValue();
+
+            for (Resource source : graph.getObjects(component, L0.PartOf))
+                graph.deny(component, L0.PartOf, source);
+            graph.claim(component, L0.PartOf, L0.ConsistsOf, target);
+        }
+
+        for (Map.Entry<Resource, String> entry : renames.entrySet()) {
+            Resource component = entry.getKey();
+            Resource container = graph.getSingleObject(component, L0.PartOf);
+            String freshName = NameUtils.findFreshName(graph, entry.getValue(), container, L0.ConsistsOf, "%s%d");
+            graph.claimLiteral(component, L0.HasName, freshName);
+        }
+
+//        // 3. Get information on the state of modified components after the modifications
+//        Map<Resource, Info> after = getInfo(graph);
+//        Map<String, String> toNewPath = new HashMap<String, String>();
+//        for (Resource component : before.keySet()) {
+//            Info b = before.get(component);
+//            Info a = after.get(component);
+//            toNewPath.put(b.getRvi(), a.getRvi());
+//        }
+
+        // 4. Fix all references
+//        next_reference:
+//            for (Reference ref : references.values()) {
+//                for (String beforePath : toNewPath.keySet()) {
+//                    if (ref.getRVI().startsWith(beforePath)) {
+//                        String afterPath = toNewPath.get(beforePath);
+//                        String newRvi = afterPath + ref.getRVI().substring(beforePath.length());
+//                        if (TRACE_REFERENCE_FIXES)
+//                            System.out.println("FIX REFERENCE: " + ref.getRVI() + " -> " + newRvi);
+//                        writeReference(graph, ref.getReferee(), newRvi);
+//                        continue next_reference;
+//                    }
+//                }
+//            }
+    }
+
+//    private Map<Resource, Info> getInfo(ReadGraph graph) throws DatabaseException {
+//        Map<Resource, Info> state = new THashMap<Resource, Info>();
+//        Set<Resource> modifiedObjects = new THashSet<Resource>();
+//        modifiedObjects.addAll(moves.keySet());
+//        modifiedObjects.addAll(renames.keySet());
+//        for (Resource component : modifiedObjects) {
+//            Variable v = graph.getPossibleAdapter(component, Variable.class);
+//            String rvi = Variables.getPossibleRVI(graph, v);
+//            if (rvi != null) {
+//                state.put(component, new Info(component, rvi));
+//            }
+//        }
+//        return state;
+//    }
+
+//    private String lastChildSegment(String rvi) {
+//        int propIndex = rvi.indexOf(Role.PROPERTY.getIdentifier());
+//        if (propIndex == -1)
+//            propIndex = rvi.length();
+//        int childIndex = rvi.lastIndexOf(Role.CHILD.getIdentifier(), propIndex);
+//        if (childIndex == -1)
+//            return null;
+//        return rvi.substring(childIndex);
+//    }
+
+    private void loadAllReferences(WriteGraph graph, Resource root, Set<Resource> visited) throws DatabaseException, AdaptException {
+        if (!visited.add(root))
+            return;
+
+//        Layer0 L0 = Layer0.getInstance(graph);
+//        ModelingResources MOD = ModelingResources.getInstance(graph);
+//        ChartResource CHART = ChartResource.getInstance(graph);
+
+//        for (Resource r : graph.getObjects(root, L0.ConsistsOf)) {
+//            if (graph.isInstanceOf(r, MOD.Subscription)) {
+//                loadAllReferences(graph, r, visited);
+//            } else if (graph.isInstanceOf(r, CHART.ChartGroup)) {
+//                loadAllReferences(graph, r, visited);
+//            } else if (graph.isInstanceOf(r, CHART.Chart)) {
+//                loadAllReferences(graph, r, visited);
+//            } else if (graph.isInstanceOf(r, MOD.Subscription_Item)) {
+////                addPossibleReference(graph, r);
+//            } else if (graph.isInstanceOf(r, CHART.Chart_Item)) {
+////                addPossibleReference(graph, r);
+//            }
+//        }
+    }
+
+//    public Reference addPossibleReference(ReadGraph graph, Resource referee) throws DatabaseException, AdaptException {
+//        Reference r = readPossibleReference(graph, referee);
+//        if (r != null) {
+//            references.put(referee, r);
+//            //System.out.println("FOUND REFERENCE: " + r);
+//        }
+//        return r;
+//    }
+
+//    public Reference readPossibleReference(ReadGraph graph, Resource referee) throws DatabaseException, AdaptException {
+//        ModelingResources MOD = ModelingResources.getInstance(graph);
+//        String v  = graph.getPossibleRelatedValue(referee, MOD.Subscription_Item_VariableId, Bindings.STRING);
+//        if (v == null)
+//            return null;
+//        return  new Reference(referee, Role.CHILD.getIdentifier() + v);
+//    }
+//
+//    public void writeReference(WriteGraph graph, Resource referee, String newReference) throws DatabaseException {
+//        if (newReference.startsWith(Role.CHILD.getIdentifier()))
+//            newReference = newReference.substring(Role.CHILD.getIdentifier().length());
+//        ModelingResources MOD = ModelingResources.getInstance(graph);
+//        graph.claimLiteral(referee, MOD.Subscription_Item_VariableId, newReference, Bindings.STRING);
+//    }
+
+    static class Reference extends Tuple {
+        public Reference(Resource referee, String rvi) {
+            super(referee, rvi);
+        }
+        public Resource getReferee() {
+            return (Resource) getField(0);
+        }
+        public String getRVI() {
+            return (String) getField(1);
+        }
+    }
+
+}