KickJava   Java API By Example, From Geeks To Geeks.

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


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 HypersonicSchemaGenerator extends SchemaGenerator
40 {
41   public HypersonicSchemaGenerator(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 += " long raw ";
63     else if (prop.getTypeCode() == DjDomain.DATE_TYPE) result += " date ";
64     else if (prop.getTypeCode() == DjDomain.INT_TYPE) result += " decimal(" + prop.getLength() + ", 0) ";
65     else if (prop.getTypeCode() == DjDomain.LONG_TYPE) result += " decimal(" + prop.getLength() + ", 0) ";
66     else if (prop.getTypeCode() == DjDomain.STRING_TYPE)
67     {
68       if (prop.getLength() < 4000) result += " varchar(" + prop.getLength() + ") ";
69       else result += " clob ";
70     }
71     else throw new Exception JavaDoc("Unknown property type: " + prop.getTypeCode());
72
73     if (prop.isRequired()) result += " not null";
74     if (!isLast) result += ",";
75     result += "\n";
76
77     return result;
78   }
79
80   public String JavaDoc getTableCreateEnd(DjExtent extent) throws Exception JavaDoc
81   {
82     return ");\n\n";
83   }
84
85   public String JavaDoc getTablePk(DjExtent extent, int idx) throws Exception JavaDoc
86   {
87     String JavaDoc result = "";
88     if (idx == 0) result += "\n-- Primary keys\n";
89
90     result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_pk primary key("
91               + extent.getIdProperty().getName() + ");\n";
92     return result;
93   }
94
95   public String JavaDoc getRelation(DjRelation relation, int idx, int idxInTable) throws Exception JavaDoc
96   {
97     String JavaDoc result = "";
98     if (idx == 0) result += "\n-- Foreign keys\n";
99
100     DjExtent extent = relation.getDetailExtent();
101     result += "alter table " + getTableName(extent) + " add constraint " + getTableName(extent) + "_fk" + idxInTable
102               + " foreign key(" + relation.getDetailProperty().getName() + ") references "
103               + getTableName(relation.getMasterExtent()) + "(" + relation.getMasterExtent().getIdProperty().getName()
104               + ");\n";
105     return result;
106   }
107
108   public String JavaDoc getIndex(DjRelation relation, int idx, int idxInTable) throws Exception JavaDoc
109   {
110     String JavaDoc result = "";
111     if (idx == 0) result += "\n-- Indexes on foreign key columns\n";
112
113     DjExtent extent = relation.getDetailExtent();
114     result += "create index " + getTableName(extent) + "_" + idxInTable + " on " + getTableName(extent) + "("
115               + relation.getDetailProperty().getName() + ");\n";
116     return result;
117   }
118 }
Popular Tags