]> gerrit.simantics Code Review - simantics/3d.git/blobdiff - org.simantics.objmap2/src/org/simantics/objmap/structural/schema/MappingSchemas.java
Java object to ordered set mapping
[simantics/3d.git] / org.simantics.objmap2 / src / org / simantics / objmap / structural / schema / MappingSchemas.java
index 758db0e029e53ca2608ae7bcecf9e8e5aef980d4..3f9169ec9f569bdbb57b42a5d8804114066ad87d 100644 (file)
@@ -18,7 +18,6 @@ import java.util.ArrayList;
 import java.util.Collection;\r
 \r
 import org.simantics.db.ReadGraph;\r
-import org.simantics.db.Resource;\r
 import org.simantics.db.exception.DatabaseException;\r
 import org.simantics.objmap.bidirectional.IBidirectionalMappingRule;\r
 import org.simantics.objmap.graph.annotations.GraphType;\r
@@ -26,6 +25,7 @@ import org.simantics.objmap.graph.annotations.HasCollectionAdder;
 import org.simantics.objmap.graph.annotations.HasCollectionRemover;\r
 import org.simantics.objmap.graph.annotations.HasSetter;\r
 import org.simantics.objmap.graph.annotations.OptionalRelatedElements;\r
+import org.simantics.objmap.graph.annotations.OrderedSetType;\r
 import org.simantics.objmap.graph.annotations.RelatedElements;\r
 import org.simantics.objmap.graph.annotations.RelatedElementsGet;\r
 import org.simantics.objmap.graph.annotations.RelatedGetObj;\r
@@ -33,6 +33,18 @@ import org.simantics.objmap.graph.annotations.RelatedGetValue;
 import org.simantics.objmap.graph.annotations.RelatedOrderedSetElements;\r
 import org.simantics.objmap.graph.annotations.RelatedValue;\r
 import org.simantics.objmap.graph.annotations.UpdateMethod;\r
+import org.simantics.objmap.graph.annotations.meta.IsClassRule;\r
+import org.simantics.objmap.graph.annotations.meta.IsCollectionRule;\r
+import org.simantics.objmap.graph.annotations.meta.IsFieldRule;\r
+import org.simantics.objmap.graph.annotations.meta.IsGetSetRule;\r
+import org.simantics.objmap.graph.annotations.meta.IsMethodRule;\r
+import org.simantics.objmap.graph.rules.factory.IClassRuleFactory;\r
+import org.simantics.objmap.graph.rules.factory.ICollectionRuleFactory;\r
+import org.simantics.objmap.graph.rules.factory.IFieldRuleFactory;\r
+import org.simantics.objmap.graph.rules.factory.IGetSetRuleFactory;\r
+import org.simantics.objmap.graph.rules.factory.IMethodRuleFactory;\r
+import org.simantics.objmap.structural.IStructuralObject;\r
+import org.simantics.objmap.structural.StructuralResource;\r
 import org.simantics.objmap.structural.annotations.StructuralRelatedElementsGet;\r
 import org.simantics.objmap.structural.annotations.StructuralRelatedGetObj;\r
 import org.simantics.objmap.structural.annotations.TypeRelatedElementsGet;\r
@@ -51,18 +63,6 @@ import org.simantics.objmap.structural.annotations.factories.TypeRelatedElements
 import org.simantics.objmap.structural.annotations.factories.TypeRelatedGetSetObjRuleFactory;\r
 import org.simantics.objmap.structural.annotations.factories.TypeRelatedGetSetValueRuleFactory;\r
 import org.simantics.objmap.structural.annotations.factories.UpdateMethodFactory;\r
-import org.simantics.objmap.graph.annotations.meta.IsClassRule;\r
-import org.simantics.objmap.graph.annotations.meta.IsCollectionRule;\r
-import org.simantics.objmap.graph.annotations.meta.IsFieldRule;\r
-import org.simantics.objmap.graph.annotations.meta.IsGetSetRule;\r
-import org.simantics.objmap.graph.annotations.meta.IsMethodRule;\r
-import org.simantics.objmap.graph.rules.factory.IClassRuleFactory;\r
-import org.simantics.objmap.graph.rules.factory.ICollectionRuleFactory;\r
-import org.simantics.objmap.graph.rules.factory.IFieldRuleFactory;\r
-import org.simantics.objmap.graph.rules.factory.IGetSetRuleFactory;\r
-import org.simantics.objmap.graph.rules.factory.IMethodRuleFactory;\r
-import org.simantics.objmap.structural.IStructuralObject;\r
-import org.simantics.objmap.structural.StructuralResource;\r
 \r
 \r
 public class MappingSchemas {\r
@@ -76,12 +76,20 @@ public class MappingSchemas {
        public static SimpleLinkType fromAnnotations(ReadGraph g, Class<?> clazz) throws DatabaseException, InstantiationException, IllegalAccessException {\r
            GraphType graphType = clazz.getAnnotation(GraphType.class);\r
            \r
-           ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>> rules = new ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>>();\r
-           collectRulesFromAnnotations(g, clazz, rules);\r
-           \r
-           return new SimpleLinkType(\r
-                   g.getResource(graphType.value()), \r
-                clazz, rules);    \r
+           if (graphType != null) {\r
+                   ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>> rules = new ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>>();\r
+                   collectRulesFromAnnotations(g, clazz, rules);\r
+                   \r
+                   return new SimpleLinkType(g.getResource(graphType.value()), clazz, rules);    \r
+           }\r
+           OrderedSetType orderedSetType = clazz.getAnnotation(OrderedSetType.class);\r
+           if (orderedSetType != null) {\r
+               ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>> rules = new ArrayList<IBidirectionalMappingRule<StructuralResource, IStructuralObject>>();\r
+                   collectRulesFromAnnotations(g, clazz, rules);\r
+                   \r
+                   return new OrderedSetSimpleLinkType(g.getResource(orderedSetType.value()), clazz, rules);\r
+           }\r
+           throw new IllegalArgumentException("Class " + clazz.toString() + " does not contain annotations.");\r
        }\r
        \r
        public static void collectRulesFromAnnotations(ReadGraph g, Class<?> clazz, Collection<IBidirectionalMappingRule<StructuralResource, IStructuralObject>> rules) throws DatabaseException, InstantiationException, IllegalAccessException {\r