1
28 package demo.view.uml;
29
30 import y.geom.YPoint;
31 import y.view.Arrow;
32 import y.view.EdgeRealizer;
33 import y.view.GenericNodeRealizer;
34 import y.view.LineType;
35 import y.view.NodeLabel;
36 import y.view.NodePort;
37 import y.view.NodeRealizer;
38 import y.view.NodeScaledPortLocationModel;
39 import y.view.PolyLineEdgeRealizer;
40 import y.view.ShapePortConfiguration;
41 import y.view.SimpleUserDataHandler;
42 import y.view.YLabel;
43
44 import java.awt.Color;
45 import java.util.Map;
46
47
50 class UmlRealizerFactory {
51
52
53 private static final String CLASS_CONFIG_NAME = "com.yworks.umlDiagram.class";
54
55
56 public static final String LABEL_CONFIG_NAME = "com.yworks.umlDiagram.label";
57
58
59 private static final String DUMMY_NODE_PORT = "com.yworks.umlDiagram.dummyNodePort";
60
61
62 private static final String PROPERTY_MOUSE_OVER_BUTTON = "com.yworks.umlDiagram.style.mouseOverButton";
63
64
65 public static final int BUTTON_NONE = -1;
66
67
68 public static final int BUTTON_OPEN_CLOSE_ATTRIBUTE_SECTION = 0;
69
70
71 public static final int BUTTON_OPEN_CLOSE_OPERATION_SECTION = 1;
72
73
74 public static final int BUTTON_OPEN_CLOSE_CLASS_SECTIONS = 2;
75
76
77 public static final int BUTTON_ADD_ATTRIBUTE = 3;
78
79
80 public static final int BUTTON_ADD_OPERATION = 4;
81
82
83 public static final int BUTTON_SUB_ATTRIBUTE = 5;
84
85
86 public static final int BUTTON_SUB_OPERATION = 6;
87
88
89 private static final String PROPERTY_ATTRIBUTE_BUTTON_OPACITY = "com.yworks.umlDiagram.style.attributeButtonOpacity";
90
91
92 private static final String PROPERTY_OPERATION_BUTTON_OPACITY = "com.yworks.umlDiagram.style.operationButtonOpacity";
93
94
95 private static final String PROPERTY_SELECTION_OPACITY = "com.yworks.umlDiagram.style.selectionOpacity";
96
97
98 private static final String PROPERTY_NODE_OPACITY = "com.yworks.umlDiagram.style.nodeOpacity";
99
100
101 public static final int LIST_ATTRIBUTES = 0;
102
103
104 public static final int LIST_OPERATIONS = 1;
105
106
107 public static final float OPAQUE = 1.0f;
108
109
110 public static final float TRANSPARENT = 0.5f;
111
112 private static final Color COLOR_GREEN = new Color(34,139,34);
113 private static final Color COLOR_YELLOW = new Color(213, 255, 179);
114
115
116 public static final Color COLOR_FOREGROUND = COLOR_GREEN;
117
118
119 public static final Color COLOR_BACKGROUND = Color.WHITE;
120
121
122 public static final Color COLOR_SELECTION = COLOR_YELLOW;
123
124
125 public static final Color COLOR_BUTTON_BACKGROUND_ACTIVE = COLOR_YELLOW;
126
127
128 public static final Color COLOR_BUTTON_BACKGROUND_BLANK = Color.WHITE;
129
130
131 public static final Color COLOR_BUTTON_FOREGROUND_ENABLED = COLOR_GREEN;
132
133
134 public static final Color COLOR_BUTTON_FOREGROUND_DISABLED = Color.LIGHT_GRAY;
135
136
137 public static final LineType LINE_EDGE_CREATION_BUTTON_OUTLINE = LineType.LINE_2;
138
139
140 public static final LineType LINE_TYPE_RELATION = LineType.LINE_1;
141
142
143 public static final LineType LINE_TYPE_INHERITANCE = LineType.DASHED_1;
144
145
146 public static final Color COLOR_EDGE = Color.DARK_GRAY;
147
148 static {
149 registerUmlClassConfiguration();
150 registerUmlClassLabelConfiguration();
151 registerDummyNodePortConfiguration();
152 }
153
154 private UmlRealizerFactory() {
155 }
156
157 private static void registerUmlClassConfiguration() {
158 final GenericNodeRealizer.Factory factory = GenericNodeRealizer.getFactory();
159 final Map implementations = factory.createDefaultConfigurationMap();
160 final GenericNodeRealizer.Painter configuration = new UmlClassConfiguration();
161 implementations.put(GenericNodeRealizer.Painter.class, configuration);
162 implementations.put(GenericNodeRealizer.GenericMouseInputEditorProvider.class, configuration);
163 implementations.put(GenericNodeRealizer.GenericSizeConstraintProvider.class, configuration);
164 implementations.put(GenericNodeRealizer.UserDataHandler.class, new SimpleUserDataHandler(SimpleUserDataHandler.EXCEPTION_ON_FAILURE));
165 factory.addConfiguration(CLASS_CONFIG_NAME, implementations);
166 }
167
168 private static void registerUmlClassLabelConfiguration() {
169 final YLabel.Factory factory = NodeLabel.getFactory();
170 final Map implementations = factory.createDefaultConfigurationMap();
171 implementations.put(YLabel.Painter.class, new UmlClassLabelPainter());
172 factory.addConfiguration(LABEL_CONFIG_NAME, implementations);
173 }
174
175 private static void registerDummyNodePortConfiguration() {
176 final ShapePortConfiguration configuration = new ShapePortConfiguration();
177 configuration.setSize(1, 1);
178 final NodePort.Factory factory = NodePort.getFactory();
179 final Map map = factory.createDefaultConfigurationMap();
180 map.put(NodePort.Painter.class, configuration);
181 map.put(NodePort.IntersectionTest.class, configuration);
182 map.put(NodePort.ContainsTest.class, configuration);
183 map.put(NodePort.BoundsProvider.class, configuration);
184 map.put(NodePort.UnionRectCalculator.class, configuration);
185 factory.addConfiguration(DUMMY_NODE_PORT, map);
186 }
187
188
195 public static NodeRealizer createClassRealizer() {
196 final GenericNodeRealizer realizer = new GenericNodeRealizer();
197 realizer.setConfiguration(CLASS_CONFIG_NAME);
198 realizer.setUserData(new UmlClassModel());
199 realizer.setFillColor(COLOR_BACKGROUND);
200 realizer.setFillColor2(COLOR_FOREGROUND);
201 realizer.setLineColor(COLOR_SELECTION);
202 realizer.setLineType(LineType.LINE_2);
203 setAttributeButtonOpacity(realizer, 0);
204 setOperationButtonOpacity(realizer, 0);
205 setSelectionOpacity(realizer, 0);
206 UmlClassLabelSupport.updateAllLabels(realizer);
207 UmlClassLabelSupport.updateRealizerSize(realizer);
208 return realizer;
209 }
210
211
214 public static EdgeRealizer createAssociationRealizer() {
215 final EdgeRealizer association = new PolyLineEdgeRealizer();
216 association.setLineColor(COLOR_EDGE);
217 association.setLineType(LINE_TYPE_RELATION);
218 association.setSourceArrow(Arrow.NONE);
219 association.setTargetArrow(Arrow.NONE);
220 return association;
221 }
222
223
226 public static EdgeRealizer createDependencyRealizer() {
227 final EdgeRealizer dependency = new PolyLineEdgeRealizer();
228 dependency.setLineColor(COLOR_EDGE);
229 dependency.setLineType(LINE_TYPE_INHERITANCE);
230 dependency.setSourceArrow(Arrow.NONE);
231 dependency.setTargetArrow(Arrow.PLAIN);
232 return dependency;
233 }
234
235
238 public static EdgeRealizer createGeneralizationRealizer() {
239 final EdgeRealizer generalization = new PolyLineEdgeRealizer();
240 generalization.setLineColor(COLOR_EDGE);
241 generalization.setLineType(LINE_TYPE_RELATION);
242 generalization.setSourceArrow(Arrow.NONE);
243 generalization.setTargetArrow(Arrow.WHITE_DELTA);
244 return generalization;
245 }
246
247
250 public static EdgeRealizer createRealizationRealizer() {
251 final EdgeRealizer realization = new PolyLineEdgeRealizer();
252 realization.setLineColor(COLOR_EDGE);
253 realization.setLineType(LINE_TYPE_INHERITANCE);
254 realization.setSourceArrow(Arrow.NONE);
255 realization.setTargetArrow(Arrow.WHITE_DELTA);
256 return realization;
257 }
258
259
262 public static EdgeRealizer createAggregationRealizer() {
263 final EdgeRealizer aggregation = new PolyLineEdgeRealizer();
264 aggregation.setLineColor(COLOR_EDGE);
265 aggregation.setLineType(LINE_TYPE_RELATION);
266 aggregation.setSourceArrow(Arrow.WHITE_DIAMOND);
267 aggregation.setTargetArrow(Arrow.NONE);
268 return aggregation;
269 }
270
271
274 public static EdgeRealizer createCompositionRealizer() {
275 final EdgeRealizer composition = new PolyLineEdgeRealizer();
276 composition.setLineColor(COLOR_EDGE);
277 composition.setLineType(LINE_TYPE_RELATION);
278 composition.setSourceArrow(Arrow.DIAMOND);
279 composition.setTargetArrow(Arrow.NONE);
280 return composition;
281 }
282
283
286 public static NodePort createDummyNodePort(NodeRealizer currentRealizer, YPoint portLocation) {
287 final NodePort port = new NodePort();
288 port.setModelParameter(new NodeScaledPortLocationModel().createParameter(currentRealizer, portLocation));
289 port.setConfiguration(DUMMY_NODE_PORT);
290 return port;
291 }
292
293
296 static boolean isRealization(EdgeRealizer er) {
297 return er.getTargetArrow() == Arrow.WHITE_DELTA && er.getLineType() == LINE_TYPE_RELATION;
298 }
299
300
303 static boolean isInheritance(EdgeRealizer er) {
304 return er.getTargetArrow() == Arrow.WHITE_DELTA;
305 }
306
307
308
321 public static int getMouseOverButton(final NodeRealizer context) {
322 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
323 final Object button = gnr.getStyleProperty(PROPERTY_MOUSE_OVER_BUTTON);
324 return button != null ? ((Integer)button).intValue() : BUTTON_NONE;
325 }
326
327
340 public static void setMouseOverButton(final NodeRealizer context, final int button) {
341 switch (button) {
342 case BUTTON_NONE:
343 case BUTTON_OPEN_CLOSE_ATTRIBUTE_SECTION:
344 case BUTTON_OPEN_CLOSE_OPERATION_SECTION:
345 case BUTTON_OPEN_CLOSE_CLASS_SECTIONS:
346 case BUTTON_ADD_ATTRIBUTE:
347 case BUTTON_ADD_OPERATION:
348 case BUTTON_SUB_ATTRIBUTE:
349 case BUTTON_SUB_OPERATION:
350 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
351 gnr.setStyleProperty(PROPERTY_MOUSE_OVER_BUTTON, new Integer(button));
352 return;
353 default:
354 throw new IllegalArgumentException("Unknown button " + button);
355 }
356 }
357
358
361 public static float getAttributeButtonOpacity(final NodeRealizer context) {
362 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
363 final Object opacity = gnr.getStyleProperty(PROPERTY_ATTRIBUTE_BUTTON_OPACITY);
364 return opacity != null ? ((Float)opacity).floatValue() : OPAQUE;
365 }
366
367
370 public static void setAttributeButtonOpacity(final NodeRealizer context, final float opacity) {
371 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
372 gnr.setStyleProperty(PROPERTY_ATTRIBUTE_BUTTON_OPACITY, new Float(opacity));
373 }
374
375
378 public static float getOperationButtonOpacity(final NodeRealizer context) {
379 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
380 final Object opacity = gnr.getStyleProperty(PROPERTY_OPERATION_BUTTON_OPACITY);
381 return opacity != null ? ((Float)opacity).floatValue() : OPAQUE;
382 }
383
384
387 public static void setOperationButtonOpacity(final NodeRealizer context, final float opacity) {
388 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
389 gnr.setStyleProperty(PROPERTY_OPERATION_BUTTON_OPACITY, new Float(opacity));
390 }
391
392
395 public static float getSelectionOpacity(final NodeRealizer context) {
396 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
397 final Object opacity = gnr.getStyleProperty(PROPERTY_SELECTION_OPACITY);
398 return opacity != null ? ((Float)opacity).floatValue() : OPAQUE;
399 }
400
401
404 public static void setSelectionOpacity(final NodeRealizer context, final float opacity) {
405 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
406 gnr.setStyleProperty(PROPERTY_SELECTION_OPACITY, new Float(opacity));
407 }
408
409
412 public static float getNodeOpacity(final NodeRealizer context) {
413 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
414 final Object opacity = gnr.getStyleProperty(PROPERTY_NODE_OPACITY);
415 return opacity != null ? ((Float) opacity).floatValue() : OPAQUE;
416 }
417
418
421 public static void setNodeOpacity(final NodeRealizer context, final float opacity) {
422 final GenericNodeRealizer gnr = (GenericNodeRealizer) context;
423 gnr.setStyleProperty(PROPERTY_NODE_OPACITY, new Float(opacity));
424 }
425 }
426