    001/* ===========================================================
    002 * JFreeChart : a free chart library for the Java(tm) platform
    003 * ===========================================================
    004 *
    005 * (C) Copyright 2000-2011, by Object Refinery Limited and Contributors.
    006 *
    007 * Project Info:  http://www.jfree.org/jfreechart/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 * [Oracle and Java are registered trademarks of Oracle and/or its affiliates.
    025 * Other names may be trademarks of their respective owners.]
    026 *
    027 * ----------------
    028 * TitleEntity.java
    029 * ----------------
    030 * (C) Copyright 2009, by Object Refinery Limited and Contributors.
    031 *
    032 * Original Author:  Peter Kolb;
    033 * Contributor(s):   ;
    034 *
    035 * Changes:
    036 * --------
    037 * 15-Feb-2009 : Version 1 (PK);
    038 *
    039 */
    040
    041package org.jfree.chart.entity;
    042
    043import java.awt.Shape;
    044import java.io.IOException;
    045import java.io.ObjectInputStream;
    046import java.io.ObjectOutputStream;
    047
    048import org.jfree.chart.HashUtilities;
    049import org.jfree.chart.title.Title;
    050import org.jfree.io.SerialUtilities;
    051import org.jfree.util.ObjectUtilities;
    052
    053/**
    054 * A class that captures information about a Title of a chart.
    055 *
    056 * @since 1.0.13
    057 */
    058public class TitleEntity extends ChartEntity {
    059
    060    /** For serialization. */
    061    private static final long serialVersionUID = -4445994133561919083L;
    062            //same as for ChartEntity!
    063
    064    /** The Title for the entity. */
    065    private Title title;
    066
    067    /**
    068     * Creates a new chart entity.
    069     *
    070     * @param area  the area (<code>null</code> not permitted).
    071     * @param title  the title (<code>null</code> not permitted).
    072     */
    073    public TitleEntity(Shape area, Title title) {
    074        // defer argument checks...
    075        this(area, title, null);
    076    }
    077
    078    /**
    079     * Creates a new chart entity.
    080     *
    081     * @param area  the area (<code>null</code> not permitted).
    082     * @param title  the title (<code>null</code> not permitted).
    083     * @param toolTipText  the tool tip text (<code>null</code> permitted).
    084     */
    085    public TitleEntity(Shape area, Title title, String toolTipText) {
    086        // defer argument checks...
    087        this(area, title, toolTipText, null);
    088    }
    089
    090    /**
    091     * Creates a new entity.
    092     *
    093     * @param area  the area (<code>null</code> not permitted).
    094     * @param title  the title (<code>null</code> not permitted).
    095     * @param toolTipText  the tool tip text (<code>null</code> permitted).
    096     * @param urlText  the URL text for HTML image maps (<code>null</code>
    097     *                 permitted).
    098     */
    099    public TitleEntity(Shape area, Title title, String toolTipText,
    100            String urlText) {
    101        super(area, toolTipText, urlText);
    102        if (title == null) {
    103            throw new IllegalArgumentException("Null 'title' argument.");
    104        }
    105
    106        this.title = title;
    107    }
    108
    109    /**
    110     * Returns the title that occupies the entity area.
    111     *
    112     * @return The title (never <code>null</code>).
    113     */
    114    public Title getTitle() {
    115        return this.title;
    116    }
    117
    118    /**
    119     * Returns a string representation of the chart entity, useful for
    120     * debugging.
    121     *
    122     * @return A string.
    123     */
    124    public String toString() {
    125        StringBuffer buf = new StringBuffer("TitleEntity: ");
    126        buf.append("tooltip = ");
    127        buf.append(getToolTipText());
    128        return buf.toString();
    129    }
    130
    131    /**
    132     * Tests the entity for equality with an arbitrary object.
    133     *
    134     * @param obj  the object to test against (<code>null</code> permitted).
    135     *
    136     * @return A boolean.
    137     */
    138    public boolean equals(Object obj) {
    139        if (obj == this) {
    140            return true;
    141        }
    142        if (!(obj instanceof TitleEntity)) {
    143            return false;
    144        }
    145        TitleEntity that = (TitleEntity) obj;
    146        if (!getArea().equals(that.getArea())) {
    147            return false;
    148        }
    149        if (!ObjectUtilities.equal(getToolTipText(), that.getToolTipText())) {
    150            return false;
    151        }
    152        if (!ObjectUtilities.equal(getURLText(), that.getURLText())) {
    153            return false;
    154        }
    155        if (!(this.title.equals(that.title))) {
    156            return false;
    157        }
    158        return true;
    159    }
    160
    161    /**
    162     * Returns a hash code for this instance.
    163     *
    164     * @return A hash code.
    165     */
    166    public int hashCode() {
    167        int result = 41;
    168        result = HashUtilities.hashCode(result, getToolTipText());
    169        result = HashUtilities.hashCode(result, getURLText());
    170        return result;
    171    }
    172
    173    /**
    174     * Returns a clone of the entity.
    175     *
    176     * @return A clone.
    177     *
    178     * @throws CloneNotSupportedException if there is a problem cloning the
    179     *         entity.
    180     */
    181    public Object clone() throws CloneNotSupportedException {
    182        return super.clone();
    183    }
    184
    185    /**
    186     * Provides serialization support.
    187     *
    188     * @param stream  the output stream.
    189     *
    190     * @throws IOException  if there is an I/O error.
    191     */
    192    private void writeObject(ObjectOutputStream stream) throws IOException {
    193        stream.defaultWriteObject();
    194        SerialUtilities.writeShape(getArea(), stream);
    195     }
    196
    197    /**
    198     * Provides serialization support.
    199     *
    200     * @param stream  the input stream.
    201     *
    202     * @throws IOException  if there is an I/O error.
    203     * @throws ClassNotFoundException  if there is a classpath problem.
    204     */
    205    private void readObject(ObjectInputStream stream)
    206            throws IOException, ClassNotFoundException {
    207        stream.defaultReadObject();
    208        setArea(SerialUtilities.readShape(stream));
    209    }
    210
    211}