KickJava   Java API By Example, From Geeks To Geeks.

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


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