X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;ds=sidebyside;f=bundles%2Forg.simantics.diagram%2Fsrc%2Forg%2Fsimantics%2Fdiagram%2Fsynchronization%2Fgraph%2FElementReorder.java;h=b0146cc21bf7ad2b7be6b6b7e3a9bb0516e00aeb;hb=50f5e4e0ea2c77beaf522f2846b79f2e755539de;hp=0d78cd1f1de5f4aee53c6c4438968c3270f48bd1;hpb=969bd23cab98a79ca9101af33334000879fb60c5;p=simantics%2Fplatform.git
diff --git a/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/ElementReorder.java b/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/ElementReorder.java
index 0d78cd1f1..b0146cc21 100644
--- a/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/ElementReorder.java
+++ b/bundles/org.simantics.diagram/src/org/simantics/diagram/synchronization/graph/ElementReorder.java
@@ -1,106 +1,106 @@
-/*******************************************************************************
- * 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.
- *
- *
- * 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 order;
-
- public ElementReorder(IDiagram diagram, List 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 graphOrder = OrderedSetUtils.toList(g, l);
- Set graphContents = new HashSet(graphOrder);
-
- List diagramOrder = new ArrayList(order.size());
- Map diagramOrderIndex = new HashMap(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);
- }
- }
- }
- }
-
-}
+/*******************************************************************************
+ * 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.
+ *
+ *
+ * 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 order;
+
+ public ElementReorder(IDiagram diagram, List 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 graphOrder = OrderedSetUtils.toList(g, l);
+ Set graphContents = new HashSet(graphOrder);
+
+ List diagramOrder = new ArrayList(order.size());
+ Map diagramOrderIndex = new HashMap(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);
+ }
+ }
+ }
+ }
+
+}