]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable.java
refs #3483
[simantics/interop.git] / org.simantics.interop.mapping / src / org / simantics / interop / mapping / data / ResourceSetSplitIdentifiable.java
diff --git a/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable.java b/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable.java
new file mode 100644 (file)
index 0000000..0a120a8
--- /dev/null
@@ -0,0 +1,86 @@
+package org.simantics.interop.mapping.data;\r
+\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.List;\r
+\r
+import org.simantics.db.Resource;\r
+\r
+public class ResourceSetSplitIdentifiable extends ResourceSetIdentifiable {\r
+\r
+       private static int counter = 0;\r
+       \r
+       private int identifier;\r
+       private int index;\r
+       \r
+       \r
+       ResourceSetSplitIdentifiable(Resource resource, int index, int identifier) {\r
+               super(resource);\r
+               this.index = index;\r
+               this.identifier = identifier;\r
+       }\r
+       \r
+       public ResourceSetSplitIdentifiable(int index, int identifier, Resource primary, Resource... resource) {\r
+               super(primary,resource);\r
+               this.index = index;\r
+               this.identifier = identifier;\r
+       }\r
+       \r
+       public ResourceSetSplitIdentifiable(Resource primary, Collection<Resource> resources,int index, int identifier) {\r
+               super(primary,resources);\r
+               this.index = index;\r
+               this.identifier = identifier;\r
+       }\r
+       \r
+       public static List<Identifiable> createIdentifiables(ResourceSetIdentifiable identifiable, int count) {\r
+               List<Identifiable> result = new ArrayList<Identifiable>(count);\r
+               int identifier = counter++;\r
+               for (int i = 0; i < count; i++) {\r
+                       result.add(new ResourceSetSplitIdentifiable(identifiable.getPrimary(),identifiable.getResources(), i, identifier));\r
+               }\r
+               return result;\r
+       }\r
+       \r
+       public static List<Identifiable> createIdentifiables(Identifiable identifiable, int count) {\r
+               Resource res = identifiable.getAdapter(Resource.class);\r
+               if (res == null)\r
+                       return null;\r
+               \r
+               Resource resources[] = identifiable.getAdapter(Resource[].class);\r
+               if (resources.length > 1) {\r
+                       List<Identifiable> result = new ArrayList<Identifiable>(count);\r
+                       int identifier = counter++;\r
+                       for (int i = 0; i < count; i++) {\r
+                               result.add(new ResourceSetSplitIdentifiable(i, identifier, res, resources));\r
+                       }\r
+                       return result;\r
+               } else {\r
+                       return ResourceSplitIdentifiable.createIdentifiables(identifiable, count);\r
+               }\r
+\r
+               \r
+       }\r
+       \r
+       @Override\r
+       public boolean equals(Object arg0) {\r
+               if (arg0 == null)\r
+                       return false;\r
+               if (this.getClass() != arg0.getClass())\r
+                       return false;\r
+               ResourceSetSplitIdentifiable other = (ResourceSetSplitIdentifiable)arg0;\r
+               if (identifier != other.identifier)\r
+                       return false;\r
+               if (index != other.index)\r
+                       return false;\r
+               return super.equals(arg0);\r
+       }\r
+       \r
+       @Override\r
+       public Identifiable merge(Identifiable other) {\r
+               throw new RuntimeException("Cannot be merged");\r
+       }\r
+       \r
+       \r
+       \r
+}\r