]> gerrit.simantics Code Review - simantics/interop.git/blob - 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
1 package org.simantics.interop.mapping.data;\r
2 \r
3 \r
4 import java.util.ArrayList;\r
5 import java.util.Collection;\r
6 \r
7 import org.simantics.db.Resource;\r
8 \r
9 public class ResourceSetSplitIdentifiable2 extends ResourceSetIdentifiable {\r
10 \r
11         private String identifier;\r
12         \r
13         \r
14         public ResourceSetSplitIdentifiable2(Resource resource, String identifier) {\r
15                 super(resource);\r
16                 this.identifier =identifier;\r
17         }\r
18         \r
19         public ResourceSetSplitIdentifiable2(String identifier, Resource primary, Resource... resource) {\r
20                 super(primary,resource);\r
21                 this.identifier = identifier;\r
22         }\r
23         \r
24         public ResourceSetSplitIdentifiable2(Resource primary, Collection<Resource> resources, String identifier) {\r
25                 super(primary,resources);\r
26                 this.identifier = identifier;\r
27         }\r
28         \r
29         public static Identifiable createIdentifiable(ResourceSetIdentifiable identifiable, String identifier) {\r
30                 return new ResourceSetSplitIdentifiable2(identifiable.getPrimary(),identifiable.getResources(), identifier);\r
31         }\r
32         \r
33         public static Identifiable createIdentifiable(Identifiable identifiable, String identifier) {\r
34                 Resource res = identifiable.getAdapter(Resource.class);\r
35                 if (res == null)\r
36                         return null;\r
37                 \r
38                 Resource resources[] = identifiable.getAdapter(Resource[].class);\r
39                 if (resources.length > 1) {\r
40                         return new ResourceSetSplitIdentifiable2(identifier, res, resources);\r
41 \r
42                 } else {\r
43                         return ResourceSplitIdentifiable2.createIdentifiable(identifiable, identifier);\r
44                 }\r
45 \r
46                 \r
47         }\r
48         \r
49         public String getIdentifier() {\r
50                 return identifier;\r
51         }\r
52         \r
53         @Override\r
54         public boolean equals(Object arg0) {\r
55                 if (arg0 == null)\r
56                         return false;\r
57                 if (this.getClass() != arg0.getClass())\r
58                         return false;\r
59                 ResourceSetSplitIdentifiable2 other = (ResourceSetSplitIdentifiable2)arg0;\r
60                 if (!identifier.equals(other.identifier))\r
61                         return false;\r
62                 return super.equals(arg0);\r
63         }\r
64         \r
65         @Override\r
66         public Identifiable merge(Identifiable other) {\r
67                 if (other instanceof ResourceSplitIdentifiable2) {\r
68                         ResourceSplitIdentifiable2 o = (ResourceSplitIdentifiable2)other;\r
69                         if (!o.getIdentifier().equals(identifier))\r
70                                 throw new RuntimeException("Cannot be merged, Identifiers do not match " + identifier + " " + o.getIdentifier());\r
71                         Collection<Resource> resources = new ArrayList<Resource>();\r
72                         resources.addAll(getResources());\r
73                         resources.add(o.getResource());\r
74                         ResourceSetSplitIdentifiable2 id = new ResourceSetSplitIdentifiable2(getPrimary(), resources,identifier);\r
75                         return id;\r
76                 }\r
77                 if (other instanceof ResourceSetSplitIdentifiable2) {\r
78                         ResourceSetSplitIdentifiable2 o = (ResourceSetSplitIdentifiable2)other;\r
79                         if (!o.getIdentifier().equals(identifier))\r
80                                 throw new RuntimeException("Cannot be merged, Identifiers do not match " + identifier + " " + o.getIdentifier());\r
81                         Collection<Resource> resources = new ArrayList<Resource>();\r
82                         resources.addAll(getResources());\r
83                         resources.addAll(o.getResources());\r
84                         ResourceSetSplitIdentifiable2 id = new ResourceSetSplitIdentifiable2(getPrimary(), resources,identifier);\r
85                         return id;\r
86                 }\r
87                 throw new RuntimeException("Cannot be merged");\r
88         }\r
89         \r
90         \r
91 }\r