]> gerrit.simantics Code Review - simantics/3d.git/blob - org.simantics.objmap2/src/org/simantics/objmap/structural/schema/AdaptedLinkType.java
3D framework (Simca 2012)
[simantics/3d.git] / org.simantics.objmap2 / src / org / simantics / objmap / structural / schema / AdaptedLinkType.java
1 package org.simantics.objmap.structural.schema;\r
2 \r
3 //import org.apache.log4j.Logger;\r
4 import org.eclipse.core.runtime.IAdaptable;\r
5 import org.simantics.db.ReadGraph;\r
6 import org.simantics.db.Resource;\r
7 import org.simantics.db.WriteGraph;\r
8 import org.simantics.db.exception.DatabaseException;\r
9 import org.simantics.objmap.backward.IBackwardMapping;\r
10 import org.simantics.objmap.exceptions.MappingException;\r
11 import org.simantics.objmap.forward.IForwardMapping;\r
12 import org.simantics.objmap.graph.schema.ILinkType;\r
13 import org.simantics.objmap.structural.IStructuralObject;\r
14 import org.simantics.objmap.structural.StructuralResource;\r
15 \r
16 /**\r
17  * A link type that is associated with adaptable resource (ReadGraph.getAdapter(Resource,Class)). \r
18  * The adapted object must implement IAdaptable interface for returning the original Resource. \r
19  * \r
20  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
21  *\r
22  */\r
23 public class AdaptedLinkType implements ILinkType<StructuralResource,IStructuralObject> {\r
24 \r
25         \r
26         //static Logger LOGGER = Logger.getLogger("org.simantics.objmap");\r
27     \r
28     Resource domainType;\r
29     Class<?> rangeType;\r
30     \r
31     \r
32     public AdaptedLinkType(Resource domainType, Class<?> rangeType) {\r
33         this.domainType = domainType;\r
34         this.rangeType = rangeType;\r
35     }\r
36     \r
37     @Override\r
38     public StructuralResource createDomainElement(WriteGraph g, IStructuralObject rangeElement)\r
39                 throws MappingException {\r
40         try {\r
41                 IAdaptable adaptable = (IAdaptable)rangeElement;\r
42                 Resource res = (Resource)adaptable.getAdapter(Resource.class);\r
43                 if (res == null)\r
44                         throw new NullPointerException();\r
45                 return new StructuralResource(g,res);\r
46         } catch (Exception e) {\r
47                 throw new MappingException("Adapted object must implement IAdaptable interface to return the source Resource.", e);\r
48         }\r
49         \r
50     }\r
51 \r
52     \r
53     @Override\r
54     public IStructuralObject createRangeElement(ReadGraph g, StructuralResource domainElement)\r
55                 throws MappingException {\r
56         try {\r
57                 // FIXME : this will not work, we cannot assume that adapted objects would implement IStructuralObject interface.\r
58                 return (IStructuralObject)g.adapt(domainElement.getResource(), rangeType);\r
59         } catch (DatabaseException e) {\r
60                 throw new MappingException(e);\r
61         }\r
62     }\r
63     \r
64     public void createDomain(WriteGraph graph, IBackwardMapping<StructuralResource, IStructuralObject> mapping, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {\r
65         \r
66     };\r
67     \r
68     public void createRange(ReadGraph graph, org.simantics.objmap.forward.IForwardMapping<StructuralResource, IStructuralObject> mapping, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {\r
69         \r
70     };\r
71     \r
72     public boolean updateDomain(WriteGraph g, IBackwardMapping<StructuralResource, IStructuralObject> map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {\r
73         return false;\r
74     }\r
75     \r
76     public boolean updateRange(ReadGraph g, IForwardMapping<StructuralResource, IStructuralObject> map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {\r
77         return false;\r
78     }\r
79 }\r