]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/diagramEditor/DefaultTerminalNamingStrategy.java
Sync git svn branch with SVN repository r33406.
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / diagramEditor / DefaultTerminalNamingStrategy.java
1 /*******************************************************************************\r
2  * Copyright (c) 2012 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  *     Semantum Oy - initial API and implementation\r
11  *******************************************************************************/\r
12 package org.simantics.modeling.ui.diagramEditor;\r
13 \r
14 import org.simantics.db.ReadGraph;\r
15 import org.simantics.db.Resource;\r
16 import org.simantics.db.common.request.UnaryRead;\r
17 import org.simantics.db.common.utils.NameUtils;\r
18 import org.simantics.db.exception.DatabaseException;\r
19 import org.simantics.diagram.synchronization.graph.DiagramGraphUtil;\r
20 import org.simantics.g2d.diagram.participant.pointertool.TerminalUtil.TerminalInfo;\r
21 import org.simantics.g2d.element.ElementUtils;\r
22 import org.simantics.layer0.Layer0;\r
23 import org.simantics.modeling.ModelingResources;\r
24 import org.simantics.modeling.ui.diagramEditor.TerminalInformer.TerminalNamingStrategy;\r
25 import org.simantics.structural.stubs.StructuralResource2;\r
26 import org.simantics.structural2.queries.Terminal;\r
27 \r
28 /**\r
29  * @author Tuukka Lehtonen\r
30  */\r
31 public final class DefaultTerminalNamingStrategy implements TerminalNamingStrategy {\r
32 \r
33     @Override\r
34     public String getName(ReadGraph graph, TerminalInfo info) throws DatabaseException {\r
35         Terminal t = graph.syncRequest(new ResolveTerminal(info));\r
36         if (t == null)\r
37             return "Could not resolve component terminal";\r
38         return graph.syncRequest(new TerminalMessage(t));\r
39     }\r
40 \r
41     public static class ResolveTerminal extends UnaryRead<TerminalInfo, Terminal> {\r
42 \r
43         public ResolveTerminal(TerminalInfo parameter) {\r
44             super(parameter);\r
45         }\r
46 \r
47         @Override\r
48         public Terminal perform(ReadGraph graph) throws DatabaseException {\r
49             ModelingResources mr = ModelingResources.getInstance(graph);\r
50 \r
51             Object elementObject = ElementUtils.getObject(parameter.e);\r
52             if (!(elementObject instanceof Resource))\r
53                 return null;\r
54             Resource element = (Resource) elementObject;\r
55 \r
56             Resource diagramBindingRelation = DiagramGraphUtil.getConnectionPointOfTerminal(graph, parameter.t);\r
57             if (diagramBindingRelation == null)\r
58                 return null;\r
59 \r
60             Resource component = graph.getPossibleObject(element, mr.ElementToComponent);\r
61             Resource connectionRelation = graph.getPossibleObject(diagramBindingRelation, mr.DiagramConnectionRelationToConnectionRelation);\r
62             if (component == null || connectionRelation == null)\r
63                 return null;\r
64 \r
65             return new Terminal(component, connectionRelation);\r
66         }\r
67 \r
68     }\r
69 \r
70     static class TerminalMessage extends UnaryRead<Terminal, String> {\r
71 \r
72         public TerminalMessage(Terminal terminal) {\r
73             super(terminal);\r
74         }\r
75 \r
76         @Override\r
77         public String perform(ReadGraph graph) throws DatabaseException {\r
78             Layer0 L0 = Layer0.getInstance(graph);\r
79             StructuralResource2 STR = StructuralResource2.getInstance(graph);\r
80 \r
81             String name = getStringPropertyValue(graph, parameter.getRelation(), L0.HasName);\r
82             String label = getStringPropertyValue(graph, parameter.getRelation(), L0.HasLabel);\r
83             String componentName = NameUtils.getSafeName(graph, parameter.getComponent());\r
84             Resource componentType = graph.getPossibleType(parameter.getComponent(), STR.Component);\r
85             String componentTypeName = componentType != null\r
86                     ? getStringPropertyValue(graph, componentType, L0.HasLabel)\r
87                     : null;\r
88 \r
89             StringBuilder sb = new StringBuilder();\r
90             if (name.equals(label)) {\r
91                 sb.append(name);\r
92             } else {\r
93                 sb.append("(").append(name).append(") ").append(label);\r
94             }\r
95             sb.append(" [").append(componentName);\r
96             if (componentTypeName != null)\r
97                 sb.append(" : ").append(componentTypeName);\r
98             sb.append("]");\r
99 \r
100             return sb.toString();\r
101         }\r
102 \r
103         private String getStringPropertyValue(ReadGraph graph, Resource entity, Resource property) throws DatabaseException {\r
104             String name = graph.getPossibleRelatedValue2(entity, property);\r
105             return name != null ? name : NameUtils.getSafeName(graph, entity);\r
106         }\r
107 \r
108     }\r
109 \r
110 }\r