1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.editor.model;
35
36 import info.magnolia.ui.vaadin.gwt.client.editor.dom.MgnlArea;
37 import info.magnolia.ui.vaadin.gwt.client.editor.dom.MgnlElement;
38 import info.magnolia.ui.vaadin.gwt.client.editor.dom.MgnlPage;
39 import info.magnolia.ui.vaadin.gwt.client.shared.AbstractElement;
40
41 import java.util.HashMap;
42 import java.util.LinkedList;
43 import java.util.List;
44 import java.util.Map;
45
46 import com.google.gwt.dom.client.Element;
47 import com.google.gwt.dom.client.Node;
48
49
50
51
52
53 public class ModelImpl implements Model {
54
55 public MgnlPage rootPage;
56 public List<MgnlArea> rootAreas = new LinkedList<>();
57 private Map<MgnlElement, List<Element>> elements = new HashMap<>();
58 private Map<Element, MgnlElement> mgnlElements = new HashMap<>();
59 private boolean moving = false;
60
61 @Override
62 public void addElement(MgnlElement mgnlElement, Element element) {
63
64 if (mgnlElement == null || element == null) {
65 return;
66 }
67 mgnlElements.put(element, mgnlElement);
68
69 if (elements.get(mgnlElement) != null) {
70 elements.get(mgnlElement).add(element);
71 } else {
72 List<Element> elList = new LinkedList<Element>();
73 elList.add(element);
74 elements.put(mgnlElement, elList);
75 }
76 }
77
78 @Override
79 public void addElements(MgnlElement mgnlElement, Element element) {
80
81 if (mgnlElement == null || element == null) {
82 return;
83 }
84 addElement(mgnlElement, element);
85
86 for (int i = 0; i < element.getChildCount(); i++) {
87 Node childNode = element.getChild(i);
88 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
89 Element child = childNode.cast();
90 addElements(mgnlElement, child);
91 }
92 }
93 }
94
95 @Override
96 public MgnlElement getMgnlElement(Element element) {
97 return mgnlElements.get(element);
98
99 }
100
101 @Override
102 public MgnlElement getMgnlElement(AbstractElement element) {
103 if (element == null) {
104 return null;
105 }
106
107 for (final MgnlElement mgnlElement : mgnlElements.values()) {
108 if (element.equals(mgnlElement.getTypedElement())) {
109 return mgnlElement;
110 }
111 }
112
113 return null;
114 }
115
116 @Override
117 public MgnlPage getRootPage() {
118 return rootPage;
119 }
120
121 @Override
122 public void setRootPage(MgnlPage rootPage) {
123 this.rootPage = rootPage;
124 }
125
126 @Override
127 public void addRootArea(MgnlArea area) {
128 this.rootAreas.add(area);
129 }
130
131 @Override
132 public List<MgnlArea> getRootAreas() {
133 return rootAreas;
134 }
135 @Override
136 public void removeMgnlElement(MgnlElement mgnlElement) {
137
138
139 if (mgnlElements.containsValue(mgnlElement)) {
140 while (mgnlElements.values().remove(mgnlElement)) {
141 ;
142 }
143 }
144 elements.remove(mgnlElement);
145
146
147
148 if (rootAreas.contains(mgnlElement)) {
149 rootAreas.remove(mgnlElement);
150 for (MgnlArea childNode : mgnlElement.getAreas()) {
151 rootAreas.add(childNode);
152 }
153 }
154 }
155
156
157
158
159 @Override
160 public void reset() {
161 this.rootAreas.forEach(MgnlArea::removeBars);
162 this.elements = new HashMap<>();
163 this.mgnlElements = new HashMap<>();
164 this.rootPage = null;
165 this.rootAreas = new LinkedList<>();
166 this.moving = false;
167 }
168
169 @Override
170 public boolean isMoving() {
171 return moving;
172 }
173
174 @Override
175 public void setMoving(boolean moving) {
176 this.moving = moving;
177 }
178 }