]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.g2d/src/org/simantics/g2d/diagram/impl/DummyDiagramMutator.java
Migrated source code from Simantics SVN
[simantics/platform.git] / bundles / org.simantics.g2d / src / org / simantics / g2d / diagram / impl / DummyDiagramMutator.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.g2d.diagram.impl;\r
13 \r
14 import java.util.HashMap;\r
15 import java.util.Map;\r
16 \r
17 import org.simantics.g2d.diagram.DiagramMutator;\r
18 import org.simantics.g2d.diagram.IDiagram;\r
19 import org.simantics.g2d.diagram.handler.ElementFactory;\r
20 import org.simantics.g2d.element.ElementClass;\r
21 import org.simantics.g2d.element.ElementClassProviders;\r
22 import org.simantics.g2d.element.ElementClasses;\r
23 import org.simantics.g2d.element.ElementHints;\r
24 import org.simantics.g2d.element.IElement;\r
25 import org.simantics.g2d.element.IElementClassProvider;\r
26 import org.simantics.g2d.element.handler.impl.StaticObjectAdapter;\r
27 import org.simantics.g2d.element.impl.Element;\r
28 import org.simantics.g2d.elementclass.FlagClass;\r
29 import org.simantics.g2d.elementclass.connection.ConnectionClass;\r
30 import org.simantics.utils.datastructures.cache.ProvisionException;\r
31 \r
32 /**\r
33  * Diagrams manipulation requires a DiagramMutator. This one works without any\r
34  * backend system.\r
35  * \r
36  * @author Marko Luukkainen <marko.luukkainen@vtt.fi>\r
37  * @author Tuukka Lehtonen\r
38  */\r
39 public class DummyDiagramMutator implements DiagramMutator {\r
40 \r
41     public static final IElementClassProvider DEFAULT_PROVIDER = ElementClassProviders.mappedProvider(\r
42             ElementClasses.CONNECTION, ConnectionClass.CLASS.newClassWith(new StaticObjectAdapter(new Object())),\r
43             ElementClasses.FLAG, FlagClass.FLAGCLASS.newClassWith(new StaticObjectAdapter(new Object()))\r
44     );\r
45 \r
46     IElementClassProvider classProvider;\r
47 \r
48     private final Map<IElement, Object> map = new HashMap<IElement, Object>();\r
49 \r
50     private final IDiagram diagram;\r
51 \r
52     public DummyDiagramMutator(IDiagram diagram) {\r
53         this(diagram, DEFAULT_PROVIDER);\r
54     }\r
55 \r
56     public DummyDiagramMutator(IDiagram diagram, IElementClassProvider classProvider) {\r
57         this.diagram = diagram;\r
58         this.classProvider = classProvider;\r
59 \r
60         ensureClassProvision(ElementClasses.CONNECTION);\r
61         ensureClassProvision(ElementClasses.FLAG);\r
62     }\r
63 \r
64     private void ensureClassProvision(Object key) {\r
65         ElementClass ec = classProvider.get(key);\r
66         if (ec == null)\r
67             throw new ProvisionException();\r
68     }\r
69 \r
70     @Override\r
71     public void synchronizeHintsToBackend(IElement element) {\r
72         // No backend, nothing to synchronize\r
73     }\r
74 \r
75     @Override\r
76     public void synchronizeElementOrder() {\r
77         // No backend, nothing to synchronize\r
78     }\r
79 \r
80     @Override\r
81     public void register(IElement element, Object object) {\r
82         // No point in registering anything.\r
83         map.put(element, object);\r
84     }\r
85 \r
86     private IElement spawn(ElementClass clazz) {\r
87         ElementFactory ef = diagram.getDiagramClass().getAtMostOneItemOfClass(ElementFactory.class);\r
88         if (ef != null)\r
89             return ef.spawnNew(clazz);\r
90         return Element.spawnNew(clazz);\r
91     }\r
92 \r
93     @Override\r
94     public IElement newElement(ElementClass clazz) {\r
95         IElement element = spawn(clazz);\r
96         element.setHint(ElementHints.KEY_OBJECT, new Object());\r
97         return element;\r
98     }\r
99 \r
100     @Override\r
101     public void modifyTransform(IElement element) {\r
102     }\r
103 \r
104     @Override\r
105     public void commit() {\r
106         map.clear();\r
107     }\r
108 \r
109     @Override\r
110     public void clear() {\r
111         map.clear();\r
112     }\r
113 \r
114     @SuppressWarnings("unchecked")\r
115     @Override\r
116     public <T> T backendObject(IElement element) {\r
117         return (T) map.get(element);\r
118     }\r
119 \r
120 }\r