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.templating.editor.client.model;
35
36 import info.magnolia.templating.editor.client.dom.MgnlElement;
37 import info.magnolia.templating.editor.client.model.focus.FocusModel;
38 import info.magnolia.templating.editor.client.model.focus.FocusModelImpl3;
39 import info.magnolia.templating.editor.client.widget.controlbar.AbstractBar;
40 import info.magnolia.templating.editor.client.widget.controlbar.AreaEndBar;
41 import info.magnolia.templating.editor.client.widget.overlay.AbstractOverlay;
42 import info.magnolia.templating.editor.client.widget.placeholder.AreaPlaceHolder;
43 import info.magnolia.templating.editor.client.widget.placeholder.ComponentPlaceHolder;
44
45 import java.util.HashMap;
46 import java.util.LinkedList;
47 import java.util.List;
48 import java.util.Map;
49 import com.google.gwt.dom.client.Node;
50
51 import com.google.gwt.dom.client.Element;
52
53
54
55
56 public class ModelStorage {
57
58 private static ModelStorage storage = null;
59
60 private FocusModel focusModel = new FocusModelImpl3(this);
61
62 private Map<MgnlElement, AbstractBar> editBars = new HashMap<MgnlElement, AbstractBar>();
63 private Map<MgnlElement, AbstractOverlay> overlays = new HashMap<MgnlElement, AbstractOverlay>();
64 private Map<MgnlElement, List<Element>> elements = new HashMap<MgnlElement, List<Element>>();
65 private Map<Element, MgnlElement> mgnlElements = new HashMap<Element, MgnlElement>();
66 private Map<MgnlElement, AreaPlaceHolder> areaPlaceHolders = new HashMap<MgnlElement, AreaPlaceHolder>();
67 private Map<MgnlElement, ComponentPlaceHolder> componentPlaceHolders = new HashMap<MgnlElement, ComponentPlaceHolder>();
68 private Map<MgnlElement, AreaEndBar> areaEndBars = new HashMap<MgnlElement, AreaEndBar>();
69
70
71 public List<MgnlElement> rootElements = new LinkedList<MgnlElement>();
72
73
74 private MgnlElement selectedMgnlElement = null;
75
76 public static ModelStorage getInstance() {
77 if (storage == null) {
78 storage = new ModelStorage();
79 }
80 return storage;
81 }
82
83 public void addOverlay(MgnlElement mgnlElement, AbstractOverlay overlayWidget) {
84 overlays.put(mgnlElement, overlayWidget);
85 }
86
87 public AbstractOverlay getOverlay(MgnlElement mgnlElement) {
88 return overlays.get(mgnlElement);
89 }
90
91 public void addEditBar(MgnlElement mgnlElement, AbstractBar editBar) {
92 editBars.put(mgnlElement, editBar);
93 }
94
95 public AbstractBar getEditBar(MgnlElement mgnlElement) {
96 return editBars.get(mgnlElement);
97 }
98
99 public void addElement(MgnlElement mgnlElement, Element element) {
100
101 if (mgnlElement == null || element == null) {
102 return;
103 }
104 mgnlElements.put(element, mgnlElement);
105
106 if (elements.get(mgnlElement) != null) {
107 elements.get(mgnlElement).add(element);
108 }
109 else {
110 List<Element> elList = new LinkedList<Element>();
111 elList.add(element);
112 elements.put(mgnlElement, elList);
113 }
114 }
115
116 public void addElements(MgnlElement mgnlElement, Element element) {
117
118 if (mgnlElement == null || element == null) {
119 return;
120 }
121 addElement(mgnlElement, element);
122
123 for (int i = 0; i < element.getChildCount(); i++) {
124 Node childNode = element.getChild(i);
125 if (childNode.getNodeType() == Node.ELEMENT_NODE) {
126 Element child = childNode.cast();
127 addElements(mgnlElement, child);
128 }
129 }
130 }
131
132 public MgnlElement getMgnlElement(Element element) {
133 MgnlElement mgnlElement = mgnlElements.get(element);
134 while (mgnlElement == null && element.hasParentElement()) {
135 element = element.getParentElement();
136 mgnlElement = mgnlElements.get(element);
137 }
138 return mgnlElement;
139 }
140
141 public List<Element> getElements(MgnlElement mgnlElement) {
142 return elements.get(mgnlElement);
143 }
144
145 public void addRoot(MgnlElement boundary) {
146 this.rootElements.add(boundary);
147 }
148
149 public List<MgnlElement> getRootElements() {
150 return rootElements;
151 }
152
153 public void setSelectedMgnlElement(MgnlElement selectedMgnlElement) {
154 this.selectedMgnlElement = selectedMgnlElement;
155 }
156
157 public MgnlElement getSelectedMgnlElement() {
158 return selectedMgnlElement;
159 }
160
161 public FocusModel getFocusModel() {
162 return focusModel;
163 }
164
165 public void addAreaPlaceHolder(MgnlElement mgnlElement, AreaPlaceHolder placeHolder) {
166 areaPlaceHolders.put(mgnlElement, placeHolder);
167 }
168
169 public AreaPlaceHolder getAreaPlaceHolder(MgnlElement mgnlElement) {
170 return areaPlaceHolders.get(mgnlElement);
171 }
172
173 public void addComponentPlaceHolder(MgnlElement mgnlElement, ComponentPlaceHolder placeHolder) {
174 componentPlaceHolders.put(mgnlElement, placeHolder);
175 }
176
177 public ComponentPlaceHolder getComponentPlaceHolder(MgnlElement mgnlElement) {
178 return componentPlaceHolders.get(mgnlElement);
179 }
180
181 public void addAreaEndBar(MgnlElement mgnlElement, AreaEndBar areaEndBar) {
182 areaEndBars.put(mgnlElement, areaEndBar);
183 }
184
185 public AreaEndBar getAreaEndBar(MgnlElement mgnlElement) {
186 return areaEndBars.get(mgnlElement);
187 }
188
189 public void removeMgnlElement(MgnlElement mgnlElement) {
190
191
192 if (mgnlElements.containsValue(mgnlElement)) {
193 while(mgnlElements.values().remove(mgnlElement));
194 }
195 elements.remove(mgnlElement);
196
197
198 if (rootElements.contains(mgnlElement)) {
199 rootElements.remove(mgnlElement);
200 rootElements.addAll(mgnlElement.getChildren());
201 }
202 }
203
204 public MgnlElement findMgnlElementByContentId(String contentId) {
205 for (MgnlElement element : elements.keySet()) {
206 if(contentId.equals(element.getAttribute("content"))){
207 return element;
208 }
209 }
210 return null;
211 }
212
213 }