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
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
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
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
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