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