1 /*
2 * $Source$
3 * $Revision$
4 *
5 * Copyright (C) 2000 William Chesters
6 *
7 * Part of Melati (http://melati.org), a framework for the rapid
8 * development of clean, maintainable web applications.
9 *
10 * Melati is free software; Permission is granted to copy, distribute
11 * and/or modify this software under the terms either:
12 *
13 * a) the GNU General Public License as published by the Free Software
14 * Foundation; either version 2 of the License, or (at your option)
15 * any later version,
16 *
17 * or
18 *
19 * b) any version of the Melati Software License, as published
20 * at http://melati.org
21 *
22 * You should have received a copy of the GNU General Public License and
23 * the Melati Software License along with this program;
24 * if not, write to the Free Software Foundation, Inc.,
25 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA to obtain the
26 * GNU General Public License and visit http://melati.org to obtain the
27 * Melati Software License.
28 *
29 * Feel free to contact the Developers of Melati (http://melati.org),
30 * if you would like to work out a different arrangement than the options
31 * outlined here. It is our intention to allow Melati to be used by as
32 * wide an audience as possible.
33 *
34 * This program is distributed in the hope that it will be useful,
35 * but WITHOUT ANY WARRANTY; without even the implied warranty of
36 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
37 * GNU General Public License for more details.
38 *
39 * Contact details for copyright holder:
40 *
41 * William Chesters <williamc At paneris.org>
42 * http://paneris.org/~williamc
43 * Obrechtstraat 114, 2517VX Den Haag, The Netherlands
44 */
45
46 package org.melati.poem;
47
48 import org.melati.poem.util.StringUtils;
49
50 /**
51 * Base class of all {@link Field}s.
52 * All the fields of a Field except its value.
53 */
54 public class BaseFieldAttributes<T> implements FieldAttributes<T> {
55
56 private String name;
57 private String displayName;
58 private String description;
59 private PoemType<T> type;
60 private String renderInfo;
61 private int width, height;
62 private boolean indexed;
63 private boolean userEditable;
64 private boolean userCreateable;
65
66 /**
67 * Full Constructor.
68 *
69 * @param name simple name
70 * @param displayName human readable name
71 * @param description a short description
72 * @param type the PoemType of the new Field
73 * @param width how wide input widgets should be
74 * @param height how high input widgets should be
75 * @param renderInfo the name of a special templet to render this field
76 * @param indexed whether the Field is indexed.
77 * @param userEditable whether users should be able to modify the value
78 * @param userCreateable whether users should be allowed to create new instances
79 */
80 public BaseFieldAttributes(
81 String name, String displayName, String description, PoemType<T> type,
82 int width, int height, String renderInfo, boolean indexed,
83 boolean userEditable, boolean userCreateable) {
84 this.name = name;
85 this.displayName = displayName;
86 this.description = description;
87 this.type = type;
88 this.width = width;
89 this.height = height;
90 this.renderInfo = renderInfo;
91 this.indexed = indexed;
92 this.userEditable = userEditable;
93 this.userCreateable = userCreateable;
94 }
95
96
97 /**
98 * Convenience constructor.
99 *
100 * @param name used as the name and, capitalised, the display name
101 * @param type the Poem datatype
102 */
103 public BaseFieldAttributes(String name, PoemType<T> type) {
104 this(name, StringUtils.capitalised(name), null, type, 0, 0, null,
105 false, true, true);
106 }
107
108 /**
109 * Create a new BaseFieldAttributes based upon another, but overriding its type.
110 *
111 * @param other the FieldAttributes to clone
112 * @param type allows overriding of type
113 */
114 @SuppressWarnings("unchecked")
115 public BaseFieldAttributes(FieldAttributes<T> other, @SuppressWarnings("rawtypes") PoemType type) {
116 this(other.getName(), other.getDisplayName(), other.getDescription(),
117 type, other.getWidth(), other.getHeight(), other.getRenderInfo(),
118 other.getIndexed(), other.getUserEditable(),
119 other.getUserCreateable());
120 }
121
122 /**
123 * Create a new BaseFieldAttributes based upon another, overriding its name.
124 *
125 * @param other the FieldAttributes to clone
126 * @param name the new name
127 */
128 public BaseFieldAttributes(FieldAttributes<T> other, String name) {
129 this(name, other.getDisplayName(), other.getDescription(),
130 other.getType(), other.getWidth(), other.getHeight(),
131 other.getRenderInfo(),other.getIndexed(), other.getUserEditable(),
132 other.getUserCreateable());
133 }
134
135 /**
136 * Allow the description to vary as well.
137 * @param other the FieldAttributes to clone
138 * @param name the new name
139 * @param description the new description
140 */
141 public BaseFieldAttributes(FieldAttributes<T> other, String name,
142 String description) {
143 this(name, other.getDisplayName(), description,
144 other.getType(), other.getWidth(), other.getHeight(),
145 other.getRenderInfo(),
146 other.getIndexed(), other.getUserEditable(),
147 other.getUserCreateable());
148 }
149
150 /**
151 * Create a new BaseFieldAttributes based upon another, overriding its nullability.
152 *
153 * @param other the FieldAttributes to clone
154 * @param nullable the new nullability
155 */
156 public BaseFieldAttributes(FieldAttributes<T> other, boolean nullable) {
157 this(other, other.getType().withNullable(nullable));
158 }
159
160 /* (non-Javadoc)
161 * @see org.melati.poem.FieldAttributes#getName()
162 */
163 public String getName() {
164 return name;
165 }
166
167 /* (non-Javadoc)
168 * @see org.melati.poem.FieldAttributes#getDisplayName()
169 */
170 public String getDisplayName() {
171 return displayName;
172 }
173
174 /* (non-Javadoc)
175 * @see org.melati.poem.FieldAttributes#getDescription()
176 */
177 public String getDescription() {
178 return description;
179 }
180
181 /* (non-Javadoc)
182 * @see org.melati.poem.FieldAttributes#getType()
183 */
184 public PoemType<T> getType() {
185 return type;
186 }
187
188 /* (non-Javadoc)
189 * @see org.melati.poem.FieldAttributes#getIndexed()
190 */
191 public boolean getIndexed() {
192 return indexed;
193 }
194
195 /* (non-Javadoc)
196 * @see org.melati.poem.FieldAttributes#getUserEditable()
197 */
198 public boolean getUserEditable() {
199 return userEditable;
200 }
201
202 /* (non-Javadoc)
203 * @see org.melati.poem.FieldAttributes#getUserCreateable()
204 */
205 public boolean getUserCreateable() {
206 return userCreateable;
207 }
208
209 /* (non-Javadoc)
210 * @see org.melati.poem.FieldAttributes#getWidth()
211 */
212 public int getWidth() {
213 return width;
214 }
215
216 /* (non-Javadoc)
217 * @see org.melati.poem.FieldAttributes#getHeight()
218 */
219 public int getHeight() {
220 return height;
221 }
222
223 /* (non-Javadoc)
224 * @see org.melati.poem.FieldAttributes#getRenderInfo()
225 */
226 public String getRenderInfo() {
227 return renderInfo;
228 }
229 }