Source code: org/objectstyle/cayenne/map/DbAttribute.java
1 /* ====================================================================
2 *
3 * The ObjectStyle Group Software License, Version 1.0
4 *
5 * Copyright (c) 2002-2003 The ObjectStyle Group
6 * and individual authors of the software. All rights reserved.
7 *
8 * Redistribution and use in source and binary forms, with or without
9 * modification, are permitted provided that the following conditions
10 * are met:
11 *
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 *
15 * 2. Redistributions in binary form must reproduce the above copyright
16 * notice, this list of conditions and the following disclaimer in
17 * the documentation and/or other materials provided with the
18 * distribution.
19 *
20 * 3. The end-user documentation included with the redistribution, if
21 * any, must include the following acknowlegement:
22 * "This product includes software developed by the
23 * ObjectStyle Group (http://objectstyle.org/)."
24 * Alternately, this acknowlegement may appear in the software itself,
25 * if and wherever such third-party acknowlegements normally appear.
26 *
27 * 4. The names "ObjectStyle Group" and "Cayenne"
28 * must not be used to endorse or promote products derived
29 * from this software without prior written permission. For written
30 * permission, please contact andrus@objectstyle.org.
31 *
32 * 5. Products derived from this software may not be called "ObjectStyle"
33 * nor may "ObjectStyle" appear in their names without prior written
34 * permission of the ObjectStyle Group.
35 *
36 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
37 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
38 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
39 * DISCLAIMED. IN NO EVENT SHALL THE OBJECTSTYLE GROUP OR
40 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
41 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
42 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
43 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
44 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
45 * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
46 * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
47 * SUCH DAMAGE.
48 * ====================================================================
49 *
50 * This software consists of voluntary contributions made by many
51 * individuals on behalf of the ObjectStyle Group. For more
52 * information on the ObjectStyle Group, please see
53 * <http://objectstyle.org/>.
54 *
55 */
56
57 package org.objectstyle.cayenne.map;
58
59 import org.objectstyle.cayenne.dba.TypesMapping;
60 import org.objectstyle.cayenne.map.event.AttributeEvent;
61 import org.objectstyle.cayenne.map.event.DbAttributeListener;
62
63 /**
64 * A DbAttribute defines a descriptor for a single database table column.
65 *
66 * @author Misha Shengaout
67 * @author Andrei Adamchik
68 */
69 public class DbAttribute extends Attribute {
70 /**
71 * The type of the column.
72 */
73 protected int type = TypesMapping.NOT_DEFINED;
74
75 /**
76 * If <code>true</code>, column corresponding to
77 * this attribute does not allows nulls.
78 */
79 protected boolean mandatory;
80
81 /**
82 * If <code>true</code>, this attribute is
83 * a part of primary key.
84 */
85 protected boolean primaryKey;
86
87 // The length of CHAR or VARCHAr or max num of digits for DECIMAL.
88 protected int maxLength = -1;
89
90 // The number of digits after period for DECIMAL.
91 protected int precision = -1;
92
93 public DbAttribute() {
94 super();
95 }
96
97 public DbAttribute(String name) {
98 super(name);
99 }
100
101 public DbAttribute(String name, int type, DbEntity entity) {
102 this.setName(name);
103 this.setType(type);
104 this.setEntity(entity);
105 }
106
107 public String getAliasedName(String alias) {
108 return (alias != null) ? alias + '.' + this.getName() : this.getName();
109 }
110
111 /**
112 * Returns the SQL type of the column.
113 *
114 * @see java.sql.Types
115 */
116 public int getType() {
117 return type;
118 }
119
120 /**
121 * Sets the SQL type for the column.
122 *
123 * @see java.sql.Types
124 */
125 public void setType(int type) {
126 this.type = type;
127 }
128
129 public boolean isPrimaryKey() {
130 return primaryKey;
131 }
132
133 public void setPrimaryKey(boolean primaryKey) {
134 this.primaryKey = primaryKey;
135 Entity e = this.getEntity();
136 if (e instanceof DbAttributeListener) {
137 ((DbAttributeListener)e).dbAttributeChanged(new AttributeEvent(this, this, e));
138 }
139 }
140
141 public boolean isMandatory() {
142 return mandatory;
143 }
144
145 public void setMandatory(boolean mandatory) {
146 this.mandatory = mandatory;
147 }
148
149 /** Returns the length of database column described by this attribute. */
150 public int getMaxLength() {
151 return maxLength;
152 }
153
154 /** Sets the length of character or binary type or max num of digits for DECIMAL.*/
155 public void setMaxLength(int maxLength) {
156 this.maxLength = maxLength;
157 }
158
159 /** Returns the number of digits after period for DECIMAL.*/
160 public int getPrecision() {
161 return precision;
162 }
163
164 /** Sets the number of digits after period for DECIMAL.*/
165 public void setPrecision(int precision) {
166 this.precision = precision;
167 }
168
169 /** Appends string representation of attribute to a provided buffer.
170 * This is a variation of "toString" method. It may be more
171 * efficient in some cases. For example, when printing all
172 * attributes of a single entity together. */
173 public StringBuffer toStringBuffer(StringBuffer buf) {
174 buf.append(" Column name: " + this.getName() + "\n");
175 buf.append(" Column type: " + type + "\n");
176 return buf;
177 }
178
179 public String toString() {
180 StringBuffer buf = new StringBuffer("DbAttribute\n");
181 return this.toStringBuffer(buf).toString();
182 }
183
184 }