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.Property;
20  import org.asyrinx.joey.gen.model.java.Reference;
21  import org.asyrinx.joey.gen.model.java.classes.JavaLangClass;
22  import org.asyrinx.joey.gen.model.java.classes.PrimitiveType;
23  import org.asyrinx.joey.gen.model.java.classes.PrimitiveWrapper;
24  import org.asyrinx.joey.gen.model.rdb.Column;
25  import org.asyrinx.joey.gen.model.rdb.Database;
26  import org.asyrinx.joey.gen.model.rdb.Databases;
27  import org.asyrinx.joey.gen.model.rdb.RdbEnumeration;
28  import org.asyrinx.joey.gen.model.rdb.Table;
29  
30  /***
31   * @author akima
32   */
33  public class BasicBuilderTest extends TestCase {
34  
35      public static void main(String[] args) {
36          junit.swingui.TestRunner.run(BasicBuilderTest.class);
37      }
38  
39      public void testExecute() {
40  
41          final Databases databases = new Databases();
42          final Database db1 = new Database(databases, "db1");
43          db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
44          //
45          final RdbEnumeration e_party_type = new RdbEnumeration(db1, "PartyType");
46          e_party_type.setValueType("Integer");
47          e_party_type.setLabel("パーティ型");
48          new EnumerationEntry(e_party_type, "1", "individual", "個人");
49          new EnumerationEntry(e_party_type, "2", "corporation", "法人");
50          //
51          final Table t_party = new Table(db1, "party", "パーティ");
52          new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
53          new Column(t_party, "name", "VARCHAR", "20", true, false, null);
54          final Column col_party_type = new Column(t_party, "party_type", "PartyType", "0", true, false, "corporation");
55          col_party_type.setEnum("PartyType");
56          //
57          final BasicBuilder builder = new BasicBuilder();
58          final AppDomain domain = builder.execute(databases);
59          //
60          assertEquals(1, domain.getClasses().size());
61          assertEquals(1, domain.getEnumerations().size());
62          //
63          final JavaEnumeration je_party_type = domain.getEnumerations().getEnumeration(0);
64          assertEquals("PartyType", je_party_type.getName());
65          assertEquals("パーティ型", je_party_type.getLabel());
66          assertEquals(PrimitiveWrapper.INTEGER, je_party_type.getValueTypeObj());
67          assertEquals(2, je_party_type.size());
68          assertEquals("1", je_party_type.getEntry(0).getValue());
69          assertEquals("individual", je_party_type.getEntry(0).getName());
70          assertEquals("個人", je_party_type.getEntry(0).getLabel());
71          assertEquals("2", je_party_type.getEntry(1).getValue());
72          assertEquals("corporation", je_party_type.getEntry(1).getName());
73          assertEquals("法人", je_party_type.getEntry(1).getLabel());
74          //
75          final Entity c_party = domain.getClasses().getJavaType(0);
76          assertEquals("Party", c_party.getName());
77          assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
78          assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
79          assertEquals("パーティ", c_party.getLabel());
80          assertEquals(3, c_party.getProperties().size());
81          final Property p_party_id = c_party.getProperties().getProperty(0);
82          assertEquals("partyId", p_party_id.getName());
83          assertEquals("long", p_party_id.getTypeName());
84          assertEquals(PrimitiveType.LONG, p_party_id.getType());
85          assertEquals(0, p_party_id.getMaxLength());
86          assertEquals(true, p_party_id.isRequired());
87          assertEquals("0", p_party_id.getDefaultValue());
88          final Property p_name = c_party.getProperties().getProperty(1);
89          assertEquals("name", p_name.getName());
90          assertEquals("String", p_name.getTypeName());
91          assertEquals(JavaLangClass.STRING, p_name.getType());
92          assertEquals(20, p_name.getMaxLength());
93          assertEquals(true, p_name.isRequired());
94          assertEquals("null", p_name.getDefaultValue());
95          final Property p_party_type = c_party.getProperties().getProperty(2);
96          assertEquals("partyType", p_party_type.getName());
97          assertEquals("PartyType", p_party_type.getTypeName());
98          assertEquals(je_party_type, p_party_type.getType());
99          assertEquals(0, p_party_type.getMaxLength());
100         assertEquals(true, p_party_type.isRequired());
101         assertEquals("corporation", p_party_type.getDefaultValue());
102         //
103         assertEquals("partyTypeEnum", p_party_type.getEnumPropertyName());
104         assertEquals(je_party_type, p_party_type.getEnumType());
105     }
106 
107     public void testKeys() {
108         final Databases databases = new Databases();
109         final Database db1 = new Database(databases, "db1");
110         db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
111         //
112         final Table t_party = new Table(db1, "party", "パーティ");
113         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
114         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
115         //
116         final Table t_role = new Table(db1, "role", "ロール");
117         new Column(t_role, "role_id", "BIGINT", "0", true, true, "0");
118         final Column colPartyId = new Column(t_role, "party_id", "BIGINT", "0", true, false, "0");
119         colPartyId.setFk("party.party_id");
120         //
121         final Table t_user = new Table(db1, "system_user", "システムユーザ");
122         t_user.setExtends("role");
123         new Column(t_user, "system_user_id", "BIGINT", "0", true, true, "0");
124         new Column(t_user, "values", "VARCHAR", "20", true, false, null);
125         //
126         final BasicBuilder builder = new BasicBuilder();
127         final AppDomain domain = builder.execute(databases);
128         //
129         assertEquals(1, t_role.getForeignKeys().size());
130         //
131         assertEquals(3, domain.getClasses().size());
132         assertEquals(0, domain.getEnumerations().size());
133         //
134         final Entity c_party = domain.getClasses().getJavaType(0);
135         assertEquals("Party", c_party.getName());
136         assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
137         assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
138         assertEquals("パーティ", c_party.getLabel());
139         assertEquals(2, c_party.getProperties().size());
140         final Property p_party_id = c_party.getProperties().getProperty(0);
141         assertEquals("partyId", p_party_id.getName());
142         assertEquals("long", p_party_id.getTypeName());
143         assertEquals(PrimitiveType.LONG, p_party_id.getType());
144         assertEquals(0, p_party_id.getMaxLength());
145         assertEquals(true, p_party_id.isRequired());
146         assertEquals("0", p_party_id.getDefaultValue());
147         final Property p_name = c_party.getProperties().getProperty(1);
148         assertEquals("name", p_name.getName());
149         assertEquals("String", p_name.getTypeName());
150         assertEquals(JavaLangClass.STRING, p_name.getType());
151         assertEquals(20, p_name.getMaxLength());
152         assertEquals(true, p_name.isRequired());
153         assertEquals("null", p_name.getDefaultValue());
154         final EntityKey pk_party = c_party.getPrimaryKey();
155         assertEquals(1, pk_party.size());
156         assertEquals(p_party_id, pk_party.getEntry(0).getProperty());
157 
158         //
159         final Entity c_role = domain.getClasses().getJavaType(1);
160         assertEquals("Role", c_role.getName());
161         assertEquals("org.asyrinx.joey.sample", c_role.getPackage());
162         assertEquals("org.asyrinx.joey.sample.Role", c_role.getFqn());
163         assertEquals("ロール", c_role.getLabel());
164         assertEquals(2, c_role.getProperties().size());
165         final Property p_role_id = c_role.getProperties().getProperty(0);
166         assertEquals("roleId", p_role_id.getName());
167         assertEquals("long", p_role_id.getTypeName());
168         assertEquals(PrimitiveType.LONG, p_role_id.getType());
169         assertEquals(0, p_role_id.getMaxLength());
170         assertEquals(true, p_role_id.isRequired());
171         assertEquals("0", p_role_id.getDefaultValue());
172         final Property p_role_party_id = c_role.getProperties().getProperty(1);
173         assertEquals("partyId", p_role_party_id.getName());
174         assertEquals("long", p_role_party_id.getTypeName());
175         assertEquals(PrimitiveType.LONG, p_role_party_id.getType());
176         assertEquals(0, p_role_party_id.getMaxLength());
177         assertEquals(true, p_role_party_id.isRequired());
178         assertEquals("0", p_role_party_id.getDefaultValue());
179         //
180         final List role_allProperties = c_role.getPropertiesAll();
181         assertEquals(2, role_allProperties.size());
182         assertEquals(p_role_id, role_allProperties.get(0));
183         assertEquals(p_role_party_id, role_allProperties.get(1));
184         //
185         final Entity c_system_user = domain.getClasses().getJavaType(2);
186         assertEquals("SystemUser", c_system_user.getName());
187         assertEquals("org.asyrinx.joey.sample", c_system_user.getPackage());
188         assertEquals("org.asyrinx.joey.sample.SystemUser", c_system_user.getFqn());
189         assertEquals("システムユーザ", c_system_user.getLabel());
190         assertEquals(3, c_system_user.getProperties().size());
191         assertEquals(c_role, c_system_user.getSuperClass());
192         final Property p_system_user_id = c_system_user.getProperties().getProperty(0);
193         assertEquals("systemUserId", p_system_user_id.getName());
194         assertEquals("long", p_system_user_id.getTypeName());
195         assertEquals(PrimitiveType.LONG, p_system_user_id.getType());
196         assertEquals(0, p_system_user_id.getMaxLength());
197         assertEquals(true, p_system_user_id.isRequired());
198         assertEquals("0", p_system_user_id.getDefaultValue());
199         final Property p_values = c_system_user.getProperties().getProperty(1);
200         assertEquals("values", p_values.getName());
201         assertEquals("String", p_values.getTypeName());
202         assertEquals(JavaLangClass.STRING, p_values.getType());
203         assertEquals(20, p_values.getMaxLength());
204         assertEquals(true, p_values.isRequired());
205         assertEquals("null", p_values.getDefaultValue());
206         // このプロパティは継承元にあるはずなので、生成されない。対応するカラムは生成される
207         //final Property p_system_user_role_id =
208         // c_system_user.getProperties().getProperty(2);
209         //assertEquals("roleId", p_system_user_role_id.getName());
210         //assertEquals("long", p_system_user_role_id.getType());
211         //assertEquals(PrimitiveType.LONG,
212         // p_system_user_role_id.getJavaType());
213         //assertEquals(0, p_system_user_role_id.getMaxLength());
214         //assertEquals(true, p_system_user_role_id.isRequired());
215         //assertEquals("0", p_system_user_role_id.getDefaultValue());
216         final List systemUser_allProperties = c_system_user.getPropertiesAll();
217         assertEquals(5, systemUser_allProperties.size());
218         assertEquals(p_role_id, systemUser_allProperties.get(0));
219         assertEquals(p_role_party_id, systemUser_allProperties.get(1));
220         assertEquals(p_system_user_id, systemUser_allProperties.get(2));
221         assertEquals(p_values, systemUser_allProperties.get(3));
222 
223         //
224         assertEquals(1, c_role.getReferences().size());
225         final Reference ref_role_to_party = c_role.getReferences().getReference(0);
226         assertEquals("Party", ref_role_to_party.getReferenceClassName());
227         assertEquals(c_party, ref_role_to_party.getReferenceClass());
228         assertEquals(p_role_party_id, ref_role_to_party.getEntry(0).getLocal());
229         assertEquals(p_party_id, ref_role_to_party.getEntry(0).getForeign());
230         assertEquals(1, p_role_party_id.getReferencesContainedAsLocal().size());
231         assertEquals(0, p_role_party_id.getReferencesContainedAsForeign().size());
232         assertEquals(0, p_party_id.getReferencesContainedAsLocal().size());
233         assertEquals(1, p_party_id.getReferencesContainedAsForeign().size());
234         //
235         assertEquals("party", ref_role_to_party.getPropertyNameInLocal());
236         assertEquals("roles", ref_role_to_party.getPropertyNameInReferred());
237         assertEquals("role", ref_role_to_party.getPropertyNameInReferred(false));
238         //
239         assertEquals(1, c_party.getReferreds().size());
240         assertEquals(ref_role_to_party, c_party.getReferreds().get(0));
241         assertEquals(0, c_role.getReferreds().size());
242     }
243 
244     public void testReference() {
245         final Databases databases = new Databases();
246         final Database db1 = new Database(databases, "db1");
247         db1.getOptions().put("javaPackage", "org.asyrinx.joey.sample");
248         //
249         final Table t_party = new Table(db1, "party", "パーティ");
250         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
251         new Column(t_party, "name", "VARCHAR", "20", true, false, null);
252         //
253         final Table t_relation = new Table(db1, "relation", "関係");
254         new Column(t_relation, "relation_id", "BIGINT", "0", true, true, "0");
255         final Column colOriginPartyId = new Column(t_relation, "origin_party_id", "BIGINT", "0", true, false, "0");
256         final Column colDestPartyId = new Column(t_relation, "dest_party_id", "BIGINT", "0", true, false, "0");
257         colOriginPartyId.setFk("party.party_id");
258         colDestPartyId.setFk("party.party_id");
259         //
260         final BasicBuilder builder = new BasicBuilder();
261         final AppDomain domain = builder.execute(databases);
262         //
263         assertEquals(2, t_relation.getForeignKeys().size());
264         //
265         assertEquals(2, domain.getClasses().size());
266         //
267         final Entity c_party = domain.getClasses().getJavaType(0);
268         assertEquals("Party", c_party.getName());
269         assertEquals("org.asyrinx.joey.sample", c_party.getPackage());
270         assertEquals("org.asyrinx.joey.sample.Party", c_party.getFqn());
271         assertEquals("パーティ", c_party.getLabel());
272         assertEquals(2, c_party.getProperties().size());
273         final Property p_party_id = c_party.getProperties().getProperty(0);
274         assertEquals("partyId", p_party_id.getName());
275         assertEquals("long", p_party_id.getTypeName());
276         assertEquals(PrimitiveType.LONG, p_party_id.getType());
277         assertEquals(0, p_party_id.getMaxLength());
278         assertEquals(true, p_party_id.isRequired());
279         assertEquals("0", p_party_id.getDefaultValue());
280         final Property p_name = c_party.getProperties().getProperty(1);
281         assertEquals("name", p_name.getName());
282         assertEquals("String", p_name.getTypeName());
283         assertEquals(JavaLangClass.STRING, p_name.getType());
284         assertEquals(20, p_name.getMaxLength());
285         assertEquals(true, p_name.isRequired());
286         assertEquals("null", p_name.getDefaultValue());
287         final EntityKey pk_party = c_party.getPrimaryKey();
288         assertEquals(1, pk_party.size());
289         assertEquals(p_party_id, pk_party.getEntry(0).getProperty());
290         //
291         final Entity c_relation = domain.getClasses().getJavaType(1);
292         assertEquals("Relation", c_relation.getName());
293         assertEquals("org.asyrinx.joey.sample", c_relation.getPackage());
294         assertEquals("org.asyrinx.joey.sample.Relation", c_relation.getFqn());
295         assertEquals("関係", c_relation.getLabel());
296         assertEquals(3, c_relation.getProperties().size());
297         final Property p_role_id = c_relation.getProperties().getProperty(0);
298         assertEquals("relationId", p_role_id.getName());
299         assertEquals("long", p_role_id.getTypeName());
300         assertEquals(PrimitiveType.LONG, p_role_id.getType());
301         assertEquals(0, p_role_id.getMaxLength());
302         assertEquals(true, p_role_id.isRequired());
303         assertEquals("0", p_role_id.getDefaultValue());
304         final Property p_origin_party_id = c_relation.getProperties().getProperty(1);
305         assertEquals("originPartyId", p_origin_party_id.getName());
306         assertEquals("long", p_origin_party_id.getTypeName());
307         assertEquals(PrimitiveType.LONG, p_origin_party_id.getType());
308         assertEquals(0, p_origin_party_id.getMaxLength());
309         assertEquals(true, p_origin_party_id.isRequired());
310         assertEquals("0", p_origin_party_id.getDefaultValue());
311         final Property p_dest_party_id = c_relation.getProperties().getProperty(2);
312         assertEquals("destPartyId", p_dest_party_id.getName());
313         assertEquals("long", p_dest_party_id.getTypeName());
314         assertEquals(PrimitiveType.LONG, p_dest_party_id.getType());
315         assertEquals(0, p_dest_party_id.getMaxLength());
316         assertEquals(true, p_dest_party_id.isRequired());
317         assertEquals("0", p_dest_party_id.getDefaultValue());
318         //
319         assertEquals(2, c_relation.getReferences().size());
320         assertEquals(1, p_origin_party_id.getReferencesContainedAsLocal().size());
321         assertEquals(0, p_origin_party_id.getReferencesContainedAsForeign().size());
322         assertEquals(0, p_party_id.getReferencesContainedAsLocal().size());
323         assertEquals(2, p_party_id.getReferencesContainedAsForeign().size());
324         final Reference ref_origin_to_party = c_relation.getReferences().getReference(0);
325         assertEquals("Party", ref_origin_to_party.getReferenceClassName());
326         assertEquals(c_party, ref_origin_to_party.getReferenceClass());
327         assertEquals(p_origin_party_id, ref_origin_to_party.getEntry(0).getLocal());
328         assertEquals(p_party_id, ref_origin_to_party.getEntry(0).getForeign());
329         assertEquals("partyRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInLocal());
330         assertEquals("relationsRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred());
331         assertEquals("relationRelatedByOriginPartyId", ref_origin_to_party.getPropertyNameInReferred(false));
332         //
333         final Reference ref_dest_to_party = c_relation.getReferences().getReference(1);
334         assertEquals("Party", ref_dest_to_party.getReferenceClassName());
335         assertEquals(c_party, ref_dest_to_party.getReferenceClass());
336         assertEquals(p_dest_party_id, ref_dest_to_party.getEntry(0).getLocal());
337         assertEquals(p_party_id, ref_dest_to_party.getEntry(0).getForeign());
338         assertEquals("partyRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInLocal());
339         assertEquals("relationsRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred());
340         assertEquals("relationRelatedByDestPartyId", ref_dest_to_party.getPropertyNameInReferred(false));
341         //
342         assertEquals(2, c_party.getReferreds().size());
343         assertEquals(ref_origin_to_party, c_party.getReferreds().get(0));
344         assertEquals(ref_dest_to_party, c_party.getReferreds().get(1));
345         assertEquals(0, c_relation.getReferreds().size());
346     }
347 
348     public void testPackaging() {
349 
350         final Databases databases = new Databases();
351         final Database db1 = new Database(databases, "db1");
352         db1.getOptions().put("javaPackage", "org.asyrinx.joey.${packageType}.party");
353         final Table t_party = new Table(db1, "party", "パーティ");
354         new Column(t_party, "party_id", "BIGINT", "0", true, true, "0");
355         //
356         final Database db1_ = new Database(databases, "db1");
357         db1_.getOptions().put("javaPackage", "org.asyrinx.joey.${packageType}.report");
358         final Table t_report = new Table(db1_, "report", "報告");
359         final Column col_reporter_id = new Column(t_report, "reporter_id", "BIGINT", "0", true, true, "0");
360         col_reporter_id.setFk("party.party_id");
361         final Table t_notify = new Table(db1_, "notify", "通知");
362         //
363         final BasicBuilder builder = new BasicBuilder();
364         final AppDomain domain = builder.execute(databases);
365         //
366         assertEquals(1, databases.getDatabases().size());
367         assertEquals(db1, databases.getDatabases().getDatabase(0));
368         //
369         assertEquals(3, domain.getClasses().size());
370         final Entity ety_party = domain.getClasses().getJavaType(0);
371         final Entity ety_report = domain.getClasses().getJavaType(1);
372         final Entity ety_notify = domain.getClasses().getJavaType(2);
373         assertEquals("Party", ety_party.getName());
374         assertEquals("Report", ety_report.getName());
375         assertEquals("Notify", ety_notify.getName());
376         //
377         assertEquals("org.asyrinx.joey.entity.party", ety_party.getPackageName());
378         assertEquals("org.asyrinx.joey.entity.report", ety_report.getPackageName());
379         assertEquals("org.asyrinx.joey.entity.report", ety_notify.getPackageName());
380         //
381         assertEquals("org.asyrinx.joey.dao.party", ety_party.getPackage("dao"));
382         assertEquals("org.asyrinx.joey.dao.report", ety_report.getPackage("dao"));
383         assertEquals("org.asyrinx.joey.dao.report", ety_notify.getPackage("dao"));
384         //
385         assertEquals(1, ety_party.getImports().size());
386         assertEquals("org.asyrinx.joey.entity.report.Report", ety_party.getImports().iterator().next());
387         assertEquals(1, ety_report.getImports().size());
388         assertEquals("org.asyrinx.joey.entity.party.Party", ety_report.getImports().iterator().next());
389     }
390 }