KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > genimen > djeneric > repository > rdbmsdirect > RdbmsDirectExtent


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.repository.rdbmsdirect;
31
32 import com.genimen.djeneric.repository.DjExtent;
33 import com.genimen.djeneric.repository.DjObject;
34 import com.genimen.djeneric.repository.rdbms.RdbmsExtent;
35 import com.genimen.djeneric.util.DjLogger;
36
37 /**
38  * An DjExtent defines the persistent structure for a specific type of {@link
39  * DjObject}. An DjExtent uses properties that define the type, length etc. for
40  * the properties to be persisted; so there is a direct correlation between a
41  * {@link com.genimen.djeneric.repository.DjProperty} and the properties of a
42  * DjObject.
43  *
44  *@author Wido Riezebos
45  *@created 22 mei 2002
46  */

47
48 public class RdbmsDirectExtent extends RdbmsExtent
49 {
50   public RdbmsDirectExtent(String JavaDoc objectType, String JavaDoc name, String JavaDoc alias, String JavaDoc internalCode, String JavaDoc title,
51                            String JavaDoc nameSingular, String JavaDoc namePlural)
52   {
53     super(objectType, name, alias, internalCode, title, nameSingular, namePlural);
54   }
55
56   String JavaDoc _cachedSuperName = null;
57
58   /**
59    * Extents that are specializations of another extent are stored in the top
60    * level Super extent. So find the top level extent and return it's name To
61    * speed up the lookup the result is cached.
62    *
63    *@return The tableName value
64    */

65
66   protected String JavaDoc getTableName()
67   {
68     if (_cachedSuperName != null) return _cachedSuperName;
69
70     if (getSuper() == null) _cachedSuperName = getName();
71     else
72     {
73       DjExtent superExtent = getSuper();
74       while (superExtent.getSuper() != null)
75         superExtent = superExtent.getSuper();
76       _cachedSuperName = superExtent.getName();
77     }
78     return _cachedSuperName;
79   }
80
81   // Not every extent is stored in it's own (virtual) table so a type column
82
// is needed to distinguish the records of object types; but only where inheritance
83
// plays a role! So:
84
Boolean JavaDoc _usesTypeColumn = null;
85
86   public boolean multipleTypesInExtent()
87   {
88     if (_usesTypeColumn != null) return _usesTypeColumn.booleanValue();
89     _usesTypeColumn = new Boolean JavaDoc(isPartOfInheritanceChain());
90     return _usesTypeColumn.booleanValue();
91   }
92
93   /**
94    * Returns an exact deep copy of the extent
95    *
96    *@return Description of the Return Value
97    */

98   public Object JavaDoc clone()
99   {
100     RdbmsDirectExtent nt = new RdbmsDirectExtent(getObjectType(), getName(), getAlias(), getInternalCode(), getTitle(),
101         getNameSingular(), getNamePlural());
102     nt.setInternalId(getInternalId());
103
104     try
105     {
106       copyPropertiesInto(nt);
107     }
108     catch (Exception JavaDoc x)
109     {
110       DjLogger.log(x);
111       throw new RuntimeException JavaDoc("Internal error: RdbmsDirectExtent.clone() failed");
112     }
113
114     return nt;
115   }
116
117 }
Popular Tags