    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}