--- /dev/null
+/*******************************************************************************\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