    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
    043    package org.jfree.xml.generator.model;
    044
    045    import 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     */
    055    public 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    }