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