1 /*
2 * Copyright 2009 Werner Guttmann
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16 package org.exolab.javasource;
17
18 /**
19 * A (abstract) base class which holds information about fields. Modeled closely after the
20 * Java Reflection API. This class is part of package which is used to create
21 * source code in memory.
22 *
23 * @author <a href="mailto:wguttmn AT codehaus DOT org">Werner Guttmann</a>
24 * @since 1.3
25 */
26 public class AbstractJField extends JAnnotatedElementHelper implements JMember {
27
28 /** The set of modifiers for this JField. */
29 private JModifiers _modifiers = null;
30
31 /** Type of this field. */
32 private final JType _type;
33
34 /** Name of the field. */
35 private String _name = null;
36
37 /** JavaDoc for this field. */
38 private JDocComment _comment = new JDocComment();
39
40 /** Initialization string for this field. */
41 private String _initString = null;
42
43 /** Indicates whether this field is of type date/time. */
44 private boolean _isDateTime = false;
45
46 /** The Class in this JField has been declared. */
47 private JClass _declaringClass = null;
48
49 /**
50 * Creates a new JField.
51 *
52 * @param type JType of this new field.
53 * @param name Name of this new field.
54 */
55 public AbstractJField(final JType type, final String name) {
56 setName(name);
57
58 _type = type;
59
60 setModifiers(new JModifiers());
61 }
62
63 /**
64 * Returns the JavaDoc comment describing this member.
65 *
66 * @return The JavaDoc comment describing this member, or null if no comment
67 * has been set.
68 */
69 public JDocComment getComment() {
70 return _comment;
71 }
72
73 /**
74 * Returns the class in which this JField has been declared.
75 *
76 * @return The class in which this JField has been declared.
77 */
78 public JClass getDeclaringClass() {
79 return _declaringClass;
80 }
81
82 /**
83 * Returns the initialization String for this JField.
84 *
85 * @return The initialization String for this JField, or null if no
86 * initialization String was specified.
87 */
88 public String getInitString() {
89 return _initString;
90 }
91
92 /**
93 * Returns the modifiers for this JField.
94 *
95 * @return The modifiers for this JField.
96 */
97 public JModifiers getModifiers() {
98 return _modifiers;
99 }
100
101 /**
102 * Returns the name of this JField.
103 *
104 * @return The name of this JField.
105 */
106 public String getName() {
107 return _name;
108 }
109
110 /**
111 * Returns the JType representing the type of this JField.
112 *
113 * @return The JType representing the type of this JField.
114 */
115 public JType getType() {
116 return _type;
117 }
118
119 /**
120 * Sets the JavaDoc comment describing this JField.
121 *
122 * @param comment The JavaDoc comment for this JField.
123 */
124 public void setComment(final JDocComment comment) {
125 _comment = comment;
126 }
127
128 /**
129 * Sets the JavaDoc comment describing this JField.
130 *
131 * @param comment The JavaDoc comment for this JField.
132 */
133 public void setComment(final String comment) {
134 _comment.setComment(comment);
135 }
136
137 /**
138 * Sets the initialization string for this JField. This allows some
139 * flexibility in declaring default values.
140 *
141 * @param init The initialization string for this member.
142 */
143 public void setInitString(final String init) {
144 _initString = init;
145 }
146
147 /**
148 * Sets the name of this JField.
149 *
150 * @param name The name of this JField.
151 */
152 public void setName(final String name) {
153 if (!JNaming.isValidJavaIdentifier(name)) {
154 String err = "'" + name + "' is ";
155 if (JNaming.isKeyword(name)) {
156 err += "a reserved word and may not be used as "
157 + " a field name.";
158 } else {
159 err += "not a valid Java identifier.";
160 }
161 throw new IllegalArgumentException(err);
162 }
163 _name = name;
164 }
165
166 /**
167 * Sets the access modifiers on this JField.
168 *
169 * @param modifiers The access modifiers to be used for this JField.
170 */
171 public void setModifiers(final JModifiers modifiers) {
172 _modifiers = modifiers;
173 }
174
175 /**
176 * Sets the class that declares this JField.
177 *
178 * @param declaringClass The class in which this Jfield is declared.
179 */
180 protected void setDeclaringClass(final JClass declaringClass) {
181 _declaringClass = declaringClass;
182 }
183
184 /**
185 * Indicates whether this JField instance represents a field of type date/time.
186 *
187 * @return True if this field is of type date/time.
188 */
189 public boolean isDateTime() {
190 return _isDateTime;
191 }
192
193 /**
194 * To indicate whether this JField instance represents a field of type date/time.
195 *
196 * @param isDateTime True if this field is of type date/time.
197 */
198 public void setDateTime(final boolean isDateTime) {
199 _isDateTime = isDateTime;
200 }
201
202 /**
203 * {@inheritDoc}
204 */
205 public String toString() {
206 StringBuilder sb = new StringBuilder();
207 sb.append(_modifiers.toString());
208 sb.append(' ');
209 sb.append(_type);
210 sb.append(' ');
211 sb.append(_name);
212 return sb.toString();
213 }
214
215 }