]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/ElementReorder.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.diagram / src / org / simantics / diagram / synchronization / graph / ElementReorder.java
index 0d78cd1f1de5f4aee53c6c4438968c3270f48bd1..b0146cc21bf7ad2b7be6b6b7e3a9bb0516e00aeb 100644 (file)
-/*******************************************************************************\r
- * Copyright (c) 2007, 2010 Association for Decentralized Information Management\r
- * in Industry THTH ry.\r
- * All rights reserved. This program and the accompanying materials\r
- * are made available under the terms of the Eclipse Public License v1.0\r
- * which accompanies this distribution, and is available at\r
- * http://www.eclipse.org/legal/epl-v10.html\r
- *\r
- * Contributors:\r
- *     VTT Technical Research Centre of Finland - initial API and implementation\r
- *******************************************************************************/\r
-package org.simantics.diagram.synchronization.graph;\r
-\r
-import java.util.ArrayList;\r
-import java.util.HashMap;\r
-import java.util.HashSet;\r
-import java.util.List;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.utils.OrderedSetUtils;\r
-import org.simantics.diagram.synchronization.ModificationAdapter;\r
-import org.simantics.diagram.ui.DiagramModelHints;\r
-import org.simantics.g2d.diagram.IDiagram;\r
-import org.simantics.g2d.element.ElementUtils;\r
-import org.simantics.g2d.element.IElement;\r
-\r
-/**\r
- * This modification reorders the specified diagram in the graph backend\r
- * according to the order of the elements specified argument element list.\r
- * \r
- * <p>\r
- * The algorithm is linear with respect to the amount of elements on the\r
- * diagram. It tries to minimize the number of ordered set operations.\r
- * \r
- * @author Tuukka Lehtonen\r
- */\r
-public class ElementReorder extends ModificationAdapter {\r
-\r
-    IDiagram diagram;\r
-    List<IElement> order;\r
-\r
-    public ElementReorder(IDiagram diagram, List<IElement> order) {\r
-        super(LOW_PRIORITY);\r
-        this.diagram = diagram;\r
-        this.order = order;\r
-    }\r
-\r
-    @Override\r
-    public void perform(WriteGraph g) throws Exception {\r
-        Resource l = diagram.getHint(DiagramModelHints.KEY_DIAGRAM_RESOURCE);\r
-\r
-        List<Resource> graphOrder = OrderedSetUtils.toList(g, l);\r
-        Set<Resource> graphContents = new HashSet<Resource>(graphOrder);\r
-\r
-        List<Resource> diagramOrder = new ArrayList<Resource>(order.size());\r
-        Map<Resource, Integer> diagramOrderIndex = new HashMap<Resource, Integer>(order.size());\r
-        int i = 0;\r
-        for (IElement e : order) {\r
-            Object obj = ElementUtils.getObject(e);\r
-            if (obj instanceof Resource) {\r
-                Resource r = (Resource) obj;\r
-                // Only consider resources that still are in the diagram.\r
-                // This prevents errors in situations where #order contains\r
-                // elements that no longer exist in the diagram.\r
-                if (graphContents.contains(r)) {\r
-                    diagramOrder.add(r);\r
-                    diagramOrderIndex.put(r, Integer.valueOf(i));\r
-                    ++i;\r
-                }\r
-            }\r
-        }\r
-\r
-        // Reorder the backend list according to diagramOrder\r
-        i = 0;\r
-        for (Resource r : graphOrder) {\r
-            Integer di = diagramOrderIndex.get(r);\r
-            if (di != null) {\r
-                int targetIndex = di;\r
-                int graphIndex = i++;\r
-                if (graphIndex != targetIndex) {\r
-                    // Check if the predecessor of r is already correct.\r
-                    // If it is, we don't have to do anything for r.\r
-                    Resource graphPrev = OrderedSetUtils.prev(g, l, r);\r
-                    Resource after = null;\r
-                    if (targetIndex == 0) {\r
-                        after = l;\r
-                        if (l.equals(graphPrev))\r
-                            continue;\r
-                    } else {\r
-                        after = diagramOrder.get(targetIndex - 1);\r
-                        if (after.equals(graphPrev))\r
-                            continue;\r
-                    }\r
-\r
-                    // r needs to be repositioned.\r
-                    OrderedSetUtils.remove(g, l, r);\r
-                    OrderedSetUtils.addAfter(g, l, after, r);\r
-                }\r
-            }\r
-        }\r
-    }\r
-\r
-}\r
+/*******************************************************************************
+ * Copyright (c) 2007, 2010 Association for Decentralized Information Management
+ * in Industry THTH ry.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     VTT Technical Research Centre of Finland - initial API and implementation
+ *******************************************************************************/
+package org.simantics.diagram.synchronization.graph;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.utils.OrderedSetUtils;
+import org.simantics.diagram.synchronization.ModificationAdapter;
+import org.simantics.diagram.ui.DiagramModelHints;
+import org.simantics.g2d.diagram.IDiagram;
+import org.simantics.g2d.element.ElementUtils;
+import org.simantics.g2d.element.IElement;
+
+/**
+ * This modification reorders the specified diagram in the graph backend
+ * according to the order of the elements specified argument element list.
+ * 
+ * <p>
+ * The algorithm is linear with respect to the amount of elements on the
+ * diagram. It tries to minimize the number of ordered set operations.
+ * 
+ * @author Tuukka Lehtonen
+ */
+public class ElementReorder extends ModificationAdapter {
+
+    IDiagram diagram;
+    List<IElement> order;
+
+    public ElementReorder(IDiagram diagram, List<IElement> order) {
+        super(LOW_PRIORITY);
+        this.diagram = diagram;
+        this.order = order;
+    }
+
+    @Override
+    public void perform(WriteGraph g) throws Exception {
+        Resource l = diagram.getHint(DiagramModelHints.KEY_DIAGRAM_RESOURCE);
+
+        List<Resource> graphOrder = OrderedSetUtils.toList(g, l);
+        Set<Resource> graphContents = new HashSet<Resource>(graphOrder);
+
+        List<Resource> diagramOrder = new ArrayList<Resource>(order.size());
+        Map<Resource, Integer> diagramOrderIndex = new HashMap<Resource, Integer>(order.size());
+        int i = 0;
+        for (IElement e : order) {
+            Object obj = ElementUtils.getObject(e);
+            if (obj instanceof Resource) {
+                Resource r = (Resource) obj;
+                // Only consider resources that still are in the diagram.
+                // This prevents errors in situations where #order contains
+                // elements that no longer exist in the diagram.
+                if (graphContents.contains(r)) {
+                    diagramOrder.add(r);
+                    diagramOrderIndex.put(r, Integer.valueOf(i));
+                    ++i;
+                }
+            }
+        }
+
+        // Reorder the backend list according to diagramOrder
+        i = 0;
+        for (Resource r : graphOrder) {
+            Integer di = diagramOrderIndex.get(r);
+            if (di != null) {
+                int targetIndex = di;
+                int graphIndex = i++;
+                if (graphIndex != targetIndex) {
+                    // Check if the predecessor of r is already correct.
+                    // If it is, we don't have to do anything for r.
+                    Resource graphPrev = OrderedSetUtils.prev(g, l, r);
+                    Resource after = null;
+                    if (targetIndex == 0) {
+                        after = l;
+                        if (l.equals(graphPrev))
+                            continue;
+                    } else {
+                        after = diagramOrder.get(targetIndex - 1);
+                        if (after.equals(graphPrev))
+                            continue;
+                    }
+
+                    // r needs to be repositioned.
+                    OrderedSetUtils.remove(g, l, r);
+                    OrderedSetUtils.addAfter(g, l, after, r);
+                }
+            }
+        }
+    }
+
+}