1   /*
2    * joey-gen and its relative products are published under the terms
3    * of the Apache Software License.
4    * 
5    * Created on 2004/08/14 20:53:09
6    */
7   package test.org.asyrinx.joey.gen.command.rdb2java.standard;
8   
9   import java.util.List;
10  
11  import junit.framework.TestCase;
12  
13  import org.asyrinx.joey.gen.command.rdb2java.standard.BasicBuilder;
14  import org.asyrinx.joey.gen.model.EnumerationEntry;
15  import org.asyrinx.joey.gen.model.java.AppDomain;
16  import org.asyrinx.joey.gen.model.java.Entity;
17  import org.asyrinx.joey.gen.model.java.EntityKey;
18  import org.asyrinx.joey.gen.model.java.JavaEnumeration;
19  import org.asyrinx.joey.gen.model.java.Parameter;
20  import org.asyrinx.joey.gen.model.java.Property;
21  import org.asyrinx.joey.gen.model.java.Reference;
22  import org.asyrinx.joey.gen.model.java.classes.JavaLangClass;
23  import org.asyrinx.joey.gen.model.java.classes.PrimitiveType;
24  import org.asyrinx.joey.gen.model.java.classes.PrimitiveWrapper;
25  import org.asyrinx.joey.gen.model.rdb.Column;
26  import org.asyrinx.joey.gen.model.rdb.Database;
27  import org.asyrinx.joey.gen.model.rdb.Databases;
28  import org.asyrinx.joey.gen.model.rdb.RdbEnumeration;
29  import org.asyrinx.joey.gen.model.rdb.Table;
30  
31  /***
32   * @author akima
33   */
34  public class BasicBuilderTest extends TestCase {
35  
36      public static void main(String[] args) {
37          junit.swingui.TestRunner.run(BasicBuilderTest.class);
38      }
39  
40      public void testExecute() {
41  
42          final Databases databases = new Databases();
43          final Database db1 = new Database(databases, "db1");
44          db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
45          //
46          final RdbEnumeration e_party_type = new RdbEnumeration(db1, "PartyType");
47          e_party_type.setValueType("Integer");
48          e_party_type.setLabel("パーティ型");
49          new EnumerationEntry(e_party_type, "1", "individual", "個人");
50          new EnumerationEntry(e_party_type, "2", "corporation", "法人");
51          //
52          final Table t_party = new Table(db1, "party", "パーティ");
53          new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
54          new Column(t_party, "name", "VARCHAR", "20", true, false, null);
55          final Column col_party_type = new Column(t_party, "party_type", "PartyType", "0", true, false, "corporation");
56          col_party_type.setEnum("PartyType");
57          //
58          final BasicBuilder builder = new BasicBuilder();
59          final AppDomain domain = builder.execute(databases);
60          //
61          assertEquals(1, domain.getClasses().size());
62          assertEquals(1, domain.getEnumerations().size());
63          //
64          final JavaEnumeration je_party_type = domain.getEnumerations().getEnumeration(0);
65          assertEquals("PartyType", je_party_type.getName());
66          assertEquals("パーティ型", je_party_type.getLabel());
67          assertEquals(PrimitiveWrapper.INTEGER, je_party_type.getValueTypeObj());
68          assertEquals(2, je_party_type.size());
69          assertEquals("1", je_party_type.getEntry(0).getValue());
70          assertEquals("individual", je_party_type.getEntry(0).getName());
71          assertEquals("個人", je_party_type.getEntry(0).getLabel());
72          assertEquals("2", je_party_type.getEntry(1).getValue());
73          assertEquals("corporation", je_party_type.getEntry(1).getName());
74          assertEquals("法人", je_party_type.getEntry(1).getLabel());
75          //
76          final Entity c_party = domain.getClasses().getJavaType(0);
77          assertEquals("Party", c_party.getName());
78          assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
79          assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
80          assertEquals("パーティ", c_party.getLabel());
81          assertEquals(3, c_party.getProperties().size());
82          final Property p_party_id = c_party.getProperties().getProperty(0);
83          assertEquals("partyId", p_party_id.getName());
84          assertEquals("long", p_party_id.getTypeName());
85          assertEquals(PrimitiveType.LONG, p_party_id.getType());
86          assertEquals(0, p_party_id.getMaxLength());
87          assertEquals(true, p_party_id.isRequired());
88          assertEquals("0", p_party_id.getDefaultValue());
89          final Property p_name = c_party.getProperties().getProperty(1);
90          assertEquals("name", p_name.getName());
91          assertEquals("String", p_name.getTypeName());
92          assertEquals(JavaLangClass.STRING, p_name.getType());
93          assertEquals(20, p_name.getMaxLength());
94          assertEquals(true, p_name.isRequired());
95          assertEquals("null", p_name.getDefaultValue());
96          final Property p_party_type = c_party.getProperties().getProperty(2);
97          assertEquals("partyType", p_party_type.getName());
98          assertEquals("PartyType", p_party_type.getTypeName());
99          assertEquals(je_party_type, p_party_type.getType());
100         assertEquals(0, p_party_type.getMaxLength());
101         assertEquals(true, p_party_type.isRequired());
102         assertEquals("corporation", p_party_type.getDefaultValue());
103         //
104         assertEquals("partyTypeEnum", p_party_type.getEnumPropertyName());
105         assertEquals(je_party_type, p_party_type.getEnumType());
106     }
107 
108     public void testKeys() {
109         final Databases databases = new Databases();
110         final Database db1 = new Database(databases, "db1");
111         db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
112         //
113         final Table t_party = new Table(db1, "party", "パーティ");
114         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
115         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
116         //
117         final Table t_role = new Table(db1, "role", "ロール");
118         new Column(t_role, "role_id", "BIGINT", "0", true, true, "0");
119         final Column colPartyId = new Column(t_role, "party_id", "BIGINT", "0", true, false, "0");
120         colPartyId.setFk("party.party_id");
121         //
122         final Table t_user = new Table(db1, "system_user", "システムユーザ");
123         t_user.setExtends("role");
124         new Column(t_user, "system_user_id", "BIGINT", "0", true, true, "0");
125         new Column(t_user, "values", "VARCHAR", "20", true, false, null);
126         //
127         final BasicBuilder builder = new BasicBuilder();
128         final AppDomain domain = builder.execute(databases);
129         //
130         assertEquals(1, t_role.getForeignKeys().size());
131         //
132         assertEquals(3, domain.getClasses().size());
133         assertEquals(0, domain.getEnumerations().size());
134         //
135         final Entity c_party = domain.getClasses().getJavaType(0);
136         assertEquals("Party", c_party.getName());
137         assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
138         assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
139         assertEquals("パーティ", c_party.getLabel());
140         assertEquals(2, c_party.getProperties().size());
141         final Property p_party_id = c_party.getProperties().getProperty(0);
142         assertEquals("partyId", p_party_id.getName());
143         assertEquals("long", p_party_id.getTypeName());
144         assertEquals(PrimitiveType.LONG, p_party_id.getType());
145         assertEquals(0, p_party_id.getMaxLength());
146         assertEquals(true, p_party_id.isRequired());
147         assertEquals("0", p_party_id.getDefaultValue());
148         final Property p_name = c_party.getProperties().getProperty(1);
149         assertEquals("name", p_name.getName());
150         assertEquals("String", p_name.getTypeName());
151         assertEquals(JavaLangClass.STRING, p_name.getType());
152         assertEquals(20, p_name.getMaxLength());
153         assertEquals(true, p_name.isRequired());
154         assertEquals("null", p_name.getDefaultValue());
155         final EntityKey pk_party = c_party.getPrimaryKey();
156         assertEquals(1, pk_party.size());
157         assertEquals(p_party_id, pk_party.getEntry(0).getProperty());
158 
159         //
160         final Entity c_role = domain.getClasses().getJavaType(1);
161         assertEquals("Role", c_role.getName());
162         assertEquals("org.asyrinx.joey.sample", c_role.getPackage());
163         assertEquals("org.asyrinx.joey.sample.Role", c_role.getFqn());
164         assertEquals("ロール", c_role.getLabel());
165         assertEquals(2, c_role.getProperties().size());
166         final Property p_role_id = c_role.getProperties().getProperty(0);
167         assertEquals("roleId", p_role_id.getName());
168         assertEquals("long", p_role_id.getTypeName());
169         assertEquals(PrimitiveType.LONG, p_role_id.getType());
170         assertEquals(0, p_role_id.getMaxLength());
171         assertEquals(true, p_role_id.isRequired());
172         assertEquals("0", p_role_id.getDefaultValue());
173         final Property p_role_party_id = c_role.getProperties().getProperty(1);
174         assertEquals("partyId", p_role_party_id.getName());
175         assertEquals("long", p_role_party_id.getTypeName());
176         assertEquals(PrimitiveType.LONG, p_role_party_id.getType());
177         assertEquals(0, p_role_party_id.getMaxLength());
178         assertEquals(true, p_role_party_id.isRequired());
179         assertEquals("0", p_role_party_id.getDefaultValue());
180         //
181         final List role_allProperties = c_role.getPropertiesAll();
182         assertEquals(2, role_allProperties.size());
183         assertEquals(p_role_id, role_allProperties.get(0));
184         assertEquals(p_role_party_id, role_allProperties.get(1));
185         //
186         final Entity c_system_user = domain.getClasses().getJavaType(2);
187         assertEquals("SystemUser", c_system_user.getName());
188         assertEquals("org.asyrinx.joey.sample", c_system_user.getPackage());
189         assertEquals("org.asyrinx.joey.sample.SystemUser", c_system_user.getFqn());
190         assertEquals("システムユーザ", c_system_user.getLabel());
191         assertEquals(3, c_system_user.getProperties().size());
192         assertEquals(c_role, c_system_user.getSuperClass());
193         final Property p_system_user_id = c_system_user.getProperties().getProperty(0);
194         assertEquals("systemUserId", p_system_user_id.getName());
195         assertEquals("long", p_system_user_id.getTypeName());
196         assertEquals(PrimitiveType.LONG, p_system_user_id.getType());
197         assertEquals(0, p_system_user_id.getMaxLength());
198         assertEquals(true, p_system_user_id.isRequired());
199         assertEquals("0", p_system_user_id.getDefaultValue());
200         final Property p_values = c_system_user.getProperties().getProperty(1);
201         assertEquals("values", p_values.getName());
202         assertEquals("String", p_values.getTypeName());
203         assertEquals(JavaLangClass.STRING, p_values.getType());
204         assertEquals(20, p_values.getMaxLength());
205         assertEquals(true, p_values.isRequired());
206         assertEquals("null", p_values.getDefaultValue());
207         // このプロパティは継承元にあるはずなので、生成されない。対応するカラムは生成される
208         //final Property p_system_user_role_id =
209         // c_system_user.getProperties().getProperty(2);
210         //assertEquals("roleId", p_system_user_role_id.getName());
211         //assertEquals("long", p_system_user_role_id.getType());
212         //assertEquals(PrimitiveType.LONG,
213         // p_system_user_role_id.getJavaType());
214         //assertEquals(0, p_system_user_role_id.getMaxLength());
215         //assertEquals(true, p_system_user_role_id.isRequired());
216         //assertEquals("0", p_system_user_role_id.getDefaultValue());
217         final List systemUser_allProperties = c_system_user.getPropertiesAll();
218         assertEquals(5, systemUser_allProperties.size());
219         assertEquals(p_role_id, systemUser_allProperties.get(0));
220         assertEquals(p_role_party_id, systemUser_allProperties.get(1));
221         assertEquals(p_system_user_id, systemUser_allProperties.get(2));
222         assertEquals(p_values, systemUser_allProperties.get(3));
223 
224         //
225         assertEquals(1, c_role.getReferences().size());
226         final Reference ref_role_to_party = c_role.getReferences().getReference(0);
227         assertEquals("Party", ref_role_to_party.getReferenceClassName());
228         assertEquals(c_party, ref_role_to_party.getReferenceClass());
229         assertEquals(p_role_party_id, ref_role_to_party.getEntry(0).getLocal());
230         assertEquals(p_party_id, ref_role_to_party.getEntry(0).getForeign());
231         assertEquals(1, p_role_party_id.getReferencesContainedAsLocal().size());
232         assertEquals(0, p_role_party_id.getReferencesContainedAsForeign().size());
233         assertEquals(0, p_party_id.getReferencesContainedAsLocal().size());
234         assertEquals(1, p_party_id.getReferencesContainedAsForeign().size());
235         //
236         assertEquals("party", ref_role_to_party.getPropertyNameInLocal());
237         assertEquals("roles", ref_role_to_party.getPropertyNameInReferred());
238         assertEquals("role", ref_role_to_party.getPropertyNameInReferred(false));
239         //
240         assertEquals(1, c_party.getReferreds().size());
241         assertEquals(ref_role_to_party, c_party.getReferreds().get(0));
242         assertEquals(0, c_role.getReferreds().size());
243     }
244 
245     public void testReference() {
246         final Databases databases = new Databases();
247         final Database db1 = new Database(databases, "db1");
248         db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
249         //
250         final Table t_party = new Table(db1, "party", "パーティ");
251         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
252         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
253         //
254         final Table t_relation = new Table(db1, "relation", "関係");
255         new Column(t_relation, "relation_id", "BIGINT", "0", true, true, "0");
256         final Column colOriginPartyId = new Column(t_relation, "origin_party_id", "BIGINT", "0", true, false, "0");
257         final Column colDestPartyId = new Column(t_relation, "dest_party_id", "BIGINT", "0", true, false, "0");
258         colOriginPartyId.setFk("party.party_id");
259         colDestPartyId.setFk("party.party_id");
260         //
261         final BasicBuilder builder = new BasicBuilder();
262         final AppDomain domain = builder.execute(databases);
263         //
264         assertEquals(2, t_relation.getForeignKeys().size());
265         //
266         assertEquals(2, domain.getClasses().size());
267         //
268         final Entity c_party = domain.getClasses().getJavaType(0);
269         assertEquals("Party", c_party.getName());
270         assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
271         assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
272         assertEquals("パーティ", c_party.getLabel());
273         assertEquals(2, c_party.getProperties().size());
274         final Property p_party_id = c_party.getProperties().getProperty(0);
275         assertEquals("partyId", p_party_id.getName());
276         assertEquals("long", p_party_id.getTypeName());
277         assertEquals(PrimitiveType.LONG, p_party_id.getType());
278         assertEquals(0, p_party_id.getMaxLength());
279         assertEquals(true, p_party_id.isRequired());
280         assertEquals("0", p_party_id.getDefaultValue());
281         final Property p_name = c_party.getProperties().getProperty(1);
282         assertEquals("name", p_name.getName());
283         assertEquals("String", p_name.getTypeName());
284         assertEquals(JavaLangClass.STRING, p_name.getType());
285         assertEquals(20, p_name.getMaxLength());
286         assertEquals(true, p_name.isRequired());
287         assertEquals("null", p_name.getDefaultValue());
288         final EntityKey pk_party = c_party.getPrimaryKey();
289         assertEquals(1, pk_party.size());
290         assertEquals(p_party_id, pk_party.getEntry(0).getProperty());
291         //
292         final Entity c_relation = domain.getClasses().getJavaType(1);
293         assertEquals("Relation", c_relation.getName());
294         assertEquals("org.asyrinx.joey.sample", c_relation.getPackage());
295         assertEquals("org.asyrinx.joey.sample.Relation", c_relation.getFqn());
296         assertEquals("関係", c_relation.getLabel());
297         assertEquals(3, c_relation.getProperties().size());
298         final Property p_role_id = c_relation.getProperties().getProperty(0);
299         assertEquals("relationId", p_role_id.getName());
300         assertEquals("long", p_role_id.getTypeName());
301         assertEquals(PrimitiveType.LONG, p_role_id.getType());
302         assertEquals(0, p_role_id.getMaxLength());
303         assertEquals(true, p_role_id.isRequired());
304         assertEquals("0", p_role_id.getDefaultValue());
305         final Property p_origin_party_id = c_relation.getProperties().getProperty(1);
306         assertEquals("originPartyId", p_origin_party_id.getName());
307         assertEquals("long", p_origin_party_id.getTypeName());
308         assertEquals(PrimitiveType.LONG, p_origin_party_id.getType());
309         assertEquals(0, p_origin_party_id.getMaxLength());
310         assertEquals(true, p_origin_party_id.isRequired());
311         assertEquals("0", p_origin_party_id.getDefaultValue());
312         final Property p_dest_party_id = c_relation.getProperties().getProperty(2);
313         assertEquals("destPartyId", p_dest_party_id.getName());
314         assertEquals("long", p_dest_party_id.getTypeName());
315         assertEquals(PrimitiveType.LONG, p_dest_party_id.getType());
316         assertEquals(0, p_dest_party_id.getMaxLength());
317         assertEquals(true, p_dest_party_id.isRequired());
318         assertEquals("0", p_dest_party_id.getDefaultValue());
319         //
320         assertEquals(2, c_relation.getReferences().size());
321         assertEquals(1, p_origin_party_id.getReferencesContainedAsLocal().size());
322         assertEquals(0, p_origin_party_id.getReferencesContainedAsForeign().size());
323         assertEquals(0, p_party_id.getReferencesContainedAsLocal().size());
324         assertEquals(2, p_party_id.getReferencesContainedAsForeign().size());
325         final Reference ref_origin_to_party = c_relation.getReferences().getReference(0);
326         assertEquals("Party", ref_origin_to_party.getReferenceClassName());
327         assertEquals(c_party, ref_origin_to_party.getReferenceClass());
328         assertEquals(p_origin_party_id, ref_origin_to_party.getEntry(0).getLocal());
329         assertEquals(p_party_id, ref_origin_to_party.getEntry(0).getForeign());
330         assertEquals("partyRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInLocal());
331         assertEquals("relationsRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred());
332         assertEquals("relationRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred(false));
333         //
334         final Reference ref_dest_to_party = c_relation.getReferences().getReference(1);
335         assertEquals("Party", ref_dest_to_party.getReferenceClassName());
336         assertEquals(c_party, ref_dest_to_party.getReferenceClass());
337         assertEquals(p_dest_party_id, ref_dest_to_party.getEntry(0).getLocal());
338         assertEquals(p_party_id, ref_dest_to_party.getEntry(0).getForeign());
339         assertEquals("partyRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInLocal());
340         assertEquals("relationsRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred());
341         assertEquals("relationRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred(false));
342         //
343         assertEquals(2, c_party.getReferreds().size());
344         assertEquals(ref_origin_to_party, c_party.getReferreds().get(0));
345         assertEquals(ref_dest_to_party, c_party.getReferreds().get(1));
346         assertEquals(0, c_relation.getReferreds().size());
347     }
348 
349     public void testPackaging() {
350 
351         final Databases databases = new Databases();
352         final Database db1 = new Database(databases, "db1");
353         db1.getOptions().put("javaPackage", "org.asyrinx.joey.${packageType}.party");
354         final Table t_party = new Table(db1, "party", "パーティ");
355         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
356         //
357         final Database db1_ = new Database(databases, "db1");
358         db1_.getOptions().put("javaPackage", "org.asyrinx.joey.${packageType}.report");
359         final Table t_report = new Table(db1_, "report", "報告");
360         final Column col_reporter_id = new Column(t_report, "reporter_id", "BIGINT", "0", true, true, "0");
361         col_reporter_id.setFk("party.party_id");
362         final Table t_notify = new Table(db1_, "notify", "通知");
363         //
364         final BasicBuilder builder = new BasicBuilder();
365         final AppDomain domain = builder.execute(databases);
366         //
367         assertEquals(1, databases.getDatabases().size());
368         assertEquals(db1, databases.getDatabases().getDatabase(0));
369         //
370         assertEquals(3, domain.getClasses().size());
371         final Entity ety_party = domain.getClasses().getJavaType(0);
372         final Entity ety_report = domain.getClasses().getJavaType(1);
373         final Entity ety_notify = domain.getClasses().getJavaType(2);
374         assertEquals("Party", ety_party.getName());
375         assertEquals("Report", ety_report.getName());
376         assertEquals("Notify", ety_notify.getName());
377         //
378         assertEquals("org.asyrinx.joey.entity.party", ety_party.getPackageName());
379         assertEquals("org.asyrinx.joey.entity.report", ety_report.getPackageName());
380         assertEquals("org.asyrinx.joey.entity.report", ety_notify.getPackageName());
381         //
382         assertEquals("org.asyrinx.joey.dao.party", ety_party.getPackage("dao"));
383         assertEquals("org.asyrinx.joey.dao.report", ety_report.getPackage("dao"));
384         assertEquals("org.asyrinx.joey.dao.report", ety_notify.getPackage("dao"));
385         //
386         assertEquals(1, ety_party.getImports().size());
387         assertEquals("org.asyrinx.joey.entity.report.Report", ety_party.getImports().iterator().next());
388         assertEquals(1, ety_report.getImports().size());
389         assertEquals("org.asyrinx.joey.entity.party.Party", ety_report.getImports().iterator().next());
390     }
391 
392     public void testConstructorParams() {
393         final Databases databases = new Databases();
394         final Database db1 = new Database(databases, "db1");
395         //
396         final Table t_party = new Table(db1, "party", "パーティ");
397         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
398         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
399         //
400         final Table t_role = new Table(db1, "role", "ロール");
401         new Column(t_role, "role_id", "BIGINT", "0", true, true, "0");
402         final Column colPartyId = new Column(t_role, "party_id", "BIGINT", "0", true, false, "0");
403         colPartyId.setFk("party.party_id");
404         //
405         final Table t_user = new Table(db1, "system_user", "システムユーザ");
406         t_user.setExtends("role");
407         new Column(t_user, "values", "VARCHAR", "20", true, false, null);
408         //
409         final BasicBuilder builder = new BasicBuilder();
410         final AppDomain domain = builder.execute(databases);
411         //
412         assertEquals(3, domain.getClasses().size());
413         final Entity e_party = domain.getClasses().getJavaType("Party");
414         final Entity e_role = domain.getClasses().getJavaType("Role");
415         final Entity e_user = domain.getClasses().getJavaType("SystemUser");
416         assertNotNull(e_party);
417         assertNotNull(e_role);
418         assertNotNull(e_user);
419         {
420             final List e_party_params = e_party.getConstructorParams();
421             assertEquals(2, e_party_params.size());
422             assertEquals(Property.class, e_party_params.get(0).getClass());
423             assertEquals(Property.class, e_party_params.get(1).getClass());
424             final Parameter e_party_params_id = (Parameter) e_party_params.get(0);
425             assertEquals("partyId", e_party_params_id.getParamName());
426             assertEquals("long", e_party_params_id.getParamType().getName());
427             final Parameter e_party_params_name = (Parameter) e_party_params.get(1);
428             assertEquals("name", e_party_params_name.getParamName());
429             assertEquals("String", e_party_params_name.getParamType().getName());
430         }
431         {
432             final List e_role_params = e_role.getConstructorParams();
433             assertEquals(2, e_role_params.size());
434             assertEquals(Property.class, e_role_params.get(0).getClass());
435             assertEquals(Reference.class, e_role_params.get(1).getClass());
436             final Parameter e_party_params_id = (Parameter) e_role_params.get(0);
437             assertEquals("roleId", e_party_params_id.getParamName());
438             assertEquals("long", e_party_params_id.getParamType().getName());
439             final Parameter e_party_params_party = (Parameter) e_role_params.get(1);
440             assertEquals("party", e_party_params_party.getParamName());
441             assertEquals("Party", e_party_params_party.getParamType().getName());
442         }
443         {
444             final List e_user_params = e_user.getConstructorParams();
445             assertEquals(3, e_user_params.size());
446             assertEquals(Property.class, e_user_params.get(0).getClass());
447             assertEquals(Reference.class, e_user_params.get(1).getClass());
448             assertEquals(Property.class, e_user_params.get(2).getClass());
449             final Parameter e_party_params_id = (Parameter) e_user_params.get(0);
450             assertEquals("roleId", e_party_params_id.getParamName());
451             assertEquals("long", e_party_params_id.getParamType().getName());
452             final Parameter e_party_params_party = (Parameter) e_user_params.get(1);
453             assertEquals("party", e_party_params_party.getParamName());
454             assertEquals("Party", e_party_params_party.getParamType().getName());
455             final Parameter e_party_params_name = (Parameter) e_user_params.get(2);
456             assertEquals("values", e_party_params_name.getParamName());
457             assertEquals("String", e_party_params_name.getParamType().getName());
458         }
459     }
460 
461     
462     public void testReferencePropertyName() {
463         final Databases databases = new Databases();
464         final Database db1 = new Database(databases, "db1");
465         db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
466         //
467         final Table t_party = new Table(db1, "party", "パーティ");
468         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
469         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
470         //
471         final Table t_relation_type = new Table(db1, "relation_type", "関係型");
472         new Column(t_relation_type, "relation_type_id", "BIGINT", "0", true, true, "0");
473         new Column(t_relation_type, "name", "VARCHAR", "20", true, false, null);
474         //
475         final Table t_relation_type_structure = new Table(db1, "relation_type_structure", "関係型構造");
476         new Column(t_relation_type_structure, "relation_type_structure_id", "BIGINT", "0", true, true, "0");
477         final Column colOriginRtId = new Column(t_relation_type_structure, "origin_relation_type_id", "BIGINT", "0", true, false, "0");
478         final Column colDestRtId = new Column(t_relation_type_structure, "dest_relation_type_id", "BIGINT", "0", true, false, "0");
479         colOriginRtId.setFk("relation_type.relation_type_id");
480         colDestRtId.setFk("relation_type.relation_type_id");
481         //
482         final Table t_relation = new Table(db1, "relation", "関係");
483         new Column(t_relation, "relation_id", "BIGINT", "0", true, true, "0");
484         final Column colOriginPartyId = new Column(t_relation, "origin_party_id", "BIGINT", "0", true, false, "0");
485         final Column colDestPartyId = new Column(t_relation, "dest_party_id", "BIGINT", "0", true, false, "0");
486         final Column colRelationType = new Column(t_relation, "relation_type_id", "BIGINT", "0", true, false, "0");
487         colOriginPartyId.setFk("party.party_id");
488         colDestPartyId.setFk("party.party_id");
489         colRelationType.setFk("relation_type.relation_type_id");
490         //
491         final BasicBuilder builder = new BasicBuilder();
492         final AppDomain domain = builder.execute(databases);
493         //
494         assertEquals(4, domain.getClasses().size());
495         //
496         final Entity c_party = domain.getClasses().getJavaType("Party");
497         final Entity c_relation_type = domain.getClasses().getJavaType("RelationType");
498         final Entity c_relation_type_struc = domain.getClasses().getJavaType("RelationTypeStructure");
499         final Entity c_relation = domain.getClasses().getJavaType("Relation");
500         //
501         final Property p_party_id = c_party.getProperties().getProperty("partyId");
502         final Property p_relation_type_id = c_relation_type.getProperties().getProperty("relationTypeId");
503         //
504         final Property p_origin_rt_id = c_relation_type_struc.getProperties().getProperty("originRelationTypeId");
505         final Property p_dest_rt_id = c_relation_type_struc.getProperties().getProperty("destRelationTypeId");
506         //
507         final Reference ref_origin_to_rt = c_relation_type_struc.getReferences().getReference(0);
508         assertEquals("RelationType", ref_origin_to_rt.getReferenceClassName());
509         assertEquals(c_relation_type, ref_origin_to_rt.getReferenceClass());
510         assertEquals(p_origin_rt_id, ref_origin_to_rt.getEntry(0).getLocal());
511         assertEquals(p_relation_type_id, ref_origin_to_rt.getEntry(0).getForeign());
512         assertEquals("relationTypeRelatedByOriginRelationTypeId", ref_origin_to_rt.getPropertyNameInLocal());
513         assertEquals("relationTypeStructuresRelatedByOriginRelationTypeId", ref_origin_to_rt.getPropertyNameInReferred());
514         assertEquals("relationTypeStructureRelatedByOriginRelationTypeId", ref_origin_to_rt.getPropertyNameInReferred(false));
515         //
516         final Reference ref_dest_to_rt = c_relation_type_struc.getReferences().getReference(1);
517         assertEquals("RelationType", ref_dest_to_rt.getReferenceClassName());
518         assertEquals(c_relation_type, ref_dest_to_rt.getReferenceClass());
519         assertEquals(p_dest_rt_id, ref_dest_to_rt.getEntry(0).getLocal());
520         assertEquals(p_relation_type_id, ref_dest_to_rt.getEntry(0).getForeign());
521         assertEquals("relationTypeRelatedByDestRelationTypeId", ref_dest_to_rt.getPropertyNameInLocal());
522         assertEquals("relationTypeStructuresRelatedByDestRelationTypeId", ref_dest_to_rt.getPropertyNameInReferred());
523         assertEquals("relationTypeStructureRelatedByDestRelationTypeId", ref_dest_to_rt.getPropertyNameInReferred(false));
524         //
525         final Property p_role_id = c_relation.getProperties().getProperty(0);
526         final Property p_origin_party_id = c_relation.getProperties().getProperty(1);
527         final Property p_dest_party_id = c_relation.getProperties().getProperty(2);
528         final Property p_relation_type_id2 = c_relation.getProperties().getProperty(3);
529         //
530         final Reference ref_origin_to_party = c_relation.getReferences().getReference(0);
531         assertEquals("Party", ref_origin_to_party.getReferenceClassName());
532         assertEquals(c_party, ref_origin_to_party.getReferenceClass());
533         assertEquals(p_origin_party_id, ref_origin_to_party.getEntry(0).getLocal());
534         assertEquals(p_party_id, ref_origin_to_party.getEntry(0).getForeign());
535         assertEquals("partyRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInLocal());
536         assertEquals("relationsRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred());
537         assertEquals("relationRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred(false));
538         //
539         final Reference ref_dest_to_party = c_relation.getReferences().getReference(1);
540         assertEquals("Party", ref_dest_to_party.getReferenceClassName());
541         assertEquals(c_party, ref_dest_to_party.getReferenceClass());
542         assertEquals(p_dest_party_id, ref_dest_to_party.getEntry(0).getLocal());
543         assertEquals(p_party_id, ref_dest_to_party.getEntry(0).getForeign());
544         assertEquals("partyRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInLocal());
545         assertEquals("relationsRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred());
546         assertEquals("relationRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred(false));
547         //
548         final Reference ref_relation_type = c_relation.getReferences().getReference(2);
549         assertEquals("RelationType", ref_relation_type.getReferenceClassName());
550         assertEquals(c_relation_type, ref_relation_type.getReferenceClass());
551         assertEquals(p_relation_type_id2, ref_relation_type.getEntry(0).getLocal());
552         assertEquals(p_relation_type_id, ref_relation_type.getEntry(0).getForeign());
553         assertEquals("relationType", ref_relation_type.getPropertyNameInLocal());
554         assertEquals("relations", ref_relation_type.getPropertyNameInReferred());
555         assertEquals("relation", ref_relation_type.getPropertyNameInReferred(false));
556         //
557         assertEquals(2, c_party.getReferreds().size());
558         assertEquals(ref_origin_to_party, c_party.getReferreds().get(0));
559         assertEquals(ref_dest_to_party, c_party.getReferreds().get(1));
560         assertEquals(0, c_relation.getReferreds().size());
561     }
562     
563     
564 }