1 /*******************************************************************************
\r
2 * Copyright (c) 2007, 2014 Association for Decentralized Information Management
\r
3 * in Industry THTH ry.
\r
4 * All rights reserved. This program and the accompanying materials
\r
5 * are made available under the terms of the Eclipse Public License v1.0
\r
6 * which accompanies this distribution, and is available at
\r
7 * http://www.eclipse.org/legal/epl-v10.html
\r
10 * VTT Technical Research Centre of Finland - initial API and implementation
\r
11 * Semantum Oy - #5290
\r
12 *******************************************************************************/
\r
13 package org.simantics.modeling.rules;
\r
15 import java.util.Collection;
\r
17 import org.simantics.db.ReadGraph;
\r
18 import org.simantics.db.Resource;
\r
19 import org.simantics.db.WriteGraph;
\r
20 import org.simantics.db.exception.DatabaseException;
\r
21 import org.simantics.modeling.ModelingResources;
\r
22 import org.simantics.structural2.modelingRules.CPConnection;
\r
23 import org.simantics.structural2.modelingRules.CPConnectionJoin;
\r
24 import org.simantics.structural2.modelingRules.CPTerminal;
\r
25 import org.simantics.structural2.modelingRules.IConnectionPoint;
\r
27 public class Mapping implements IMapping {
\r
29 Resource componentMap;
\r
30 Resource connectionMap;
\r
31 Resource mapsToConnection;
\r
32 Resource invConnectionMap;
\r
33 Resource componentTypeMap;
\r
34 Resource connectionRelationMap;
\r
36 public Mapping(ReadGraph g) throws DatabaseException {
\r
37 initializeRelations(g);
\r
40 protected void initializeRelations(ReadGraph g) throws DatabaseException {
\r
41 componentMap = g.getResource(ModelingResources.URIs.ElementToComponent);
\r
42 connectionMap = g.getResource(ModelingResources.URIs.DiagramConnectionToConnection);
\r
43 mapsToConnection = g.getResource(ModelingResources.URIs.MapsToConnection);
\r
44 invConnectionMap = g.getResource(ModelingResources.URIs.ConnectionToDiagramConnection);
\r
45 componentTypeMap = g.getResource(ModelingResources.URIs.SymbolToComponentType);
\r
46 connectionRelationMap = g.getResource(ModelingResources.URIs.DiagramConnectionRelationToConnectionRelation);
\r
50 public Resource mapComponentType(ReadGraph g, Resource componentType)
\r
51 throws DatabaseException {
\r
52 return g.getPossibleObject(componentType, componentTypeMap);
\r
55 public Collection<Resource> mapToConnections(ReadGraph g, Resource connection)
\r
56 throws DatabaseException {
\r
57 return g.getObjects(connection, mapsToConnection);
\r
61 public Resource mapConnection(ReadGraph g, Resource connection)
\r
62 throws DatabaseException {
\r
63 return g.getPossibleObject(connection, connectionMap);
\r
67 public Resource invMapConnection(WriteGraph g, Resource connection)
\r
68 throws DatabaseException {
\r
69 return g.getPossibleObject(connection, invConnectionMap);
\r
73 public Resource mapConnectionRelation(ReadGraph g, Resource relation)
\r
74 throws DatabaseException {
\r
75 return g.getPossibleObject(relation, connectionRelationMap);
\r
79 public Resource mapComponent(ReadGraph g, Resource component)
\r
80 throws DatabaseException {
\r
81 return g.getPossibleObject(component, componentMap);
\r
85 public IConnectionPoint mapConnectionPoint(ReadGraph g,
\r
86 IConnectionPoint cp) throws DatabaseException {
\r
87 if(cp instanceof CPConnection) {
\r
88 CPConnection ccp = (CPConnection)cp;
\r
89 Resource connection = mapConnection(g, ccp.connection);
\r
90 if (connection == null)
\r
92 return new CPConnection(connection);
\r
94 if(cp instanceof CPTerminal)
\r
95 return mapCPTerminal(g, (CPTerminal)cp);
\r
96 if(cp instanceof CPConnectionJoin)
\r
102 public int mapToConnectionPoints(ReadGraph g, IConnectionPoint cp,
\r
103 Collection<IConnectionPoint> result) throws DatabaseException {
\r
104 if(cp instanceof CPConnection) {
\r
105 CPConnection ccp = (CPConnection)cp;
\r
106 Collection<Resource> connections = mapToConnections(g, ccp.connection);
\r
107 int size = connections.size();
\r
109 for (Resource connection : connections)
\r
110 result.add(new CPConnection(connection));
\r
113 if(cp instanceof CPTerminal) {
\r
114 IConnectionPoint mcp = mapCPTerminal(g, (CPTerminal) cp);
\r
117 return mcp != null ? 1 : 0;
\r
119 if(cp instanceof CPConnectionJoin) {
\r
126 protected IConnectionPoint mapCPTerminal(ReadGraph g, CPTerminal ccp) throws DatabaseException {
\r
127 if(ccp.component == null)
\r
129 Resource component = mapComponent(g, ccp.component);
\r
130 if(component == null)
\r
132 Resource connectionRelation = mapConnectionRelation(g, ccp.relation);
\r
133 if(connectionRelation == null)
\r
135 return new CPTerminal(
\r