]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.modeling/src/org/simantics/modeling/PropertyVariablesImpl.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.modeling / src / org / simantics / modeling / PropertyVariablesImpl.java
1 /*******************************************************************************\r
2  * Copyright (c) 2007, 2011 Association for Decentralized Information Management in\r
3  * 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;\r
13 \r
14 import java.util.ArrayList;\r
15 import java.util.List;\r
16 \r
17 import org.eclipse.core.runtime.IAdaptable;\r
18 import org.simantics.db.ReadGraph;\r
19 import org.simantics.db.exception.DatabaseException;\r
20 import org.simantics.db.layer0.SelectionHints;\r
21 import org.simantics.db.layer0.variable.Variable;\r
22 import org.simantics.utils.datastructures.hints.HintContext;\r
23 \r
24 /**\r
25  * @author Tuukka Lehtonen\r
26  */\r
27 public class PropertyVariablesImpl extends HintContext implements PropertyVariables, IAdaptable {\r
28 \r
29     private final Variable container;\r
30     private final Variable configuration;\r
31     private final Variable visualized;\r
32     private final Variable modified;\r
33     private final String   suffix;\r
34 \r
35     public PropertyVariablesImpl(Variable container, Variable visualized, Variable modified) {\r
36         this(container, null, visualized, modified, null);\r
37     }\r
38 \r
39     public PropertyVariablesImpl(Variable container, Variable visualized, Variable modified, String suffix) {\r
40         this(container, null, visualized, modified, suffix);\r
41     }\r
42 \r
43     public PropertyVariablesImpl(Variable container, Variable configuration, Variable visualized, Variable modified) {\r
44         this(container, configuration, visualized, modified, null);\r
45     }\r
46 \r
47     public PropertyVariablesImpl(Variable container, Variable configuration, Variable visualized, Variable modified, String suffix) {\r
48         if (visualized == null)\r
49             throw new NullPointerException("null visualized variable");\r
50         this.container = container;\r
51         this.configuration = configuration;\r
52         this.visualized = visualized;\r
53         this.modified = modified;\r
54         this.suffix = suffix;\r
55         setHintWithoutNotification(SelectionHints.KEY_MAIN, visualized);\r
56         setHintWithoutNotification(SelectionHints.KEY_SELECTION_PROPERTY, visualized);\r
57     }\r
58 \r
59     @Override\r
60     public Variable getContainer() {\r
61         return container;\r
62     }\r
63 \r
64     public Variable getConfiguration() {\r
65         return configuration;\r
66     }\r
67 \r
68     @Override\r
69     public Variable getVisualVariable() {\r
70         return visualized;\r
71     }\r
72 \r
73     @Override\r
74     public Variable getModificationVariable() {\r
75         return modified;\r
76     }\r
77 \r
78     @Override\r
79     public String getSuffix() {\r
80         return suffix;\r
81     }\r
82 \r
83     @Override\r
84     public PropertyVariables withSuffix(String suffix) {\r
85         return new PropertyVariablesImpl(container, visualized, modified, suffix);\r
86     }\r
87 \r
88     @Override\r
89     public PropertyVariables resolved(ReadGraph graph) throws DatabaseException {\r
90         if (suffix == null)\r
91             return this;\r
92 \r
93         Variable c = configuration;\r
94         Variable v = visualized;\r
95         Variable m = modified;\r
96         if (c != null)\r
97             c = c.browsePossible(graph, suffix);\r
98         if (v != null)\r
99             v = v.browsePossible(graph, suffix);\r
100         if (v == null)\r
101             return null;\r
102         if (m != null)\r
103             m = m.browsePossible(graph, suffix);\r
104         return new PropertyVariablesImpl(container, c, v, m, null);\r
105     }\r
106 \r
107     @Override\r
108     public int hashCode() {\r
109         final int prime = 31;\r
110         int result = 1;\r
111         result = prime * result + ((container == null) ? 0 : container.hashCode());\r
112         result = prime * result + ((configuration == null) ? 0 : configuration.hashCode());\r
113         result = prime * result + ((modified == null) ? 0 : modified.hashCode());\r
114         result = prime * result + ((visualized == null) ? 0 : visualized.hashCode());\r
115         return result;\r
116     }\r
117 \r
118     @Override\r
119     public boolean equals(Object obj) {\r
120         if (this == obj)\r
121             return true;\r
122         if (obj == null)\r
123             return false;\r
124         if (getClass() != obj.getClass())\r
125             return false;\r
126         PropertyVariablesImpl other = (PropertyVariablesImpl) obj;\r
127         if (container == null) {\r
128             if (other.container != null)\r
129                 return false;\r
130         } else if (!container.equals(other.container))\r
131             return false;\r
132         if (configuration == null) {\r
133             if (other.configuration != null)\r
134                 return false;\r
135         } else if (!configuration.equals(other.configuration))\r
136             return false;\r
137         if (modified == null) {\r
138             if (other.modified != null)\r
139                 return false;\r
140         } else if (!modified.equals(other.modified))\r
141             return false;\r
142         if (visualized == null) {\r
143             if (other.visualized != null)\r
144                 return false;\r
145         } else if (!visualized.equals(other.visualized))\r
146             return false;\r
147         return true;\r
148     }\r
149 \r
150     @SuppressWarnings("rawtypes")\r
151     @Override\r
152     public Object getAdapter(Class adapter) {\r
153         if (adapter == Variable.class)\r
154             return visualized;\r
155         return null;\r
156     }\r
157 \r
158     public static List<PropertyVariables> resolve(ReadGraph graph, List<PropertyVariables> vars) throws DatabaseException {\r
159         List<PropertyVariables> result = new ArrayList<PropertyVariables>(vars.size());\r
160         for (PropertyVariables var : vars) {\r
161             PropertyVariables v = var.resolved(graph);\r
162             if (v != null)\r
163                 result.add(v);\r
164         }\r
165         return result;\r
166     }\r
167 \r
168 }\r