]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - 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
diff --git a/bundles/org.simantics.modeling/src/org/simantics/modeling/rules/Mapping.java b/bundles/org.simantics.modeling/src/org/simantics/modeling/rules/Mapping.java
new file mode 100644 (file)
index 0000000..0db8a9a
--- /dev/null
@@ -0,0 +1,141 @@
+/*******************************************************************************\r
+ * Copyright (c) 2007, 2014 Association for Decentralized Information Management\r
+ * in 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
+ *     Semantum Oy - #5290\r
+ *******************************************************************************/\r
+package org.simantics.modeling.rules;\r
+\r
+import java.util.Collection;\r
+\r
+import org.simantics.db.ReadGraph;\r
+import org.simantics.db.Resource;\r
+import org.simantics.db.WriteGraph;\r
+import org.simantics.db.exception.DatabaseException;\r
+import org.simantics.modeling.ModelingResources;\r
+import org.simantics.structural2.modelingRules.CPConnection;\r
+import org.simantics.structural2.modelingRules.CPConnectionJoin;\r
+import org.simantics.structural2.modelingRules.CPTerminal;\r
+import org.simantics.structural2.modelingRules.IConnectionPoint;\r
+\r
+public class Mapping implements IMapping {\r
+\r
+       Resource componentMap;\r
+       Resource connectionMap;\r
+       Resource mapsToConnection;\r
+       Resource invConnectionMap;\r
+       Resource componentTypeMap;\r
+       Resource connectionRelationMap;\r
+               \r
+       public Mapping(ReadGraph g) throws DatabaseException {\r
+               initializeRelations(g);\r
+       }\r
+\r
+       protected void initializeRelations(ReadGraph g) throws DatabaseException {\r
+               componentMap = g.getResource(ModelingResources.URIs.ElementToComponent);\r
+               connectionMap = g.getResource(ModelingResources.URIs.DiagramConnectionToConnection);\r
+               mapsToConnection = g.getResource(ModelingResources.URIs.MapsToConnection);\r
+               invConnectionMap = g.getResource(ModelingResources.URIs.ConnectionToDiagramConnection);\r
+               componentTypeMap = g.getResource(ModelingResources.URIs.SymbolToComponentType);         \r
+               connectionRelationMap = g.getResource(ModelingResources.URIs.DiagramConnectionRelationToConnectionRelation);\r
+       }\r
+\r
+       @Override\r
+       public Resource mapComponentType(ReadGraph g, Resource componentType)\r
+                       throws DatabaseException {\r
+               return g.getPossibleObject(componentType, componentTypeMap);\r
+       }\r
+\r
+       public Collection<Resource> mapToConnections(ReadGraph g, Resource connection)\r
+                       throws DatabaseException {\r
+               return g.getObjects(connection, mapsToConnection);\r
+       }\r
+\r
+       @Override\r
+       public Resource mapConnection(ReadGraph g, Resource connection)\r
+                       throws DatabaseException {\r
+               return g.getPossibleObject(connection, connectionMap);\r
+       }\r
+       \r
+       @Override\r
+       public Resource invMapConnection(WriteGraph g, Resource connection) \r
+                       throws DatabaseException {\r
+               return g.getPossibleObject(connection, invConnectionMap);\r
+       }\r
+       \r
+       @Override\r
+       public Resource mapConnectionRelation(ReadGraph g, Resource relation)\r
+                       throws DatabaseException {\r
+               return g.getPossibleObject(relation, connectionRelationMap);\r
+       }\r
+\r
+       @Override\r
+       public Resource mapComponent(ReadGraph g, Resource component)\r
+               throws DatabaseException {\r
+               return g.getPossibleObject(component, componentMap);\r
+       }\r
+       \r
+       @Override\r
+       public IConnectionPoint mapConnectionPoint(ReadGraph g,\r
+                       IConnectionPoint cp) throws DatabaseException {\r
+               if(cp instanceof CPConnection) {\r
+                       CPConnection ccp = (CPConnection)cp;\r
+                       Resource connection = mapConnection(g, ccp.connection);\r
+                       if (connection == null)\r
+                               return null;\r
+                       return new CPConnection(connection);\r
+               }\r
+               if(cp instanceof CPTerminal)\r
+                       return mapCPTerminal(g, (CPTerminal)cp);\r
+               if(cp instanceof CPConnectionJoin)\r
+                       return cp;\r
+               return null;\r
+       }       \r
+\r
+       @Override\r
+       public int mapToConnectionPoints(ReadGraph g, IConnectionPoint cp,\r
+                       Collection<IConnectionPoint> result) throws DatabaseException {\r
+               if(cp instanceof CPConnection) {\r
+                       CPConnection ccp = (CPConnection)cp;\r
+                       Collection<Resource> connections = mapToConnections(g, ccp.connection);\r
+                       int size = connections.size();\r
+                       if (size > 0)\r
+                               for (Resource connection : connections)\r
+                                       result.add(new CPConnection(connection));\r
+                       return size;\r
+               }\r
+               if(cp instanceof CPTerminal) {\r
+                       IConnectionPoint mcp = mapCPTerminal(g, (CPTerminal) cp);\r
+                       if (mcp != null)\r
+                               result.add(mcp);\r
+                       return mcp != null ? 1 : 0;\r
+               }\r
+               if(cp instanceof CPConnectionJoin) {\r
+                       result.add(cp);\r
+                       return 1;\r
+               }\r
+               return 0;\r
+       }\r
+\r
+       protected IConnectionPoint mapCPTerminal(ReadGraph g, CPTerminal ccp) throws DatabaseException {\r
+           if(ccp.component == null)\r
+               return null;\r
+               Resource component = mapComponent(g, ccp.component);\r
+               if(component == null)\r
+                       return null;\r
+               Resource connectionRelation = mapConnectionRelation(g, ccp.relation);\r
+               if(connectionRelation == null)\r
+                       return null;\r
+               return new CPTerminal(\r
+                               component,\r
+                               connectionRelation\r
+                       );\r
+       }\r
+\r
+}\r