]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling.ui/src/org/simantics/modeling/ui/modelBrowser/model/Parameter.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling.ui / src / org / simantics / modeling / ui / modelBrowser / model / Parameter.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2010 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  *******************************************************************************/\r
12 package org.simantics.modeling.ui.modelBrowser.model;\r
13 \r
14 import org.eclipse.jface.resource.ImageDescriptor;\r
15 import org.simantics.browsing.ui.common.node.IModifiable;\r
16 import org.simantics.browsing.ui.content.Labeler.Modifier;\r
17 import org.simantics.db.ReadGraph;\r
18 import org.simantics.db.Resource;\r
19 import org.simantics.db.Session;\r
20 import org.simantics.db.Statement;\r
21 import org.simantics.db.WriteGraph;\r
22 import org.simantics.db.common.primitiverequest.RelatedValueImplied;\r
23 import org.simantics.db.common.request.WriteRequest;\r
24 import org.simantics.db.common.utils.NameUtils;\r
25 import org.simantics.db.exception.DatabaseException;\r
26 import org.simantics.layer0.Layer0;\r
27 import org.simantics.modeling.ModelingResources;\r
28 import org.simantics.modeling.ui.Activator;\r
29 import org.simantics.structural.stubs.StructuralResource2;\r
30 \r
31 @Deprecated\r
32 public class Parameter extends Node implements IModifiable {\r
33 \r
34     Resource instance;\r
35     Resource relation;\r
36     Resource connectionType;\r
37     Resource connectionDirection;\r
38     boolean isLeaf;\r
39 \r
40     public Resource getTerminalRelation(ReadGraph graph, Resource relation) throws DatabaseException {\r
41         StructuralResource2 sr = StructuralResource2.getInstance(graph);\r
42         for(Resource bound : graph.getObjects(relation, sr.IsBoundBy)) {\r
43             if(graph.isInstanceOf(bound, sr.Connection)) {\r
44                 for(Statement terminalInverse : graph.getStatements(bound, sr.IsConnectedTo)) {\r
45                     if(graph.isInstanceOf(terminalInverse.getObject(), sr.Component)) {\r
46                         return graph.getInverse(terminalInverse.getPredicate());\r
47                     }\r
48                 }\r
49             }\r
50         }\r
51         return null;\r
52     }\r
53 \r
54     public Resource getConnectionType(ReadGraph graph, Resource connectionPoint) throws DatabaseException {\r
55         StructuralResource2 sr = StructuralResource2.getInstance(graph);\r
56         ModelingResources mr = ModelingResources.getInstance(graph);\r
57         for(Resource bound : graph.getObjects(relation, sr.IsBoundBy)) {\r
58             if(graph.isInstanceOf(bound, sr.Connection)) {\r
59                 Resource diagramConn = graph.getPossibleObject(bound, mr.ConnectionToDiagramConnection);\r
60                 if(diagramConn != null) {\r
61                     return graph.getPossibleObject(diagramConn, sr.HasConnectionType);\r
62                 }\r
63             }\r
64         }\r
65         return null;\r
66     }\r
67 \r
68     public Parameter(ReadGraph g, Resource resource, Resource instance, boolean isLeaf) throws DatabaseException {\r
69         super(resource);\r
70         this.instance = instance;\r
71         StructuralResource2 sr = StructuralResource2.getInstance(g);\r
72         this.relation = g.getSingleObject(resource, sr.Binds);\r
73 //              this.connectionType = g.getPossibleObject(resource, sr.HasConnectionType);\r
74         this.connectionDirection = g.getPossibleObject(resource, sr.HasConnectionDirection);\r
75         this.isLeaf = isLeaf;\r
76         this.connectionType = getConnectionType(g, relation);\r
77     }\r
78 \r
79     @Override\r
80     public String getLabel(ReadGraph g) throws DatabaseException {\r
81         Layer0 b = Layer0.getInstance(g);\r
82         String name = g.getPossibleRelatedValue(relation, b.HasName);\r
83         if(name == null)\r
84             return "Unnamed parameter";\r
85         if(connectionType != null) {\r
86             name = name + " : " + NameUtils.getSafeName(g, connectionType);\r
87             if(connectionDirection != null) {\r
88                 StructuralResource2 sr = StructuralResource2.getInstance(g);\r
89                 name = name + ", " +\r
90                 (sr.InputDirection.equals(connectionDirection) ? "in" :\r
91                     sr.OutputDirection.equals(connectionDirection) ? "out" :\r
92                         NameUtils.getSafeName(g, connectionDirection));\r
93             }\r
94         }\r
95         return name;\r
96     }\r
97 \r
98     @Override\r
99     public ImageDescriptor getImage(ReadGraph g) throws DatabaseException {\r
100         /*StructuralResource2 sr = StructuralResource2.getInstance(g);\r
101         if (g.isInstanceOf(resource, sr.LiteralVariable))\r
102             return Activator.VARIABLE_ICON;*/\r
103         return Activator.OPEN_CONNECTION_ICON;\r
104     }\r
105 \r
106     @Override\r
107     public boolean equals(Object obj) {\r
108         if(this == obj)\r
109             return true;\r
110         if(obj == null)\r
111             return false;\r
112         if(!getClass().equals(obj.getClass()))\r
113             return false;\r
114         Parameter other = (Parameter)obj;\r
115         return resource.equals(other.resource)\r
116         && relation.equals(other.relation)\r
117         && (instance == null ? other.instance==null : instance.equals(other.instance))\r
118         && isLeaf == other.isLeaf\r
119         && (connectionType == null ? other.connectionType == null : connectionType.equals(other.connectionType));\r
120     }\r
121 \r
122     @Override\r
123     public int hashCode() {\r
124         return ((getClass().hashCode()*31 + relation.hashCode()) * 31  +\r
125                 (instance == null ? 0 : instance.hashCode()))*31 + resource.hashCode();\r
126     }    \r
127 \r
128     @Override\r
129     public Modifier getModifier(final Session session, String columnId) {\r
130         return new Modifier() {\r
131 \r
132             @Override\r
133             public String getValue() {\r
134                 try {\r
135                         Layer0 b = Layer0.getInstance(session);\r
136                     return session.syncRequest(new RelatedValueImplied<String>(relation, b.HasName));\r
137                 } catch (DatabaseException e) {\r
138                     e.printStackTrace();\r
139                     return "";\r
140                 }\r
141             }\r
142 \r
143             @Override\r
144             public String isValid(String label) {\r
145                 return null;\r
146             }\r
147 \r
148             @Override\r
149             public void modify(final String label) {\r
150                 session.asyncRequest(new WriteRequest() {\r
151                     @Override\r
152                     public void perform(WriteGraph graph) throws DatabaseException {\r
153                         Layer0 b = Layer0.getInstance(graph);\r
154                         graph.claimLiteral(relation, b.HasName, label);\r
155                     }\r
156 \r
157                 });\r
158             }\r
159 \r
160         };\r
161     }\r
162 }\r