]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.modeling/src/org/simantics/modeling/typicals/SyncTypicalTemplatesToInstances.java
Merge commit '8e4e41fa135641b23f68e205832e0696951c5f63'
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / typicals / SyncTypicalTemplatesToInstances.java
index 56d61c86845b3a4941e8da58b088f786aac9dcb6..cd326051371169ad70b442b8b986300c336cbce2 100644 (file)
@@ -11,9 +11,6 @@
  *******************************************************************************/\r
 package org.simantics.modeling.typicals;\r
 \r
-import gnu.trove.map.hash.THashMap;\r
-import gnu.trove.set.hash.THashSet;\r
-\r
 import java.awt.geom.Point2D;\r
 import java.util.ArrayList;\r
 import java.util.Collection;\r
@@ -85,6 +82,9 @@ import org.simantics.utils.strings.AlphanumComparator;
 import org.simantics.utils.strings.EString;\r
 import org.simantics.utils.ui.ErrorLogger;\r
 \r
+import gnu.trove.map.hash.THashMap;\r
+import gnu.trove.set.hash.THashSet;\r
+\r
 /**\r
  * A write request that synchronizes typical master templates and their\r
  * instances as specified.\r
@@ -210,6 +210,26 @@ public class SyncTypicalTemplatesToInstances extends WriteRequest {
 \r
        private boolean writeLog;\r
 \r
+    /**\r
+     * For SCL API.\r
+     * \r
+     * @param graph\r
+     * @param selectedRules\r
+     * @param templates\r
+     * @param instances\r
+     * @throws DatabaseException\r
+     */\r
+    public static void syncTypicals(WriteGraph graph, boolean log, List<Resource> templates, List<Resource> instances) throws DatabaseException {\r
+        graph.syncRequest(\r
+                new SyncTypicalTemplatesToInstances(\r
+                        null,\r
+                        templates.toArray(Resource.NONE),\r
+                        instances.toArray(Resource.NONE),\r
+                        ALL,\r
+                        null)\r
+                .logging(log));\r
+    }\r
+\r
     /**\r
      * @param templates typical diagram templates to completely synchronize with\r
      *        their instances\r
@@ -545,6 +565,7 @@ public class SyncTypicalTemplatesToInstances extends WriteRequest {
         \r
         // Perform changes\r
         boolean changed = false;\r
+        changed |= synchronizeDiagramChanges(graph, info, template, instance);\r
         changed |= removeElements(graph, info, instanceElementsRemovedFromTemplate);\r
         changed |= addMissingElements(graph, info, template, instance, templateElementsAddedToTemplate);\r
         changed |= synchronizeChangedElements(graph, info, template, instance, changedTemplateElements, templateElementsAddedToTemplate, changedElementsByDiagram == ALL);\r
@@ -553,6 +574,35 @@ public class SyncTypicalTemplatesToInstances extends WriteRequest {
             metadata.addTypical(instance);\r
     }\r
 \r
+    /**\r
+     * Synchronize any configurable aspects of the typical diagram instance itself.\r
+     * Every rule executed here comes from the ontology, nothing is fixed. \r
+     * \r
+     * @param graph\r
+     * @param typicalInfo\r
+     * @param template\r
+     * @param instance\r
+     * @return if any changes were made. \r
+     * @throws DatabaseException\r
+     */\r
+    private boolean synchronizeDiagramChanges(\r
+            WriteGraph graph,\r
+            TypicalInfo typicalInfo,\r
+            Resource template,\r
+            Resource instance)\r
+                    throws DatabaseException\r
+    {\r
+        boolean changed = false;\r
+        for (Resource rule : graph.getObjects(template, MOD.HasTypicalSynchronizationRule)) {\r
+            if (selectedRules != null && !selectedRules.contains(rule))\r
+                continue;\r
+            ITypicalSynchronizationRule r = graph.getPossibleAdapter(rule, ITypicalSynchronizationRule.class);\r
+            if (r != null)\r
+                changed |= r.synchronize(graph, template, instance, typicalInfo);\r
+        }\r
+        return changed;\r
+    }\r
+\r
     /**\r
      * Add elements from template that do not yet exist in the instance.\r
      * \r