--- /dev/null
+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