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 * MultiplexMappingInfo.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: MultiplexMappingInfo.java,v 1.2 2005/10/18 13:32:37 mungady Exp $
036 *
037 * Changes 
038 * -------
039 * 16-Nov-2003 : Initial version
040 *  
041 */
042
043package org.jfree.xml.generator.model;
044
045import java.util.Arrays;
046
047/**
048 * Defines the multiplex entries for a certain base class. Multiplexers are
049 * used to select a specific handler if more than one class will match the
050 * property type.
051 * <p>
052 * Multiplexers override automatic mappings and can be redefined using manual
053 * mappings.
054 */
055public class MultiplexMappingInfo {
056    
057    /** The base class. */
058    private Class baseClass;
059    
060    /** The type attribute. */
061    private String typeAttribute;
062    
063    /** The child classes. */
064    private TypeInfo[] childClasses;
065    
066    /** The comments. */
067    private Comments comments;
068    
069    /** The source. */
070    private String source;
071
072    /**
073     * Creates a new instance for the specified class.
074     * 
075     * @param baseClass  the base class.
076     */
077    public MultiplexMappingInfo(final Class baseClass) {
078        this(baseClass, "type");
079    }
080
081    /**
082     * Creates a new instance for the specified class.
083     * 
084     * @param baseClass  the base class (<code>null</code> not permitted).
085     * @param typeAttribute  the type attribute (<code>null</code> not permitted).
086     */
087    public MultiplexMappingInfo(final Class baseClass, final String typeAttribute) {
088        if (baseClass == null) {
089            throw new NullPointerException("BaseClass");
090        }
091        if (typeAttribute == null) {
092            throw new NullPointerException("TypeAttribute");
093        }
094        this.baseClass = baseClass;
095        this.typeAttribute = typeAttribute;
096    }
097
098    /**
099     * Returns the base class.
100     * 
101     * @return The base class.
102     */
103    public Class getBaseClass() {
104        return this.baseClass;
105    }
106
107    /**
108     * Returns the type attribute.
109     * 
110     * @return The type attribute.
111     */
112    public String getTypeAttribute() {
113        return this.typeAttribute;
114    }
115
116    /**
117     * Returns the child classes.
118     * 
119     * @return The child classes.
120     */
121    public TypeInfo[] getChildClasses() {
122        return this.childClasses;
123    }
124
125    /**
126     * Sets the child classes.
127     * 
128     * @param childClasses  the child classes.
129     */
130    public void setChildClasses(final TypeInfo[] childClasses) {
131        this.childClasses = childClasses;
132    }
133
134    /**
135     * Returns the comments.
136     * 
137     * @return The comments.
138     */
139    public Comments getComments() {
140        return this.comments;
141    }
142
143    /**
144     * Sets the comments.
145     * 
146     * @param comments  the comments.
147     */
148    public void setComments(final Comments comments) {
149        this.comments = comments;
150    }
151
152    /**
153     * Returns the source.
154     * 
155     * @return The source.
156     */
157    public String getSource() {
158        return this.source;
159    }
160
161    /**
162     * Sets the source.
163     * 
164     * @param source  the source.
165     */
166    public void setSource(final String source) {
167        this.source = source;
168    }
169
170    /**
171     * Tests this object for equality with another object.
172     * 
173     * @param o  the other object.
174     * 
175     * @return A boolean.
176     */
177    public boolean equals(final Object o) {
178        if (this == o) {
179            return true;
180        }
181        if (!(o instanceof MultiplexMappingInfo)) {
182            return false;
183        }
184
185        final MultiplexMappingInfo multiplexMappingInfo = (MultiplexMappingInfo) o;
186
187        if (!this.baseClass.equals(multiplexMappingInfo.baseClass)) {
188            return false;
189        }
190        if (!Arrays.equals(this.childClasses, multiplexMappingInfo.childClasses)) {
191            return false;
192        }
193        if (!this.typeAttribute.equals(multiplexMappingInfo.typeAttribute)) {
194            return false;
195        }
196
197        return true;
198    }
199
200    /**
201     * Returns a hash code for this object.
202     * 
203     * @return A hash code.
204     */
205    public int hashCode() {
206        int result;
207        result = this.baseClass.hashCode();
208        result = 29 * result + this.typeAttribute.hashCode();
209        return result;
210    }
211
212}