    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     * TextAnchor.java
    029     * ---------------
    030     * (C) Copyright 2003-2005, by Object Refinery Limited.
    031     *
    032     * Original Author:  David Gilbert (for Object Refinery Limited);
    033     * Contributor(s):   -;
    034     *
    035     * $Id: TextAnchor.java,v 1.5 2005/10/18 13:18:34 mungady Exp $
    036     *
    037     * Changes:
    038     * --------
    039     * 10-Jun-2003 : Version 1 (DG);
    040     * 11-Jan-2005 : Removed deprecated code (DG);
    041     *
    042     */
    043
    044    package org.jfree.ui;
    045
    046    import java.io.ObjectStreamException;
    047    import java.io.Serializable;
    048
    049    /**
    050     * Used to indicate the position of an anchor point for a text string.  This is
    051     * frequently used to align a string to a fixed point in some coordinate space.
    052     *
    053     * @author David Gilbert
    054     */
    055    public final class TextAnchor implements Serializable {
    056
    057        /** For serialization. */
    058        private static final long serialVersionUID = 8219158940496719660L;
    059
    060        /** Top/left. */
    061        public static final TextAnchor TOP_LEFT
    062            = new TextAnchor("TextAnchor.TOP_LEFT");
    063
    064        /** Top/center. */
    065        public static final TextAnchor TOP_CENTER
    066            = new TextAnchor("TextAnchor.TOP_CENTER");
    067
    068        /** Top/right. */
    069        public static final TextAnchor TOP_RIGHT
    070            = new TextAnchor("TextAnchor.TOP_RIGHT");
    071
    072        /** Half-ascent/left. */
    073        public static final TextAnchor HALF_ASCENT_LEFT
    074            = new TextAnchor("TextAnchor.HALF_ASCENT_LEFT");
    075
    076        /** Half-ascent/center. */
    077        public static final TextAnchor HALF_ASCENT_CENTER
    078            = new TextAnchor("TextAnchor.HALF_ASCENT_CENTER");
    079
    080        /** Half-ascent/right. */
    081        public static final TextAnchor HALF_ASCENT_RIGHT
    082            = new TextAnchor("TextAnchor.HALF_ASCENT_RIGHT");
    083
    084        /** Middle/left. */
    085        public static final TextAnchor CENTER_LEFT
    086            = new TextAnchor("TextAnchor.CENTER_LEFT");
    087
    088        /** Middle/center. */
    089        public static final TextAnchor CENTER = new TextAnchor("TextAnchor.CENTER");
    090
    091        /** Middle/right. */
    092        public static final TextAnchor CENTER_RIGHT
    093            = new TextAnchor("TextAnchor.CENTER_RIGHT");
    094
    095        /** Baseline/left. */
    096        public static final TextAnchor BASELINE_LEFT
    097            = new TextAnchor("TextAnchor.BASELINE_LEFT");
    098
    099        /** Baseline/center. */
    100        public static final TextAnchor BASELINE_CENTER
    101            = new TextAnchor("TextAnchor.BASELINE_CENTER");
    102
    103        /** Baseline/right. */
    104        public static final TextAnchor BASELINE_RIGHT
    105            = new TextAnchor("TextAnchor.BASELINE_RIGHT");
    106
    107        /** Bottom/left. */
    108        public static final TextAnchor BOTTOM_LEFT
    109            = new TextAnchor("TextAnchor.BOTTOM_LEFT");
    110
    111        /** Bottom/center. */
    112        public static final TextAnchor BOTTOM_CENTER
    113            = new TextAnchor("TextAnchor.BOTTOM_CENTER");
    114
    115        /** Bottom/right. */
    116        public static final TextAnchor BOTTOM_RIGHT
    117            = new TextAnchor("TextAnchor.BOTTOM_RIGHT");
    118
    119        /** The name. */
    120        private String name;
    121
    122        /**
    123         * Private constructor.
    124         *
    125         * @param name  the name.
    126         */
    127        private TextAnchor(final String name) {
    128            this.name = name;
    129        }
    130
    131        /**
    132         * Returns a string representing the object.
    133         *
    134         * @return The string.
    135         */
    136        public String toString() {
    137            return this.name;
    138        }
    139
    140        /**
    141         * Returns <code>true</code> if this object is equal to the specified
    142         * object, and <code>false</code> otherwise.
    143         *
    144         * @param o  the other object.
    145         *
    146         * @return A boolean.
    147         */
    148        public boolean equals(final Object o) {
    149
    150            if (this == o) {
    151                return true;
    152            }
    153            if (!(o instanceof TextAnchor)) {
    154                return false;
    155            }
    156
    157            final TextAnchor order = (TextAnchor) o;
    158            if (!this.name.equals(order.name)) {
    159                return false;
    160            }
    161
    162            return true;
    163        }
    164
    165        /**
    166         * Returns a hash code value for the object.
    167         *
    168         * @return The hashcode
    169         */
    170        public int hashCode() {
    171            return this.name.hashCode();
    172        }
    173
    174        /**
    175         * Ensures that serialization returns the unique instances.
    176         *
    177         * @return The object.
    178         *
    179         * @throws ObjectStreamException if there is a problem.
    180         */
    181        private Object readResolve() throws ObjectStreamException {
    182            TextAnchor result = null;
    183            if (this.equals(TextAnchor.TOP_LEFT)) {
    184                result = TextAnchor.TOP_LEFT;
    185            }
    186            else if (this.equals(TextAnchor.TOP_CENTER)) {
    187                result = TextAnchor.TOP_CENTER;
    188            }
    189            else if (this.equals(TextAnchor.TOP_RIGHT)) {
    190                result = TextAnchor.TOP_RIGHT;
    191            }
    192            else if (this.equals(TextAnchor.BOTTOM_LEFT)) {
    193                result = TextAnchor.BOTTOM_LEFT;
    194            }
    195            else if (this.equals(TextAnchor.BOTTOM_CENTER)) {
    196                result = TextAnchor.BOTTOM_CENTER;
    197            }
    198            else if (this.equals(TextAnchor.BOTTOM_RIGHT)) {
    199                result = TextAnchor.BOTTOM_RIGHT;
    200            }
    201            else if (this.equals(TextAnchor.BASELINE_LEFT)) {
    202                result = TextAnchor.BASELINE_LEFT;
    203            }
    204            else if (this.equals(TextAnchor.BASELINE_CENTER)) {
    205                result = TextAnchor.BASELINE_CENTER;
    206            }
    207            else if (this.equals(TextAnchor.BASELINE_RIGHT)) {
    208                result = TextAnchor.BASELINE_RIGHT;
    209            }
    210            else if (this.equals(TextAnchor.CENTER_LEFT)) {
    211                result = TextAnchor.CENTER_LEFT;
    212            }
    213            else if (this.equals(TextAnchor.CENTER)) {
    214                result = TextAnchor.CENTER;
    215            }
    216            else if (this.equals(TextAnchor.CENTER_RIGHT)) {
    217                result = TextAnchor.CENTER_RIGHT;
    218            }
    219            else if (this.equals(TextAnchor.HALF_ASCENT_LEFT)) {
    220                result = TextAnchor.HALF_ASCENT_LEFT;
    221            }
    222            else if (this.equals(TextAnchor.HALF_ASCENT_CENTER)) {
    223                result = TextAnchor.HALF_ASCENT_CENTER;
    224            }
    225            else if (this.equals(TextAnchor.HALF_ASCENT_RIGHT)) {
    226                result = TextAnchor.HALF_ASCENT_RIGHT;
    227            }
    228            return result;
    229        }
    230
    231    }