1
2
3
4
5
6
7 package org.asyrinx.joey.gen.model.java;
8
9 import java.util.ArrayList;
10 import java.util.Iterator;
11 import java.util.List;
12 import java.util.Set;
13
14 import org.apache.commons.lang.StringUtils;
15 import org.asyrinx.joey.gen.hibernate.Cascade;
16 import org.asyrinx.joey.gen.model.ElementSet;
17
18 /***
19 * @author takeshi
20 */
21 public class Reference extends ElementSet implements Parameter {
22
23 /***
24 * @param parent
25 */
26 public Reference(Entity parent) {
27 super(parent);
28 }
29
30 /***
31 * @param parent
32 * @param name
33 */
34 public Reference(Entity parent, String name) {
35 super(parent, name);
36 }
37
38 private Entity referenceClass = null;
39
40 private ReferenceType type = ReferenceType.NORMAL;
41
42
43
44
45
46
47 public boolean isEntity() {
48 return true;
49 }
50
51
52
53
54
55
56 public Entity getParent() {
57 return (Entity) super.getParentElement();
58 }
59
60 public void add(ReferenceEntry entry) {
61 super.add(entry);
62 }
63
64
65
66
67
68
69 public boolean contains(ReferenceEntry entry) {
70 return super.contains(entry);
71 }
72
73
74
75
76
77
78 public ReferenceEntry getEntry(int index) {
79 return (ReferenceEntry) super.getElement(index);
80 }
81
82
83
84
85
86
87 public ReferenceEntry getEntry(String name) {
88 return (ReferenceEntry) super.getElement(name);
89 }
90
91
92
93
94
95
96 public ReferenceEntry removeEntry(String name) {
97 return (ReferenceEntry) super.removeElement(name);
98 }
99
100 /***
101 * @return
102 */
103 public String getReferenceClassName() {
104 return (getReferenceClass() == null) ? null : getReferenceClass().getName();
105 }
106
107 /***
108 * @return Returns the referenceClass.
109 */
110 public Entity getReferenceClass() {
111 return referenceClass;
112 }
113
114 /***
115 * @param referenceClass
116 * The referenceClass to set.
117 */
118 public void setReferenceClass(Entity referenceClass) {
119 this.referenceClass = referenceClass;
120 }
121
122 /***
123 * @param property
124 * @return
125 */
126 public boolean containsAsLocal(Property property) {
127 for (Iterator i = this.iterator(); i.hasNext();) {
128 final ReferenceEntry entry = (ReferenceEntry) i.next();
129 if (entry.getLocal() == property)
130 return true;
131 }
132 return false;
133 }
134
135 /***
136 * @param property
137 * @return
138 */
139 public boolean containsAsForeign(Property property) {
140 for (Iterator i = this.iterator(); i.hasNext();) {
141 final ReferenceEntry entry = (ReferenceEntry) i.next();
142 if (entry.getForeign() == property)
143 return true;
144 }
145 return false;
146 }
147
148 public String getPropertyNameInReferred(boolean plural) {
149 final String className = getParent().getName();
150 String relatedByCol = "";
151 final Set otherRefs = this.getParent().getParent().findReferences(getParent(),
152 getReferenceClass());
153 if (otherRefs.size() > 1) {
154 for (Iterator i = this.iterator(); i.hasNext();) {
155 final ReferenceEntry entry = (ReferenceEntry) i.next();
156 if (!entry.getLocal().getReferencesContainedAsLocal().isEmpty())
157 relatedByCol = relatedByCol + entry.getLocal().getCapitalizedName();
158 }
159 }
160 if (StringUtils.isEmpty(relatedByCol)) {
161 return (plural) ? StringUtils.uncapitalize(className + "s") : StringUtils
162 .uncapitalize(className);
163 }
164
165 final String s = ((plural) ? "s" : "") + "RelatedBy";
166 return StringUtils.uncapitalize(className) + s + relatedByCol;
167 }
168
169 public String getPropertyNameInReferred() {
170 return getPropertyNameInReferred(true);
171 }
172
173 public String getPropertyNameInLocal() {
174 final Entity foreignClass = this.getReferenceClass();
175 final String className = foreignClass.getName();
176 String relCol = "";
177 final List otherRefs = new ArrayList();
178 for (Entity current = this.getParent(); current != null; current = current.getSuperClass()) {
179 otherRefs.addAll(current.getReferencesContainedAsForeign(foreignClass));
180 }
181 if (otherRefs.size() > 1) {
182 for (Iterator i = this.iterator(); i.hasNext();) {
183 final ReferenceEntry entry = (ReferenceEntry) i.next();
184 if ((!entry.getLocal().getReferencesContainedAsLocal().isEmpty())
185 || (getReferenceClass() == this.getParent()))
186 relCol = relCol + entry.getLocal().getCapitalizedName();
187 }
188 }
189 if (StringUtils.isNotEmpty(relCol))
190 relCol = "RelatedBy" + relCol;
191 return StringUtils.uncapitalize(className + relCol);
192 }
193
194 /***
195 * @return Returns the type.
196 */
197 public ReferenceType getType() {
198 return type;
199 }
200
201 /***
202 * @param type
203 * The type to set.
204 */
205 public void setType(ReferenceType type) {
206 this.type = type;
207 }
208
209 public boolean isForward() {
210 return getType() != ReferenceType.EXTENDS;
211 }
212
213 public boolean isBackward() {
214 return getType() == ReferenceType.BIDIRECTION;
215 }
216
217
218
219
220
221
222 public String getParamName() {
223 return this.getPropertyNameInLocal();
224 }
225
226
227
228
229
230
231 public Type getParamType() {
232 return this.getReferenceClass();
233 }
234
235 private Cascade cascade = null;
236
237 public Cascade getCascade() {
238 return cascade;
239 }
240
241 public void setCascade(Cascade cascade) {
242 this.cascade = cascade;
243 }
244
245 public String getCaption() {
246 final StringBuffer result = new StringBuffer();
247 result.append(getParent().getName());
248 result.append("-->");
249 result.append(getReferenceClass().getName());
250 result.append("[");
251 for (Iterator i = this.iterator(); i.hasNext();) {
252 final ReferenceEntry entry = (ReferenceEntry) i.next();
253 result.append(entry.getLocal().getName());
254 result.append("-->");
255 result.append(entry.getForeign().getName());
256 if (i.hasNext())
257 result.append(" ");
258 }
259 result.append("]");
260 return result.toString();
261 }
262
263
264
265
266
267
268 public String toString() {
269 return getCaption();
270 }
271
272 }