1
2
3
4
5
6
7 package org.asyrinx.joey.gen.model.java;
8
9 import java.util.ArrayList;
10 import java.util.HashMap;
11 import java.util.HashSet;
12 import java.util.Iterator;
13 import java.util.List;
14 import java.util.Map;
15 import java.util.Set;
16
17 import org.asyrinx.joey.gen.model.Element;
18
19 /***
20 * @author akima
21 */
22 public class Entity extends Element implements Type {
23
24 /***
25 *
26 */
27 public Entity() {
28 super();
29 }
30
31 /***
32 * @param parent
33 */
34 public Entity(AppDomain parent) {
35 super(parent);
36 }
37
38 /***
39 * @param name
40 */
41 public Entity(String name) {
42 super(name);
43 }
44
45 /***
46 * @param parent
47 * @param name
48 */
49 public Entity(AppDomain parent, String name) {
50 super(parent, name);
51 }
52
53 /***
54 * @param parent
55 * @param name
56 * @param label
57 */
58 public Entity(Element parent, String name, String label) {
59 super(parent, name, label);
60 }
61
62 private final PropertySet properties = new PropertySet(this);
63
64 private final EntityKeySet keys = new EntityKeySet(this);
65
66 private final ReferenceSet references = new ReferenceSet(this);
67
68 private final Set imports = new HashSet();
69
70
71
72
73
74
75 public AppDomain getParent() {
76 return (AppDomain) super.getParentElement();
77 }
78
79
80
81
82
83
84 public String getFqn() {
85 return getPackage() + PACKAGE_SEPARATER + getName();
86 }
87
88 public String getPackage() {
89 return getPackageName();
90 }
91
92 public boolean isPrimitive() {
93 return false;
94 }
95
96 public Type toClass() {
97 return this;
98 }
99
100 public Type toPrimitive() {
101 return null;
102 }
103
104
105
106
107
108
109 public TypeCategory getCategory() {
110 return TypeCategory.OTHERS;
111 }
112
113
114
115
116
117
118 public boolean isNumber() {
119 return getCategory() == TypeCategory.NUMBER;
120 }
121
122
123
124
125
126
127 public void add(Element element) {
128 if (element instanceof Property)
129 properties.add((Property) element);
130 else if (element instanceof Reference)
131 references.add((Reference) element);
132 else if (element instanceof EntityKey)
133 keys.add((EntityKey) element);
134 else
135 super.add(element);
136 }
137
138 private String packageTemplate = null/package-summary.html">ong> String packageTemplate = null;
139
140 /***
141 * @return Returns the packageName.
142 */
143 public String getPackageTemplate() {
144 return</strong> packageTemplate;
145 }
146
147 /***
148 * @param packageName
149 * The packageName to set.
150 */
151 public void setPackageTemplate(String packageTemplate) {/package-summary.html">ong> void setPackageTemplate(String packageTemplate) {
152 this.packageTemplate = packageTemplate;
153 }
154
155 /***
156 * @return Returns the packageName.
157 */
158 public String getPackageName() {
159 return getPackage(PackageType.ENTITY.getName());
160 }
161
162 /***
163 * @param packageName
164 * The packageName to set.
165 */
166 public void setPackageName(String packageName) {/package-summary.html">ong> void setPackageName(String packageName) {
167 setPackage(PackageType.ENTITY.getName(), packageName);
168 }
169
170 private final Map packageNames = new HashMap()/package-summary.html">ong> final Map packageNames = new HashMap();
171
172 public String getPackage(String packageType) {/package-summary.html">ong> String getPackage(String packageType) {
173 return</strong> (String) packageNames.get(packageType);
174 }
175
176 public void setPackage(String type, String value) {
177 packageNames.put(type, value);
178 }
179
180 /***
181 * @return Returns the properties.
182 */
183 public PropertySet getProperties() {
184 return properties;
185 }
186
187 /***
188 * @return Returns the keys.
189 */
190 public EntityKeySet getKeys() {
191 return keys;
192 }
193
194 /***
195 * @return Returns the references.
196 */
197 public ReferenceSet getReferences() {
198 return references;
199 }
200
201 /***
202 * @return
203 */
204 public EntityKey getPrimaryKey() {
205 if (this.getSuperClass() != null)
206 return this.getSuperClass().getPrimaryKey();
207 else
208 return keys.getPrimaryKey();
209 }
210
211 /***
212 * @param property
213 * @return
214 */
215 public List getReferencesContainedAsLocal(Property property) {
216 return this.getReferences().getReferencesContainedAsLocal(property);
217 }
218
219 /***
220 * @param javaClass
221 * @return
222 */
223 public List getReferencesContainedAsForeign(Entity javaClass) {
224 return this.getReferences().getReferencesContainedAsForeign(javaClass);
225 }
226
227 /***
228 * @param property
229 * @return
230 */
231 public List getReferencesContainedAsForeign(Property property) {
232 return getParent().getReferencesContainedAsForeign(property);
233 }
234
235 public List getReferreds() {
236 return getParent().getReferencesContainedAsForeign(this);
237 }
238
239 public Set getReferredEntities() {
240 final List referreds = this.getReferreds();
241 final Set result = new HashSet();
242 for (Iterator i = referreds.iterator(); i.hasNext();) {
243 final Reference reference = (Reference) i.next();
244 result.add(reference.getParent());
245 }
246 return result;
247 }
248
249 /***
250 * @param javaClass
251 * @param dest
252 */
253 public void findReferencesContainedAsForeign(Entity javaClass, List dest) {
254 getReferences().findReferencesContainedAsForeign(javaClass, dest);
255 }
256
257 /***
258 * @param javaClass
259 * @param result
260 */
261 public void findReferencesContainedAsLocal(Entity javaClass, List dest) {
262 getReferences().findReferencesContainedAsLocal(javaClass, dest);
263 if (getSuperClass() != null) {
264 getSuperClass().findReferencesContainedAsLocal(javaClass, dest);
265 }
266 }
267
268 /***
269 * @return Returns the imports.
270 */
271 public Set getImports() {
272 return imports;
273 }
274
275 private String superClassName = null;
276
277 private Entity superClass = null;
278
279 /***
280 * @return Returns the superClass.
281 */
282 public Entity getSuperClass() {
283 return superClass;
284 }
285
286 /***
287 * @param superClass
288 * The superClass to set.
289 */
290 public void setSuperClass(Entity superClass) {
291 this.superClass = superClass;
292 }
293
294 /***
295 * @return Returns the superClassName.
296 */
297 public String getSuperClassName() {
298 return superClassName;
299 }
300
301 /***
302 * @param superClassName
303 * The superClassName to set.
304 */
305 public void setSuperClassName(String superClassName) {
306 this.superClassName = superClassName;
307 }
308
309 public List getPropertiesExtended() {
310 if (this.getSuperClass() == null)
311 return new ArrayList();
312 final List result = new ArrayList(this.getSuperClass().getPropertiesExtended());
313 result.addAll(this.getSuperClass().getProperties().toList());
314 return result;
315 }
316
317 public List getPropertiesAll() {
318 final List result = getPropertiesExtended();
319 result.addAll(this.getProperties().toList());
320 return result;
321 }
322
323 /***
324 * @return
325 */
326 public List getConstructorParams() {
327 final List result = (this.getSuperClass() != null) ? this.getSuperClass()
328 .getConstructorParams() : new ArrayList();
329 final Set used = new HashSet();
330 for (Iterator i = getProperties().iterator(); i.hasNext();) {
331 final Property property = (Property) i.next();
332 addReferenceOfProperty(result, used, property);
333 if (used.contains(property))
334 continue;
335 if (property.isExtended())
336 continue;
337 result.add(property);
338 used.add(property);
339 }
340 return result;
341 }
342
343 /***
344 * @param result
345 * @param used
346 * @param property
347 */
348 private void addReferenceOfProperty(final List result, final Set used, final Property property) {
349 for (Iterator i = property.getReferencesContainedAsLocal().iterator(); i.hasNext();) {
350 final Reference reference = (Reference) i.next();
351 if (used.contains(reference))
352 continue;
353 result.add(reference);
354 used.add(reference);
355 addPropertyAsUsed(used, reference);
356 }
357 }
358
359 /***
360 * @param used
361 * @param reference
362 */
363 private void addPropertyAsUsed(final Set used, final Reference reference) {
364 for (Iterator iterator = reference.iterator(); iterator.hasNext();) {
365 final ReferenceEntry entry = (ReferenceEntry) iterator.next();
366 used.add(entry.getLocal());
367 }
368 }
369
370 public List getSuperClasses() {
371 final List result;
372 if (this.getSuperClass() != null) {
373 result = this.getSuperClass().getSuperClasses();
374 } else {
375 result = new ArrayList();
376 }
377 result.add(this);
378 return result;
379 }
380
381 /***
382 * getConstructorParamsと同じものを使いたいんだけど、名前が一緒だと
383 * 変かなと思って適当に名前をつけてみた。表示に使用されるプロパティ&参照。
384 *
385 * @return
386 */
387 public List getPresentProperties() {
388 return getConstructorParams();
389 }
390
391 public Set getReferenceEntities() {
392 final Set result = new HashSet();
393 for (Iterator i = getReferences().iterator(); i.hasNext();) {
394 final Reference reference = (Reference) i.next();
395 result.add(reference.getReferenceClass());
396 }
397 return result;
398 }
399
400 private final List assignableEntities = new ArrayList();
401
402 public List getAssignableEntities() {
403 return assignableEntities;
404 }
405
406 public Set getReferenceEntitiesAll() {
407 final Set result = new HashSet();
408 for (Entity current = this; current != null; current = current.getSuperClass())
409 result.addAll(current.getReferenceEntities());
410 return result;
411 }
412
413 public List getReferencesAll() {
414 final List result = new ArrayList();
415 for (Entity current = this; current != null; current = current.getSuperClass())
416 result.addAll(current.getReferences().toList());
417 return result;
418 }
419
420 private Property captionProperty = null;
421
422 public Property getCaptionProperty() {
423 return captionProperty;
424 }
425
426 public void setCaptionProperty(Property captionProperty) {
427 this.captionProperty = captionProperty;
428 }
429
430 public List getReferredAll() {
431 final List result = new ArrayList();
432 for (Entity current = this; current != null; current = current.getSuperClass())
433 result.addAll(current.getReferreds());
434 return result;
435 }
436
437 public Set getReferredEntitiesAll() {
438 final Set result = new HashSet();
439 for (Entity current = this; current != null; current = current.getSuperClass())
440 result.addAll(current.getReferredEntities());
441 return result;
442 }
443
444 public Set getRelatedEntities() {
445 final Set result = new HashSet();
446 result.addAll(getReferenceEntities());
447 result.addAll(getReferredEntities());
448 return result;
449 }
450
451 public Set getRelatedEntitiesAll() {
452 final Set result = new HashSet();
453 result.addAll(getReferenceEntitiesAll());
454 result.addAll(getReferredEntitiesAll());
455 return result;
456 }
457
458 public boolean isAssignable(Entity entity) {
459 for (Entity current = this; current != null; current = current.getSuperClass()) {
460 if (current == entity)
461 return true;
462 }
463 return false;
464 }
465
466 private String interfaces = null;
467
468 public String getInterfaces() {
469 return interfaces;
470 }
471
472 public void setInterfaces(String interfaces) {
473 this.interfaces = interfaces;
474 }
475 }