]> gerrit.simantics Code Review - simantics/interop.git/blobdiff - org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetIdentifiable.java
refs #3483
[simantics/interop.git] / org.simantics.interop.mapping / src / org / simantics / interop / mapping / data / ResourceSetIdentifiable.java
diff --git a/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetIdentifiable.java b/org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetIdentifiable.java
new file mode 100644 (file)
index 0000000..84a383b
--- /dev/null
@@ -0,0 +1,110 @@
+package org.simantics.interop.mapping.data;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Collection;\r
+import java.util.HashSet;\r
+import java.util.Set;\r
+\r
+import org.simantics.db.Resource;\r
+\r
+public class ResourceSetIdentifiable implements Identifiable {\r
+\r
+       private Resource primary;\r
+       private Set<Resource> resources;\r
+       \r
+       public ResourceSetIdentifiable(Resource resource) {\r
+               this.resources = new HashSet<Resource>();\r
+               this.resources.add(resource);\r
+               this.primary = resource;\r
+       }\r
+       \r
+       public ResourceSetIdentifiable(Resource primary, Resource... resource) {\r
+               this.resources = new HashSet<Resource>();\r
+               for (Resource r : resource)\r
+                       this.resources.add(r);\r
+               this.resources.add(primary);\r
+               this.primary = primary;\r
+       }\r
+       \r
+       public ResourceSetIdentifiable(Resource primary, Collection<Resource> resource) {\r
+               this.resources = new HashSet<Resource>();\r
+               for (Resource r : resource)\r
+                       this.resources.add(r);\r
+               this.resources.add(primary);\r
+               this.primary = primary;\r
+       }\r
+       \r
+       public ResourceSetIdentifiable(Collection<Resource> resource) {\r
+               this.resources = new HashSet<Resource>();\r
+               for (Resource r : resource)\r
+                       this.resources.add(r);\r
+               this.primary = resource.iterator().next();\r
+       }\r
+       \r
+       public Resource getPrimary() {\r
+               return primary;\r
+       }\r
+       \r
+       public Set<Resource> getResources() {\r
+               return resources;\r
+       }\r
+       \r
+       @Override\r
+       public int hashCode() {\r
+               return resources.hashCode();\r
+       }\r
+       \r
+       @SuppressWarnings("unchecked")\r
+       public <T> T getAdapter(Class<T> clazz) {\r
+               if (clazz.equals(Resource.class))\r
+                       return (T)primary;\r
+               if (clazz.equals(Resource[].class))\r
+                       return (T)resources.toArray(new Resource[resources.size()]);\r
+               if (clazz.equals(String.class)) {\r
+                       String s = "";\r
+                       for (Resource r : resources)\r
+                               s += r.toString() + " ";\r
+                       // TODO : have to use org.simantics.db.common.utils.Transaction to get access to ReadGraph.\r
+                       return (T)s;//NameUtils.getSafeName(g,resource);\r
+               }\r
+               return null;\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
+               ResourceSetIdentifiable other = (ResourceSetIdentifiable)arg0;\r
+               return resources.equals(other.resources);\r
+       }\r
+       \r
+       @Override\r
+       public Identifiable merge(Identifiable other) {\r
+               if (other instanceof ResourceIdentifiable) {\r
+                       Collection<Resource> coll = new ArrayList<Resource>();\r
+                       coll.addAll(this.resources);\r
+                       coll.add(((ResourceIdentifiable)other).getResource());\r
+                       ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll);\r
+                       return i;\r
+               } else if (other instanceof ResourceSetIdentifiable) {\r
+                       Collection<Resource> coll = new ArrayList<Resource>();\r
+                       coll.addAll(this.resources);\r
+                       coll.addAll(((ResourceSetIdentifiable)other).getResources());\r
+                       ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll);\r
+                       return i;\r
+               }\r
+               return null;\r
+       }\r
+       \r
+       @Override\r
+       public String toString() {\r
+               String s = "(";\r
+               for (Resource r : resources) {\r
+                       s += r.toString() + " ";\r
+               }\r
+               s = s.substring(0,s.length()-1) + ")";\r
+               return s;\r
+       }\r
+}\r