]> gerrit.simantics Code Review - simantics/interop.git/blob - org.simantics.interop.mapping/src/org/simantics/interop/mapping/data/ResourceSetIdentifiable.java
SplittingWriteGraph and WriteGraphProxy went out of date after ReadGraph.isImmutable...
[simantics/interop.git] / org.simantics.interop.mapping / src / org / simantics / interop / mapping / data / ResourceSetIdentifiable.java
1 package org.simantics.interop.mapping.data;\r
2 \r
3 import java.util.ArrayList;\r
4 import java.util.Collection;\r
5 import java.util.HashSet;\r
6 import java.util.Set;\r
7 \r
8 import org.simantics.db.Resource;\r
9 \r
10 public class ResourceSetIdentifiable implements Identifiable {\r
11 \r
12         private Resource primary;\r
13         private Set<Resource> resources;\r
14         \r
15         public ResourceSetIdentifiable(Resource resource) {\r
16                 this.resources = new HashSet<Resource>();\r
17                 this.resources.add(resource);\r
18                 this.primary = resource;\r
19         }\r
20         \r
21         public ResourceSetIdentifiable(Resource primary, Resource... resource) {\r
22                 this.resources = new HashSet<Resource>();\r
23                 for (Resource r : resource)\r
24                         this.resources.add(r);\r
25                 this.resources.add(primary);\r
26                 this.primary = primary;\r
27         }\r
28         \r
29         public ResourceSetIdentifiable(Resource primary, Collection<Resource> resource) {\r
30                 this.resources = new HashSet<Resource>();\r
31                 for (Resource r : resource)\r
32                         this.resources.add(r);\r
33                 this.resources.add(primary);\r
34                 this.primary = primary;\r
35         }\r
36         \r
37         public ResourceSetIdentifiable(Collection<Resource> resource) {\r
38                 this.resources = new HashSet<Resource>();\r
39                 for (Resource r : resource)\r
40                         this.resources.add(r);\r
41                 this.primary = resource.iterator().next();\r
42         }\r
43         \r
44         public Resource getPrimary() {\r
45                 return primary;\r
46         }\r
47         \r
48         public Set<Resource> getResources() {\r
49                 return resources;\r
50         }\r
51         \r
52         @Override\r
53         public int hashCode() {\r
54                 return resources.hashCode();\r
55         }\r
56         \r
57         @SuppressWarnings("unchecked")\r
58         public <T> T getAdapter(Class<T> clazz) {\r
59                 if (clazz.equals(Resource.class))\r
60                         return (T)primary;\r
61                 if (clazz.equals(Resource[].class))\r
62                         return (T)resources.toArray(new Resource[resources.size()]);\r
63                 if (clazz.equals(String.class)) {\r
64                         String s = "";\r
65                         for (Resource r : resources)\r
66                                 s += r.toString() + " ";\r
67                         // TODO : have to use org.simantics.db.common.utils.Transaction to get access to ReadGraph.\r
68                         return (T)s;//NameUtils.getSafeName(g,resource);\r
69                 }\r
70                 return null;\r
71         }\r
72         \r
73         @Override\r
74         public boolean equals(Object arg0) {\r
75                 if (arg0 == null)\r
76                         return false;\r
77                 if (this.getClass() != arg0.getClass())\r
78                         return false;\r
79                 ResourceSetIdentifiable other = (ResourceSetIdentifiable)arg0;\r
80                 return resources.equals(other.resources);\r
81         }\r
82         \r
83         @Override\r
84         public Identifiable merge(Identifiable other) {\r
85                 if (other instanceof ResourceIdentifiable) {\r
86                         Collection<Resource> coll = new ArrayList<Resource>();\r
87                         coll.addAll(this.resources);\r
88                         coll.add(((ResourceIdentifiable)other).getResource());\r
89                         ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll);\r
90                         return i;\r
91                 } else if (other instanceof ResourceSetIdentifiable) {\r
92                         Collection<Resource> coll = new ArrayList<Resource>();\r
93                         coll.addAll(this.resources);\r
94                         coll.addAll(((ResourceSetIdentifiable)other).getResources());\r
95                         ResourceSetIdentifiable i = new ResourceSetIdentifiable(primary,coll);\r
96                         return i;\r
97                 }\r
98                 return null;\r
99         }\r
100         \r
101         @Override\r
102         public String toString() {\r
103                 String s = "(";\r
104                 for (Resource r : resources) {\r
105                         s += r.toString() + " ";\r
106                 }\r
107                 s = s.substring(0,s.length()-1) + ")";\r
108                 return s;\r
109         }\r
110 }\r