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.dom;
35
36 import static info.magnolia.ui.vaadin.gwt.client.editor.jsni.JavascriptUtils.getI18nMessage;
37
38 import info.magnolia.cms.security.operations.OperationPermissionDefinition;
39 import info.magnolia.rendering.template.AreaDefinition;
40 import info.magnolia.ui.vaadin.gwt.client.editor.event.EditAreaEvent;
41 import info.magnolia.ui.vaadin.gwt.client.editor.event.NewAreaEvent;
42 import info.magnolia.ui.vaadin.gwt.client.editor.event.NewComponentEvent;
43 import info.magnolia.ui.vaadin.gwt.client.shared.AreaElement;
44 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.AreaEndBar;
45 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.ComponentPlaceHolder;
46 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.listener.AreaListener;
47
48 import com.google.gwt.dom.client.Element;
49 import com.google.gwt.event.shared.EventBus;
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66 public class MgnlArea extends MgnlElement implements AreaListener {
67
68 public static final String EDITOR_INIT_CLASS_NAME = "init";
69 private AreaEndBar areaEndBar;
70 private ComponentPlaceHolder componentPlaceHolder;
71 private Element componentMarkerElement;
72 private EventBus eventBus;
73
74
75
76
77 public MgnlArea(MgnlElement parent, EventBus eventBus) {
78 super(parent);
79 this.eventBus = eventBus;
80 }
81
82 private AreaEndBar getAreaEndBar() {
83 return areaEndBar;
84 }
85
86 public void setAreaEndBar(AreaEndBar areaEndBar) {
87 this.areaEndBar = areaEndBar;
88 }
89
90 private ComponentPlaceHolder getComponentPlaceHolder() {
91 return componentPlaceHolder;
92 }
93
94 public void setComponentPlaceHolder(ComponentPlaceHolder componentPlaceHolder) {
95 this.componentPlaceHolder = componentPlaceHolder;
96 }
97
98 public void setComponentMarkerElement(Element componentElement) {
99 this.componentMarkerElement = componentElement;
100 }
101
102 public Element getComponentMarkerElement() {
103 return componentMarkerElement;
104 }
105
106 @Override
107 public AreaElement getTypedElement() {
108 String availableComponents = getAttribute("availableComponents");
109 AreaElement area = new AreaElement(getAttribute("workspace"), getAttribute("path"), getAttribute("dialog"), availableComponents);
110
111 boolean areaIsTypeSingle = "single".equals(getAttribute("type"));
112 boolean areaHasChildComponents = getComponents().size() > 0;
113 boolean optional = Boolean.parseBoolean(getAttribute("optional"));
114 boolean created = Boolean.parseBoolean(getAttribute("created"));
115 boolean hasAvailableComponents = availableComponents != null && !availableComponents.isEmpty();
116 boolean addible = true;
117 if (getAttributes().containsKey(OperationPermissionDefinition.ADDIBLE)) {
118 addible = Boolean.parseBoolean(getAttribute(OperationPermissionDefinition.ADDIBLE));
119 }
120 area.setAddible(addible && hasAvailableComponents && !(optional && !created) && !(areaIsTypeSingle && areaHasChildComponents) && !isMaxComponentsReached());
121
122 return area;
123 }
124
125 private boolean isMaxComponentsReached() {
126 boolean showAddButton = Boolean.parseBoolean(getAttribute("showAddButton"));
127 boolean showNewComponentArea = Boolean.parseBoolean(getAttribute("showNewComponentArea"));
128
129 return showNewComponentArea && !showAddButton;
130 }
131
132 @Override
133 public void createOptionalArea() {
134 eventBus.fireEvent(new NewAreaEvent(getTypedElement()));
135 }
136
137 @Override
138 public void editArea() {
139 eventBus.fireEvent(new EditAreaEvent(getTypedElement()));
140 }
141
142 @Override
143 public void createNewComponent() {
144 eventBus.fireEvent(new NewComponentEvent(getTypedElement()));
145 }
146
147 @Override
148 public boolean hasAddButton() {
149 boolean optional = Boolean.parseBoolean(getAttribute("optional"));
150 boolean created = Boolean.parseBoolean(getAttribute("created"));
151
152 return optional && !created;
153 }
154
155 @Override
156 public boolean hasEditButton() {
157 boolean optional = Boolean.parseBoolean(getAttribute("optional"));
158 boolean created = Boolean.parseBoolean(getAttribute("created"));
159 boolean dialog = null != getAttribute("dialog");
160
161 if (dialog) {
162
163 if (!optional || (optional && created)) {
164 return true;
165 }
166 }
167 return false;
168 }
169
170 @Override
171 public boolean hasAddComponentButton() {
172 return Boolean.parseBoolean(getAttribute("showAddButton"));
173 }
174
175 @Override
176 public String getLabel() {
177 String label = getAttribute("label");
178 boolean optional = Boolean.parseBoolean(getAttribute("optional"));
179 return label + ((optional) ? " (optional)" : "");
180 }
181
182 @Override
183 public boolean isBoxPlaceHolder() {
184 Element marker = getComponentMarkerElement();
185 boolean onlyBar = (marker != null && marker.getAttribute(AreaDefinition.CMS_ADD).equals("bar"));
186 return !onlyBar;
187 }
188
189 @Override
190 public String getPlaceHolderLabel() {
191 String label = getAttribute("label");
192 String labelString;
193
194
195 if (isMaxComponentsReached()) {
196 labelString = getI18nMessage("buttons.component.maximum.js");
197 } else {
198 labelString = getI18nMessage("buttons.component.new.js");
199 if (label != null && !label.isEmpty()) {
200 labelString = getI18nMessage("buttons.new.js") + " " + label + " " + getI18nMessage("buttons.component.js");
201 }
202 }
203 return labelString;
204 }
205
206 public void removeFocus() {
207 if (getControlBar() != null) {
208 getControlBar().removeFocus();
209 }
210
211 if (getAreaEndBar() != null) {
212 getAreaEndBar().removeFocus();
213 }
214 }
215
216 public void setFocus(boolean child) {
217 if (getControlBar() != null) {
218 getControlBar().setFocus(child);
219 }
220 if (getAreaEndBar() != null) {
221 getAreaEndBar().setFocus(child);
222 }
223 }
224
225 public void setVisible(boolean visible) {
226 if (getControlBar() != null) {
227 getControlBar().setVisible(visible);
228 }
229 if (getAreaEndBar() != null) {
230 getAreaEndBar().setVisible(visible);
231 }
232 }
233
234 public void setPlaceHolderVisible(boolean visible) {
235 if (getComponentPlaceHolder() != null) {
236 getComponentPlaceHolder().setVisible(visible);
237 }
238 }
239
240 public void toggleInitFocus(boolean visible) {
241 if (visible) {
242 getControlBar().addStyleName(EDITOR_INIT_CLASS_NAME);
243 getAreaEndBar().addStyleName(EDITOR_INIT_CLASS_NAME);
244 getAreaEndBar().addStyleName(EDITOR_INIT_CLASS_NAME);
245 } else {
246 getControlBar().removeStyleName(EDITOR_INIT_CLASS_NAME);
247 getAreaEndBar().removeStyleName(EDITOR_INIT_CLASS_NAME);
248 }
249 }
250
251 public void onDragStart(boolean isDrag) {
252 if (getComponentPlaceHolder() != null) {
253 getComponentPlaceHolder().setStyleName("moveOngoing", isDrag);
254 }
255 }
256 }