]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/rules/Mapping.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / rules / Mapping.java
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
8  *\r
9  * Contributors:\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
14 \r
15 import java.util.Collection;\r
16 \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
26 \r
27 public class Mapping implements IMapping {\r
28 \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
35                 \r
36         public Mapping(ReadGraph g) throws DatabaseException {\r
37                 initializeRelations(g);\r
38         }\r
39 \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
47         }\r
48 \r
49         @Override\r
50         public Resource mapComponentType(ReadGraph g, Resource componentType)\r
51                         throws DatabaseException {\r
52                 return g.getPossibleObject(componentType, componentTypeMap);\r
53         }\r
54 \r
55         public Collection<Resource> mapToConnections(ReadGraph g, Resource connection)\r
56                         throws DatabaseException {\r
57                 return g.getObjects(connection, mapsToConnection);\r
58         }\r
59 \r
60         @Override\r
61         public Resource mapConnection(ReadGraph g, Resource connection)\r
62                         throws DatabaseException {\r
63                 return g.getPossibleObject(connection, connectionMap);\r
64         }\r
65         \r
66         @Override\r
67         public Resource invMapConnection(WriteGraph g, Resource connection) \r
68                         throws DatabaseException {\r
69                 return g.getPossibleObject(connection, invConnectionMap);\r
70         }\r
71         \r
72         @Override\r
73         public Resource mapConnectionRelation(ReadGraph g, Resource relation)\r
74                         throws DatabaseException {\r
75                 return g.getPossibleObject(relation, connectionRelationMap);\r
76         }\r
77 \r
78         @Override\r
79         public Resource mapComponent(ReadGraph g, Resource component)\r
80                 throws DatabaseException {\r
81                 return g.getPossibleObject(component, componentMap);\r
82         }\r
83         \r
84         @Override\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
91                                 return null;\r
92                         return new CPConnection(connection);\r
93                 }\r
94                 if(cp instanceof CPTerminal)\r
95                         return mapCPTerminal(g, (CPTerminal)cp);\r
96                 if(cp instanceof CPConnectionJoin)\r
97                         return cp;\r
98                 return null;\r
99         }       \r
100 \r
101         @Override\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
108                         if (size > 0)\r
109                                 for (Resource connection : connections)\r
110                                         result.add(new CPConnection(connection));\r
111                         return size;\r
112                 }\r
113                 if(cp instanceof CPTerminal) {\r
114                         IConnectionPoint mcp = mapCPTerminal(g, (CPTerminal) cp);\r
115                         if (mcp != null)\r
116                                 result.add(mcp);\r
117                         return mcp != null ? 1 : 0;\r
118                 }\r
119                 if(cp instanceof CPConnectionJoin) {\r
120                         result.add(cp);\r
121                         return 1;\r
122                 }\r
123                 return 0;\r
124         }\r
125 \r
126         protected IConnectionPoint mapCPTerminal(ReadGraph g, CPTerminal ccp) throws DatabaseException {\r
127             if(ccp.component == null)\r
128                 return null;\r
129                 Resource component = mapComponent(g, ccp.component);\r
130                 if(component == null)\r
131                         return null;\r
132                 Resource connectionRelation = mapConnectionRelation(g, ccp.relation);\r
133                 if(connectionRelation == null)\r
134                         return null;\r
135                 return new CPTerminal(\r
136                                 component,\r
137                                 connectionRelation\r
138                         );\r
139         }\r
140 \r
141 }\r