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.processor;
35
36 import info.magnolia.ui.vaadin.gwt.client.editor.dom.MgnlElement;
37 import info.magnolia.ui.vaadin.gwt.client.editor.model.Model;
38 import info.magnolia.ui.vaadin.gwt.client.widget.controlbar.AbstractBar;
39
40 import com.google.gwt.dom.client.Element;
41 import com.google.gwt.dom.client.Node;
42
43
44
45
46
47 public abstract class AbstractMgnlElementProcessor {
48
49 private MgnlElement mgnlElement;
50
51 private Model model;
52
53 private AbstractBar editBar;
54
55 public AbstractMgnlElementProcessor(Model model, MgnlElement mgnlElement) {
56 this.model = model;
57 this.setMgnlElement(mgnlElement);
58 }
59
60 public abstract void process();
61
62 protected void attachWidget() {
63 attach();
64 addToModel();
65 }
66
67 public void attach() {
68
69 if (getMgnlElement().getEditElement() != null) {
70 Element parent = getMgnlElement().getEditElement();
71 parent.insertFirst(getEditBar().getElement());
72 } else if (getMgnlElement().getFirstElement() != null && getMgnlElement().getFirstElement() == getMgnlElement().getLastElement()) {
73 attach(getMgnlElement());
74 } else {
75 attach(getMgnlElement().getStartComment());
76 }
77 getEditBar().onAttach();
78 }
79
80 public void attach(MgnlElement mgnlElement) {
81 Element element = mgnlElement.getFirstElement();
82 if (element != null) {
83 if (element.hasTagName("DIV")) {
84 element.insertFirst(getEditBar().getElement());
85 } else {
86 final Node parentNode = element.getParentNode();
87 parentNode.insertBefore(getEditBar().getElement(), element);
88 }
89 }
90 }
91
92 public void attach(Element element) {
93 Node parentNode = element.getParentNode();
94 parentNode.insertAfter(getEditBar().getElement(), element);
95 }
96
97 protected void addToModel() {
98 getModel().addElements(getMgnlElement(), getEditBar().getElement());
99 getMgnlElement().setControlBar(getEditBar());
100 }
101
102 public void setMgnlElement(MgnlElement mgnlElement) {
103 this.mgnlElement = mgnlElement;
104 }
105
106 public MgnlElement getMgnlElement() {
107 return mgnlElement;
108 }
109
110 public Model getModel() {
111 return model;
112 }
113
114 protected void setEditBar(AbstractBar editBar) {
115 this.editBar = editBar;
116 }
117
118 public AbstractBar getEditBar() {
119 return editBar;
120 }
121
122 }