001    /* ========================================================================
002     * JCommon : a free general purpose class library for the Java(tm) platform
003     * ========================================================================
004     *
005     * (C) Copyright 2000-2005, by Object Refinery Limited and Contributors.
006     * 
007     * Project Info:  http://www.jfree.org/jcommon/index.html
008     *
009     * This library is free software; you can redistribute it and/or modify it 
010     * under the terms of the GNU Lesser General Public License as published by 
011     * the Free Software Foundation; either version 2.1 of the License, or 
012     * (at your option) any later version.
013     *
014     * This library is distributed in the hope that it will be useful, but 
015     * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY 
016     * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public 
017     * License for more details.
018     *
019     * You should have received a copy of the GNU Lesser General Public
020     * License along with this library; if not, write to the Free Software
021     * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
022     * USA.  
023     *
024     * [Java is a trademark or registered trademark of Sun Microsystems, Inc. 
025     * in the United States and other countries.]
026     * 
027     * ---------------------
028     * ClassDescription.java
029     * ---------------------
030     * (C)opyright 2003, 2004, by Thomas Morgner and Contributors.
031     *
032     * Original Author:  Thomas Morgner;
033     * Contributor(s):   David Gilbert (for Object Refinery Limited);
034     *
035     * $Id: ClassDescription.java,v 1.2 2005/10/18 13:32:37 mungady Exp $
036     *
037     * Changes
038     * -------
039     * 21-Jun-2003 : Initial version (TM);
040     * 26-Nov-2003 : Updated header and Javadocs (DG);
041     * 
042     */
043    
044    package org.jfree.xml.generator.model;
045    
046    /**
047     * A description of a Java class.
048     */
049    public class ClassDescription {
050    
051        /** Storage for info about properties. */
052        private PropertyInfo[] properties;
053        
054        /** Constructor descriptions. */
055        private TypeInfo[] constructorDescription;
056        
057        /** The class. */
058        private Class objectClass;
059        
060        /** A description. */
061        private String description;
062        
063        /** The register key. */
064        private String registerKey;
065        
066        /** The super class. */
067        private Class superClass;
068        
069        /** ??. */
070        private boolean preserve;
071        
072        /** The comments. */
073        private Comments comments;
074        
075        /** The source. */
076        private String source;
077    
078        /**
079         * Creates a new class description.
080         * 
081         * @param objectClass  the class.
082         */
083        public ClassDescription(final Class objectClass) {
084            if (objectClass == null) {
085                throw new NullPointerException();
086            }
087            this.objectClass = objectClass;
088        }
089    
090        /**
091         * Returns the info about properties.
092         * 
093         * @return the info about properties.
094         */
095        public PropertyInfo[] getProperties() {
096            return this.properties;
097        }
098    
099        /**
100         * Sets the info about the class properties.
101         * 
102         * @param properties  the properties.
103         */
104        public void setProperties(final PropertyInfo[] properties) {
105            this.properties = properties;
106        }
107    
108        /**
109         * Returns the object's class.
110         * 
111         * @return the object's class.
112         */
113        public Class getObjectClass() {
114            return this.objectClass;
115        }
116    
117        /**
118         * Returns the description.
119         * 
120         * @return the description.
121         */
122        public String getDescription() {
123            return this.description;
124        }
125    
126        /**
127         * Sets the description for the object.
128         * 
129         * @param description  the description.
130         */
131        public void setDescription(final String description) {
132            this.description = description;
133        }
134    
135        /**
136         * Returns the class name.
137         * 
138         * @return the class name.
139         */
140        public String getName() {
141            if (getObjectClass() == null) {
142                return null;
143            }
144            return getObjectClass().getName();
145        }
146    
147        /**
148         * Returns the super class.
149         * 
150         * @return the super class.
151         */
152        public Class getSuperClass() {
153            return this.superClass;
154        }
155    
156        /**
157         * Sets the super class.
158         * 
159         * @param superClass  the super class.
160         */
161        public void setSuperClass(final Class superClass) {
162            this.superClass = superClass;
163        }
164    
165        /**
166         * Returns the preserve flag.
167         * 
168         * @return a boolean.
169         */
170        public boolean isPreserve() {
171            return this.preserve;
172        }
173    
174        /**
175         * Sets the preserve flag.
176         * 
177         * @param preserve  the new value of the flag.
178         */
179        public void setPreserve(final boolean preserve) {
180            this.preserve = preserve;
181        }
182    
183        /**
184         * Returns the register key.
185         * 
186         * @return the register key.
187         */
188        public String getRegisterKey() {
189            return this.registerKey;
190        }
191    
192        /**
193         * Sets the register key.
194         * 
195         * @param registerKey the register key.
196         */
197        public void setRegisterKey(final String registerKey) {
198            this.registerKey = registerKey;
199        }
200    
201        /**
202         * Returns the constructor descriptions.
203         * 
204         * @return the constructor descriptions.
205         */
206        public TypeInfo[] getConstructorDescription() {
207            return this.constructorDescription;
208        }
209    
210        /**
211         * Sets the constructor description.
212         * 
213         * @param constructorDescription  the constructor description.
214         */
215        public void setConstructorDescription(final TypeInfo[] constructorDescription) {
216            this.constructorDescription = constructorDescription;
217        }
218    
219        /**
220         * Returns a property.
221         * 
222         * @param name  the property name.
223         * 
224         * @return a property.
225         */
226        public PropertyInfo getProperty (final String name) {
227            if (this.properties == null) {
228                return null;
229            }
230            for (int i = 0; i < this.properties.length; i++) {
231                if (this.properties[i].getName().equals(name)) {
232                    return this.properties[i];
233                }
234            }
235            return null;
236        }
237    
238        /**
239         * Returns <code>true</code> if the description is undefined.
240         * 
241         * @return a boolean.
242         */
243        public boolean isUndefined() {
244            if (this.properties != null) {
245                if (this.properties.length > 0) {
246                    return false;
247                }
248            }
249            if (isPreserve()) {
250                return false;
251            }
252            if (getRegisterKey() != null) {
253                return false;
254            }
255            if (getConstructorDescription() != null) {
256                if (getConstructorDescription().length > 0) {
257                    return false;
258                }
259            }
260            return true;
261        }
262    
263        /**
264         * Returns the comments for the class description.
265         * 
266         * @return The comments.
267         */
268        public Comments getComments() {
269            return this.comments;
270        }
271    
272        /**
273         * Sets the comments for the class description.
274         * 
275         * @param comments  the comments.
276         */
277        public void setComments(final Comments comments) {
278            this.comments = comments;
279        }
280    
281        /**
282         * Returns the source for the class description.
283         * 
284         * @return The source.
285         */
286        public String getSource() {
287            return this.source;
288        }
289    
290        /**
291         * Sets the source for the class description.
292         * 
293         * @param source  the source.
294         */
295        public void setSource(final String source) {
296            this.source = source;
297        }
298        
299    }
300