+/*******************************************************************************\r
+ * Copyright (c) 2012, 2013 Association for Decentralized Information Management in\r
+ * Industry THTH ry.\r
+ * All rights reserved. This program and the accompanying materials\r
+ * are made available under the terms of the Eclipse Public License v1.0\r
+ * which accompanies this distribution, and is available at\r
+ * http://www.eclipse.org/legal/epl-v10.html\r
+ *\r
+ * Contributors:\r
+ * VTT Technical Research Centre of Finland - initial API and implementation\r
+ *******************************************************************************/\r
package org.simantics.objmap.structural.schema;\r
\r
import java.lang.annotation.Annotation;\r
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