1 package org.simantics.objmap.structural.schema;
\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
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
20 * @author Marko Luukkainen <marko.luukkainen@vtt.fi>
\r
23 public class AdaptedLinkType implements ILinkType<StructuralResource,IStructuralObject> {
\r
26 //static Logger LOGGER = Logger.getLogger("org.simantics.objmap");
\r
28 Resource domainType;
\r
32 public AdaptedLinkType(Resource domainType, Class<?> rangeType) {
\r
33 this.domainType = domainType;
\r
34 this.rangeType = rangeType;
\r
38 public StructuralResource createDomainElement(WriteGraph g, IStructuralObject rangeElement)
\r
39 throws MappingException {
\r
41 IAdaptable adaptable = (IAdaptable)rangeElement;
\r
42 Resource res = (Resource)adaptable.getAdapter(Resource.class);
\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
54 public IStructuralObject createRangeElement(ReadGraph g, StructuralResource domainElement)
\r
55 throws MappingException {
\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
64 public void createDomain(WriteGraph graph, IBackwardMapping<StructuralResource, IStructuralObject> mapping, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {
\r
68 public void createRange(ReadGraph graph, org.simantics.objmap.forward.IForwardMapping<StructuralResource, IStructuralObject> mapping, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {
\r
72 public boolean updateDomain(WriteGraph g, IBackwardMapping<StructuralResource, IStructuralObject> map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {
\r
76 public boolean updateRange(ReadGraph g, IForwardMapping<StructuralResource, IStructuralObject> map, StructuralResource domainElement, IStructuralObject rangeElement) throws MappingException {
\r