-/*******************************************************************************\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.content;\r
-\r
-import gnu.trove.map.hash.THashMap;\r
-\r
-import java.util.Collections;\r
-import java.util.HashSet;\r
-import java.util.Map;\r
-import java.util.Set;\r
-\r
-import org.simantics.db.Resource;\r
-\r
-/**\r
- * @author Tuukka Lehtonen\r
- */\r
-public class DiagramContentChanges {\r
-\r
- public final Map<Resource, Change> elements;\r
- public final Map<Resource, Change> nodes;\r
- public final Map<Resource, Change> connections;\r
- public final Map<EdgeResource, Change> connectionSegments;\r
- public final Map<Resource, Change> branchPoints;\r
-\r
- public final Map<Resource, Change> routeGraphConnections;\r
- public final Map<EdgeResource, Change> routeLinks;\r
- public final Map<Resource, Change> routeLines;\r
- public final Map<Resource, Change> routePoints;\r
-\r
- public boolean elementOrderChanged = false;\r
-\r
- public static final DiagramContentChanges EMPTY;\r
-\r
- static {\r
- EMPTY = new DiagramContentChanges(true);\r
- }\r
-\r
- private DiagramContentChanges(boolean empty) {\r
- this.elements = Collections.emptyMap();\r
- this.nodes = Collections.emptyMap();\r
- this.connections = Collections.emptyMap();\r
- this.connectionSegments = Collections.emptyMap();\r
- this.branchPoints = Collections.emptyMap();\r
- this.routeGraphConnections = Collections.emptyMap();\r
- this.routeLinks = Collections.emptyMap();\r
- this.routeLines = Collections.emptyMap();\r
- this.routePoints = Collections.emptyMap();\r
- }\r
-\r
- public DiagramContentChanges() {\r
- this.elements = new THashMap<Resource, Change>();\r
- this.nodes = new THashMap<Resource, Change>();\r
- this.connections = new THashMap<Resource, Change>();\r
- this.connectionSegments = new THashMap<EdgeResource, Change>();\r
- this.branchPoints = new THashMap<Resource, Change>();\r
- this.routeGraphConnections = new THashMap<Resource, Change>();\r
- this.routeLinks = new THashMap<EdgeResource, Change>();\r
- this.routeLines = new THashMap<Resource, Change>();\r
- this.routePoints = new THashMap<Resource, Change>();\r
- }\r
-\r
- public void markElementOrderChanged() {\r
- elementOrderChanged = true;\r
- }\r
-\r
- public boolean isEmpty() {\r
- return elements.isEmpty()\r
- && nodes.isEmpty()\r
- && connections.isEmpty()\r
- && connectionSegments.isEmpty()\r
- && branchPoints.isEmpty()\r
- && routeGraphConnections.isEmpty()\r
- && routeLinks.isEmpty()\r
- && routeLines.isEmpty()\r
- && routePoints.isEmpty()\r
- && !elementOrderChanged;\r
- }\r
-\r
- public <T> Set<T> pick(Map<T, Change> map, Change change) {\r
- Set<T> result = new HashSet<T>();\r
- for (Map.Entry<T, Change> entry : map.entrySet()) {\r
- if (entry.getValue() == change)\r
- result.add(entry.getKey());\r
- }\r
- return result;\r
- }\r
-\r
- @Override\r
- public String toString() {\r
- StringBuilder sb = new StringBuilder();\r
- sb.append(getClass().getSimpleName());\r
- sb.append("[elements=");\r
- sb.append(toString(count(elements)));\r
- sb.append(", nodes=");\r
- sb.append(toString(count(nodes)));\r
- sb.append(", connection=");\r
- sb.append(toString(count(connections)));\r
- sb.append(", connection segments=");\r
- sb.append(toString(count(connectionSegments)));\r
- sb.append(", branch points=");\r
- sb.append(toString(count(branchPoints)));\r
- sb.append(", routegraph connections=");\r
- sb.append(toString(count(routeGraphConnections)));\r
- sb.append(", route links=");\r
- sb.append(toString(count(routeLinks)));\r
- sb.append(", route lines=");\r
- sb.append(toString(count(routeLines)));\r
- sb.append(", route points=");\r
- sb.append(toString(count(routePoints)));\r
- sb.append(", element order changed=");\r
- sb.append(elementOrderChanged);\r
- sb.append("]");\r
- return sb.toString();\r
- }\r
-\r
- private static String toString(int[] changes) {\r
- return\r
- "[" + Change.ADDED.toString() + "=" + changes[Change.ADDED.ordinal()] +\r
- ", " + Change.REMOVED.toString() + "=" + changes[Change.REMOVED.ordinal()] +\r
- //", " + Change.POSSIBLY_MODIFIED.toString() + "=" + changes[Change.POSSIBLY_MODIFIED.ordinal()] +\r
- "]";\r
- }\r
-\r
- private static int[] count(Map<?, Change> map) {\r
- int[] result = new int[Change.values().length];\r
- for (Change change : map.values()) {\r
- result[change.ordinal()]++;\r
- }\r
- return result;\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.content;
+
+import gnu.trove.map.hash.THashMap;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Map;
+import java.util.Set;
+
+import org.simantics.db.Resource;
+
+/**
+ * @author Tuukka Lehtonen
+ */
+public class DiagramContentChanges {
+
+ public final Map<Resource, Change> elements;
+ public final Map<Resource, Change> nodes;
+ public final Map<Resource, Change> connections;
+ public final Map<EdgeResource, Change> connectionSegments;
+ public final Map<Resource, Change> branchPoints;
+
+ public final Map<Resource, Change> routeGraphConnections;
+ public final Map<EdgeResource, Change> routeLinks;
+ public final Map<Resource, Change> routeLines;
+ public final Map<Resource, Change> routePoints;
+
+ public boolean elementOrderChanged = false;
+
+ public static final DiagramContentChanges EMPTY;
+
+ static {
+ EMPTY = new DiagramContentChanges(true);
+ }
+
+ private DiagramContentChanges(boolean empty) {
+ this.elements = Collections.emptyMap();
+ this.nodes = Collections.emptyMap();
+ this.connections = Collections.emptyMap();
+ this.connectionSegments = Collections.emptyMap();
+ this.branchPoints = Collections.emptyMap();
+ this.routeGraphConnections = Collections.emptyMap();
+ this.routeLinks = Collections.emptyMap();
+ this.routeLines = Collections.emptyMap();
+ this.routePoints = Collections.emptyMap();
+ }
+
+ public DiagramContentChanges() {
+ this.elements = new THashMap<Resource, Change>();
+ this.nodes = new THashMap<Resource, Change>();
+ this.connections = new THashMap<Resource, Change>();
+ this.connectionSegments = new THashMap<EdgeResource, Change>();
+ this.branchPoints = new THashMap<Resource, Change>();
+ this.routeGraphConnections = new THashMap<Resource, Change>();
+ this.routeLinks = new THashMap<EdgeResource, Change>();
+ this.routeLines = new THashMap<Resource, Change>();
+ this.routePoints = new THashMap<Resource, Change>();
+ }
+
+ public void markElementOrderChanged() {
+ elementOrderChanged = true;
+ }
+
+ public boolean isEmpty() {
+ return elements.isEmpty()
+ && nodes.isEmpty()
+ && connections.isEmpty()
+ && connectionSegments.isEmpty()
+ && branchPoints.isEmpty()
+ && routeGraphConnections.isEmpty()
+ && routeLinks.isEmpty()
+ && routeLines.isEmpty()
+ && routePoints.isEmpty()
+ && !elementOrderChanged;
+ }
+
+ public <T> Set<T> pick(Map<T, Change> map, Change change) {
+ Set<T> result = new HashSet<T>();
+ for (Map.Entry<T, Change> entry : map.entrySet()) {
+ if (entry.getValue() == change)
+ result.add(entry.getKey());
+ }
+ return result;
+ }
+
+ @Override
+ public String toString() {
+ StringBuilder sb = new StringBuilder();
+ sb.append(getClass().getSimpleName());
+ sb.append("[elements=");
+ sb.append(toString(count(elements)));
+ sb.append(", nodes=");
+ sb.append(toString(count(nodes)));
+ sb.append(", connection=");
+ sb.append(toString(count(connections)));
+ sb.append(", connection segments=");
+ sb.append(toString(count(connectionSegments)));
+ sb.append(", branch points=");
+ sb.append(toString(count(branchPoints)));
+ sb.append(", routegraph connections=");
+ sb.append(toString(count(routeGraphConnections)));
+ sb.append(", route links=");
+ sb.append(toString(count(routeLinks)));
+ sb.append(", route lines=");
+ sb.append(toString(count(routeLines)));
+ sb.append(", route points=");
+ sb.append(toString(count(routePoints)));
+ sb.append(", element order changed=");
+ sb.append(elementOrderChanged);
+ sb.append("]");
+ return sb.toString();
+ }
+
+ private static String toString(int[] changes) {
+ return
+ "[" + Change.ADDED.toString() + "=" + changes[Change.ADDED.ordinal()] +
+ ", " + Change.REMOVED.toString() + "=" + changes[Change.REMOVED.ordinal()] +
+ //", " + Change.POSSIBLY_MODIFIED.toString() + "=" + changes[Change.POSSIBLY_MODIFIED.ordinal()] +
+ "]";
+ }
+
+ private static int[] count(Map<?, Change> map) {
+ int[] result = new int[Change.values().length];
+ for (Change change : map.values()) {
+ result[change.ordinal()]++;
+ }
+ return result;
+ }
+