]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.db.layer0/src/org/simantics/db/layer0/changeset/MetadataUtils.java
Fixed all line endings of the repository
[simantics/platform.git] / bundles / org.simantics.db.layer0 / src / org / simantics / db / layer0 / changeset / MetadataUtils.java
index ef1753396c1b03b33adbae36432a469068bc6d92..fe93da7c6a14436c073fd65e9c6d4ab503ee57ae 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.db.layer0.changeset;\r
-\r
-import java.util.ArrayList;\r
-import java.util.Collection;\r
-import java.util.HashMap;\r
-import java.util.Map;\r
-import java.util.TreeMap;\r
-\r
-import org.simantics.db.ChangeSetIdentifier;\r
-import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
-import org.simantics.db.WriteGraph;\r
-import org.simantics.db.common.UndoMetadata;\r
-import org.simantics.db.common.procedure.adapter.TransientCacheListener;\r
-import org.simantics.db.exception.DatabaseException;\r
-import org.simantics.db.layer0.genericrelation.DependencyChanges;\r
-import org.simantics.db.layer0.genericrelation.DependencyChanges.Change;\r
-import org.simantics.db.layer0.request.IsLinkedTo;\r
-import org.simantics.db.service.ManagementSupport;\r
-\r
-public class MetadataUtils {\r
-       \r
-       public static final boolean DEBUG = false;\r
-       public static final boolean DEBUG_IDS = false;\r
-\r
-       public static Map<Long, Map<String,byte[]>> getMetadatas(ReadGraph graph, ManagementSupport support, long fromRevisionId, long toRevisionId) throws DatabaseException {\r
-\r
-           TreeMap<Long, Map<String,byte[]>> result = new TreeMap<Long, Map<String,byte[]>>(); \r
-                   \r
-           Collection<ChangeSetIdentifier> csis = support.getChangeSetIdentifiers(fromRevisionId, toRevisionId);\r
-        for(ChangeSetIdentifier csi : csis) {\r
-            if(csi.getId() < fromRevisionId) {\r
-                System.err.println("ManagementSupport.getChangeSetIdentifiers returned identifiers outside of the requested range.");\r
-                continue;\r
-            }\r
-            Map<String,byte[]> metadata = csi.getMetadata();\r
-            if(metadata != null) result.put(csi.getId(), metadata);\r
-        }\r
-        long toBeRevision = support.getHeadRevisionId()+1;\r
-        if(toBeRevision >= fromRevisionId && toBeRevision <= toRevisionId) {\r
-            if(graph instanceof WriteGraph) {\r
-                WriteGraph writeGraph = (WriteGraph)graph;\r
-                Map<String,byte[]> metadata = writeGraph.getMetadata();\r
-                if(metadata != null)\r
-                    result.put(toBeRevision, metadata);\r
-            }\r
-        }\r
-        \r
-        return result;\r
-           \r
-       }\r
-       \r
-       public static Map<Resource, Collection<Change>> getDependencyChangesFrom(ReadGraph graph, long revisionId) throws DatabaseException {\r
-               ManagementSupport support = graph.getService(ManagementSupport.class);\r
-               \r
-        Map<Resource, Collection<Change>> result = new HashMap<Resource, Collection<Change>>();\r
-               Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, revisionId, Long.MAX_VALUE);\r
-               \r
-               for(Map.Entry<Long, Map<String,byte[]>> e : metadatas.entrySet()) {\r
-                   long csid = e.getKey();\r
-                       Map<String,byte[]> metadata = e.getValue();\r
-                       if(metadata != null) {\r
-                               byte[] changesData = metadata.get(DependencyChanges.class.getName());\r
-                               if(changesData != null && changesData.length > 0) {\r
-                                       DependencyChanges changes = DependencyChanges.deserialise(graph.getSession(), changesData);\r
-                                       if (changes == null)\r
-                                               continue;\r
-                                       if(DEBUG_IDS) System.err.println("-DependencyChanges[" + csid + "]");\r
-                                       for(Map.Entry<Resource, Change[]> entry : changes.modelChanges.entrySet()) {\r
-                                               Collection<Change> list = result.get(entry.getKey());\r
-                                               if(list == null) {\r
-                                                       list = new ArrayList<Change>();\r
-                                                       result.put(entry.getKey(), list);\r
-                                               }\r
-                                               for(Change c : entry.getValue()) {\r
-                                                       if(DEBUG) System.err.println("-" + c);\r
-                                                       list.add(c);\r
-                                               }\r
-                                       }\r
-                               }\r
-                       }\r
-               }\r
-               return result;\r
-       }\r
-    \r
-       public static void visitDependencyChangesFrom2(ReadGraph graph,\r
-                       Resource model, Change[] changes, ChangeVisitor changeVisitor) throws DatabaseException {\r
-       for(Change change : changes) {\r
-               changeVisitor.visit(graph, change, false);\r
-       }\r
-       }\r
-\r
-    /**\r
-     * Finds all changes made to the given {@code model} from the given revision and calls \r
-     * the {@code visitor} for them.\r
-     */\r
-    public static void visitDependencyChangesFrom(ReadGraph graph, Resource model, long fromRevision,\r
-            ChangeVisitor visitor) throws DatabaseException {\r
-        visitDependencyChangesBetween(graph, model, fromRevision, Long.MAX_VALUE, visitor, false);\r
-    }\r
-\r
-    private static void visitDependencyChangesBetween(ReadGraph graph, Resource model, long fromRevision, long toRevision,\r
-            ChangeVisitor visitor, boolean inverted) throws DatabaseException {\r
-        ManagementSupport support = graph.getService(ManagementSupport.class);\r
-//        System.err.println("visitDependencyChangesBetween " + fromRevision + " " + toRevision);\r
-//        Collection<ChangeSetIdentifier> csis = support.getChangeSetIdentifiers(fromRevision, toRevision);\r
-        \r
-        Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, fromRevision, toRevision);\r
-\r
-//        Map<Resource, Collection<Change>> result = new HashMap<Resource, Collection<Change>>();\r
-//        Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, revisionId, Long.MAX_VALUE);\r
-        \r
-        for(Map.Entry<Long, Map<String,byte[]>> e : metadatas.entrySet()) {\r
-\r
-            Map<String,byte[]> metadata = e.getValue();\r
-\r
-            browseChanges: {\r
-                byte[] changesData = metadata.get(DependencyChanges.class.getName());\r
-                if(changesData == null || changesData.length == 0) \r
-                    break browseChanges;\r
-                DependencyChanges changes = DependencyChanges.deserialise(graph.getSession(), changesData);\r
-                if (changes == null)\r
-                    break browseChanges;\r
-                for(Map.Entry<Resource, Change[]> entry : changes.modelChanges.entrySet())\r
-                    if(graph.syncRequest(new IsLinkedTo(model, entry.getKey()),\r
-                            TransientCacheListener.<Boolean>instance()))\r
-                        for(Change change : entry.getValue())\r
-                            visitor.visit(graph, change, inverted);\r
-            }\r
-            \r
-            byte[] undoMetadata = metadata.get(UndoMetadata.class.getName());\r
-            if(undoMetadata != null && undoMetadata.length != 0) { \r
-                UndoMetadata undo = UndoMetadata.deserialise(graph.getSession(), undoMetadata);\r
-                visitDependencyChangesBetween(graph, model, undo.getBeginCSId(), undo.getEndCSId(), visitor, \r
-                        undo.isRedo() ? inverted : !inverted);\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.db.layer0.changeset;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.TreeMap;
+
+import org.simantics.db.ChangeSetIdentifier;
+import org.simantics.db.ReadGraph;
+import org.simantics.db.Resource;
+import org.simantics.db.WriteGraph;
+import org.simantics.db.common.UndoMetadata;
+import org.simantics.db.common.procedure.adapter.TransientCacheListener;
+import org.simantics.db.exception.DatabaseException;
+import org.simantics.db.layer0.genericrelation.DependencyChanges;
+import org.simantics.db.layer0.genericrelation.DependencyChanges.Change;
+import org.simantics.db.layer0.request.IsLinkedTo;
+import org.simantics.db.service.ManagementSupport;
+
+public class MetadataUtils {
+       
+       public static final boolean DEBUG = false;
+       public static final boolean DEBUG_IDS = false;
+
+       public static Map<Long, Map<String,byte[]>> getMetadatas(ReadGraph graph, ManagementSupport support, long fromRevisionId, long toRevisionId) throws DatabaseException {
+
+           TreeMap<Long, Map<String,byte[]>> result = new TreeMap<Long, Map<String,byte[]>>(); 
+                   
+           Collection<ChangeSetIdentifier> csis = support.getChangeSetIdentifiers(fromRevisionId, toRevisionId);
+        for(ChangeSetIdentifier csi : csis) {
+            if(csi.getId() < fromRevisionId) {
+                System.err.println("ManagementSupport.getChangeSetIdentifiers returned identifiers outside of the requested range.");
+                continue;
+            }
+            Map<String,byte[]> metadata = csi.getMetadata();
+            if(metadata != null) result.put(csi.getId(), metadata);
+        }
+        long toBeRevision = support.getHeadRevisionId()+1;
+        if(toBeRevision >= fromRevisionId && toBeRevision <= toRevisionId) {
+            if(graph instanceof WriteGraph) {
+                WriteGraph writeGraph = (WriteGraph)graph;
+                Map<String,byte[]> metadata = writeGraph.getMetadata();
+                if(metadata != null)
+                    result.put(toBeRevision, metadata);
+            }
+        }
+        
+        return result;
+           
+       }
+       
+       public static Map<Resource, Collection<Change>> getDependencyChangesFrom(ReadGraph graph, long revisionId) throws DatabaseException {
+               ManagementSupport support = graph.getService(ManagementSupport.class);
+               
+        Map<Resource, Collection<Change>> result = new HashMap<Resource, Collection<Change>>();
+               Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, revisionId, Long.MAX_VALUE);
+               
+               for(Map.Entry<Long, Map<String,byte[]>> e : metadatas.entrySet()) {
+                   long csid = e.getKey();
+                       Map<String,byte[]> metadata = e.getValue();
+                       if(metadata != null) {
+                               byte[] changesData = metadata.get(DependencyChanges.class.getName());
+                               if(changesData != null && changesData.length > 0) {
+                                       DependencyChanges changes = DependencyChanges.deserialise(graph.getSession(), changesData);
+                                       if (changes == null)
+                                               continue;
+                                       if(DEBUG_IDS) System.err.println("-DependencyChanges[" + csid + "]");
+                                       for(Map.Entry<Resource, Change[]> entry : changes.modelChanges.entrySet()) {
+                                               Collection<Change> list = result.get(entry.getKey());
+                                               if(list == null) {
+                                                       list = new ArrayList<Change>();
+                                                       result.put(entry.getKey(), list);
+                                               }
+                                               for(Change c : entry.getValue()) {
+                                                       if(DEBUG) System.err.println("-" + c);
+                                                       list.add(c);
+                                               }
+                                       }
+                               }
+                       }
+               }
+               return result;
+       }
+    
+       public static void visitDependencyChangesFrom2(ReadGraph graph,
+                       Resource model, Change[] changes, ChangeVisitor changeVisitor) throws DatabaseException {
+       for(Change change : changes) {
+               changeVisitor.visit(graph, change, false);
+       }
+       }
+
+    /**
+     * Finds all changes made to the given {@code model} from the given revision and calls 
+     * the {@code visitor} for them.
+     */
+    public static void visitDependencyChangesFrom(ReadGraph graph, Resource model, long fromRevision,
+            ChangeVisitor visitor) throws DatabaseException {
+        visitDependencyChangesBetween(graph, model, fromRevision, Long.MAX_VALUE, visitor, false);
+    }
+
+    private static void visitDependencyChangesBetween(ReadGraph graph, Resource model, long fromRevision, long toRevision,
+            ChangeVisitor visitor, boolean inverted) throws DatabaseException {
+        ManagementSupport support = graph.getService(ManagementSupport.class);
+//        System.err.println("visitDependencyChangesBetween " + fromRevision + " " + toRevision);
+//        Collection<ChangeSetIdentifier> csis = support.getChangeSetIdentifiers(fromRevision, toRevision);
+        
+        Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, fromRevision, toRevision);
+
+//        Map<Resource, Collection<Change>> result = new HashMap<Resource, Collection<Change>>();
+//        Map<Long, Map<String,byte[]>> metadatas = getMetadatas(graph, support, revisionId, Long.MAX_VALUE);
+        
+        for(Map.Entry<Long, Map<String,byte[]>> e : metadatas.entrySet()) {
+
+            Map<String,byte[]> metadata = e.getValue();
+
+            browseChanges: {
+                byte[] changesData = metadata.get(DependencyChanges.class.getName());
+                if(changesData == null || changesData.length == 0) 
+                    break browseChanges;
+                DependencyChanges changes = DependencyChanges.deserialise(graph.getSession(), changesData);
+                if (changes == null)
+                    break browseChanges;
+                for(Map.Entry<Resource, Change[]> entry : changes.modelChanges.entrySet())
+                    if(graph.syncRequest(new IsLinkedTo(model, entry.getKey()),
+                            TransientCacheListener.<Boolean>instance()))
+                        for(Change change : entry.getValue())
+                            visitor.visit(graph, change, inverted);
+            }
+            
+            byte[] undoMetadata = metadata.get(UndoMetadata.class.getName());
+            if(undoMetadata != null && undoMetadata.length != 0) { 
+                UndoMetadata undo = UndoMetadata.deserialise(graph.getSession(), undoMetadata);
+                visitDependencyChangesBetween(graph, model, undo.getBeginCSId(), undo.getEndCSId(), visitor, 
+                        undo.isRedo() ? inverted : !inverted);
+            }
+        }
+    }
+
+}