1
2
3
4
5
6
7 package org.asyrinx.joey.gen.model;
8
9 import java.util.Collections;
10 import java.util.HashMap;
11 import java.util.Map;
12
13 import org.apache.commons.logging.Log;
14 import org.apache.commons.logging.LogFactory;
15 import org.asyrinx.brownie.core.lang.ClassUtils;
16
17 /***
18 * @author akima
19 */
20 public abstract class Element implements Cloneable {
21
22 /***
23 *
24 */
25 public Element() {
26 this(null, null);
27 }
28
29 /***
30 * @param parent
31 */
32 public Element(Element parent) {
33 this(parent, null);
34 }
35
36 /***
37 * @param name
38 */
39 public Element(String name) {
40 this(null, name);
41 }
42
43 /***
44 * @param parent
45 * @param name
46 */
47 public Element(Element parent, String name) {
48 this(parent, name, null);
49 }
50
51 /***
52 * @param parent
53 * @param name
54 */
55 public Element(Element parent, String name, String label) {
56 super();
57 this.name = name;
58 this.label = label;
59 this.setParentElement(parent);
60 }
61
62 public String getElementType() {
63 return ClassUtils.toShortClassName(this.getClass());
64 }
65
66 protected final Log log = LogFactory.getLog(this.getClass());
67
68
69
70
71
72
73 public Object clone() throws CloneNotSupportedException {
74 return super.clone();
75 }
76
77 public String getFullName() {
78 return (getParentElement() == null) ? getName() : getParentElement().getFullName() + "." + getName();
79 }
80
81 private Element parent = null;
82
83 /***
84 * @return Returns the parent.
85 */
86 public Element getParentElement() {
87 return parent;
88 }
89
90 /***
91 * @param parent
92 * The parent to set.
93 */
94 protected void setParentElement(Element parent) {
95 if (this.parent == parent)
96 return;
97 this.parent = (parent == null) ? null : (parent.isEntity()) ? parent : parent.getParentElement();
98 if (this.parent != null)
99 this.parent.add(this);
100 }
101
102 public boolean isEntity() {
103 return true;
104 }
105
106 public void add(Element element) {
107 if (element instanceof ElementSet) {
108
109 } else {
110 throw new UnsupportedOperationException("element must not be ." + element.getClass().getName() + " @"
111 + this.getClass().getName());
112 }
113 }
114
115 private String name = null;
116
117 private String label = null;
118
119 private String description = null;
120
121 private Map options = new HashMap();
122
123 /***
124 * @return Returns the label.
125 */
126 public String getLabel() {
127 return label;
128 }
129
130 /***
131 * @param label
132 * The label to set.
133 */
134 public void setLabel(String label) {
135 this.label = label;
136 }
137
138 /***
139 * @return Returns the name.
140 */
141 public String getName() {
142 return name;
143 }
144
145 /***
146 * @param name
147 * The name to set.
148 */
149 public void setName(String name) {
150 this.name = name;
151 }
152
153 /***
154 * @return Returns the description.
155 */
156 public String getDescription() {
157 return description;
158 }
159
160 /***
161 * @param description
162 * The description to set.
163 */
164 public void setDescription(String description) {
165 this.description = description;
166 }
167
168 /***
169 * @return Returns the options.
170 */
171 public Map getOptions() {
172 return options;
173 }
174
175 /***
176 * @param options
177 * The options to set.
178 */
179 public void setOptions(Map options) {
180 this.options = (options != null) ? options : Collections.EMPTY_MAP;
181 }
182
183 public Object getOption(String key) {
184 final Object option = getOptions().get(key);
185 return (option != null) ? option : (getParentElement() == null) ? null : getParentElement().getOption(key);
186 }
187
188 private Element original = null;
189
190 /***
191 * @return Returns the original.
192 */
193 public Element getOriginal() {
194 return original;
195 }
196
197 /***
198 * @param original
199 * The original to set.
200 */
201 public void setOriginal(Element original) {
202 this.original = original;
203 }
204 }