KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > tools > modeler > schemagenerator > DB2SchemaGenerator


1 /*
2  * Copyright (c) 2001-2005 by Genimen BV (www.genimen.com) All rights reserved.
3  *
4  * Redistribution and use in source and binary forms, with or without modification, is permitted
5  * provided that the following conditions are met:
6  * - Redistributions of source code must retain the above copyright notice, this list of conditions
7  * and the following disclaimer.
8  * - Redistributions in binary form must reproduce the above copyright notice, this list of
9  * conditions and the following disclaimer in the documentation and/or other materials
10  * provided with the distribution.
11  * - All advertising materials mentioning features or use of this software must display the
12  * following acknowledgment: "This product includes Djeneric."
13  * - Products derived from this software may not be called "Djeneric" nor may
14  * "Djeneric" appear in their names without prior written permission of Genimen BV.
15  * - Redistributions of any form whatsoever must retain the following acknowledgment: "This
16  * product includes Djeneric."
17  *
18  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDER AND CONTRIBUTORS "AS IS"
19  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21  * ARE DISCLAIMED. IN NO EVENT SHALL GENIMEN BV, DJENERIC.ORG,
22  * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
23  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
24  * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
25  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
26  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
28  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29  */

30 package com.genimen.djeneric.tools.modeler.schemagenerator;
31
32 import com.genimen.djeneric.repository.DjDomain;
33 import com.genimen.djeneric.repository.DjExtent;
34 import com.genimen.djeneric.repository.DjPersistenceManager;
35 import com.genimen.djeneric.repository.DjProperty;
36 import com.genimen.djeneric.repository.DjRelation;
37 import com.genimen.djeneric.repository.rdbmsdirect.RdbmsDirectPersistenceManager;
38
39 public class DB2SchemaGenerator extends SchemaGenerator
40 {
41   public DB2SchemaGenerator(DjPersistenceManager mgr)
42   {
43     super(mgr);
44   }
45
46   public String JavaDoc getTableCreateStart(DjExtent extent) throws Exception JavaDoc
47   {
48     return "-- Objects of type " + extent.getObjectType() + "\n" + "create table " + getTableName(extent) + "(\n";
49   }
50
51   public String JavaDoc getTypeColumnCreate(DjExtent extent) throws Exception JavaDoc
52   {
53     return " " + RdbmsDirectPersistenceManager.OBJECT_TYPE_COLUMN + " varchar("
54            + RdbmsDirectPersistenceManager.MAX_INTERNAL_CODE_LENGTH + ") not null,\n";
55   }
56
57   public String JavaDoc getColumnCreate(DjProperty prop, boolean isFirst, boolean isLast) throws Exception JavaDoc
58   {
59     String JavaDoc result = " " + prop.getName() + " ";
60     if (prop.getTypeCode() == DjDomain.BIGDECIMAL_TYPE) result += " decimal(" + prop.getLength() + ", "
61                                                                   + prop.getDecimals() + ") ";
62     else if (prop.getTypeCode() == DjDomain.BYTE_TYPE) result += " blob ("
63                                                                  + (prop.getLength() == 0 ? "1 M" : String.valueOf(prop
64                                                                      .getLength())) + ") ";
65     else if (prop.getTypeCode() == DjDomain.DATE_TYPE) result += " timestamp ";
66     else if (prop.getTypeCode() == DjDomain.INT_TYPE) result += " integer(" + prop.getLength() + ", 0) ";
67     else if (prop.getTypeCode() == DjDomain.LONG_TYPE) result += " decimal(" + prop.getLength() + ", 0) ";
68     else if (prop.getTypeCode() == DjDomain.STRING_TYPE)
69     {
70       result += " varchar(" + prop.getLength() + ") ";
71     }
72     else throw new Exception JavaDoc("Unknown property type: " + prop.getTypeCode());
73
74     if (prop.isRequired()) result += " not null";
75     if (!isLast) result += ",";
76     result += "\n";
77
78     return result;
79   }
80
81   public String JavaDoc getTableCreateEnd(DjExtent extent) throws Exception JavaDoc
82   {
83     return ");\n\n";
84   }
85
86   public String JavaDoc getTablePk(DjExtent extent, int idx) throws Exception JavaDoc
87   {
88     String JavaDoc result = "";
89     if (idx == 0) result += "\n-- Primary keys\n";
90
91     result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_pk primary key("
92               + extent.getIdProperty().getName() + ");\n";
93     return result;
94   }
95
96   public String JavaDoc getRelation(DjRelation relation, int idx, int idxInTable) throws Exception JavaDoc
97   {
98     String JavaDoc result = "";
99     if (idx == 0) result += "\n-- Foreign keys\n";
100
101     DjExtent extent = relation.getDetailExtent();
102     result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_fk" + idxInTable
103               + " foreign key(" + relation.getDetailProperty().getName() + ") references "
104               + getTableName(relation.getMasterExtent()) + "(" + relation.getMasterExtent().getIdProperty().getName()
105               + ");\n";
106     return result;
107   }
108
109   public String JavaDoc getIndex(DjRelation relation, int idx, int idxInTable) throws Exception JavaDoc
110   {
111     String JavaDoc result = "";
112     if (idx == 0) result += "\n-- Indexes on foreign key columns\n";
113
114     DjExtent extent = relation.getDetailExtent();
115     result += "create index " + getTableName(extent) + "_" + idxInTable + " on " + getTableName(extent) + "("
116               + relation.getDetailProperty().getName() + ");\n";
117     return result;
118   }
119 }
Popular Tags