]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable2.java
refs #3483
[simantics/interop.git] / org.simantics.interop.mapping / src / org / simantics / interop / mapping / data / ResourceSetSplitIdentifiable2.java
diff --git a/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable2.java b/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetSplitIdentifiable2.java
new file mode 100644 (file)
index 0000000..fa5841d
--- /dev/null
@@ -0,0 +1,91 @@
+package org.simantics.interop.mapping.data;\r
+\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+\r
+import org.simantics.db.Resource;\r
+\r
+public class ResourceSetSplitIdentifiable2 extends ResourceSetIdentifiable {\r
+\r
+       private String identifier;\r
+       \r
+       \r
+       public ResourceSetSplitIdentifiable2(Resource resource, String identifier) {\r
+               super(resource);\r
+               this.identifier =identifier;\r
+       }\r
+       \r
+       public ResourceSetSplitIdentifiable2(String identifier, Resource primary, Resource... resource) {\r
+               super(primary,resource);\r
+               this.identifier = identifier;\r
+       }\r
+       \r
+       public ResourceSetSplitIdentifiable2(Resource primary, Collection<Resource> resources, String identifier) {\r
+               super(primary,resources);\r
+               this.identifier = identifier;\r
+       }\r
+       \r
+       public static Identifiable createIdentifiable(ResourceSetIdentifiable identifiable, String identifier) {\r
+               return new ResourceSetSplitIdentifiable2(identifiable.getPrimary(),identifiable.getResources(), identifier);\r
+       }\r
+       \r
+       public static Identifiable createIdentifiable(Identifiable identifiable, String identifier) {\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
+                       return new ResourceSetSplitIdentifiable2(identifier, res, resources);\r
+\r
+               } else {\r
+                       return ResourceSplitIdentifiable2.createIdentifiable(identifiable, identifier);\r
+               }\r
+\r
+               \r
+       }\r
+       \r
+       public String getIdentifier() {\r
+               return identifier;\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
+               ResourceSetSplitIdentifiable2 other = (ResourceSetSplitIdentifiable2)arg0;\r
+               if (!identifier.equals(other.identifier))\r
+                       return false;\r
+               return super.equals(arg0);\r
+       }\r
+       \r
+       @Override\r
+       public Identifiable merge(Identifiable other) {\r
+               if (other instanceof ResourceSplitIdentifiable2) {\r
+                       ResourceSplitIdentifiable2 o = (ResourceSplitIdentifiable2)other;\r
+                       if (!o.getIdentifier().equals(identifier))\r
+                               throw new RuntimeException("Cannot be merged, Identifiers do not match " + identifier + " " + o.getIdentifier());\r
+                       Collection<Resource> resources = new ArrayList<Resource>();\r
+                       resources.addAll(getResources());\r
+                       resources.add(o.getResource());\r
+                       ResourceSetSplitIdentifiable2 id = new ResourceSetSplitIdentifiable2(getPrimary(), resources,identifier);\r
+                       return id;\r
+               }\r
+               if (other instanceof ResourceSetSplitIdentifiable2) {\r
+                       ResourceSetSplitIdentifiable2 o = (ResourceSetSplitIdentifiable2)other;\r
+                       if (!o.getIdentifier().equals(identifier))\r
+                               throw new RuntimeException("Cannot be merged, Identifiers do not match " + identifier + " " + o.getIdentifier());\r
+                       Collection<Resource> resources = new ArrayList<Resource>();\r
+                       resources.addAll(getResources());\r
+                       resources.addAll(o.getResources());\r
+                       ResourceSetSplitIdentifiable2 id = new ResourceSetSplitIdentifiable2(getPrimary(), resources,identifier);\r
+                       return id;\r
+               }\r
+               throw new RuntimeException("Cannot be merged");\r
+       }\r
+       \r
+       \r
+}\r