001package com.hfg.html.attribute;
002
003import java.io.Serializable;
004import java.util.ArrayList;
005import java.util.List;
006
007import com.hfg.html.HTML;
008
009//------------------------------------------------------------------------------
010/**
011 * Enum-like shape class
012 *
013 * @author J. Alex Taylor, hairyfatguy.com
014 */
015//------------------------------------------------------------------------------
016// com.hfg XML/HTML Coding Library
017//
018// This library is free software; you can redistribute it and/or
019// modify it under the terms of the GNU Lesser General Public
020// License as published by the Free Software Foundation; either
021// version 2.1 of the License, or (at your option) any later version.
022//
023// This library is distributed in the hope that it will be useful,
024// but WITHOUT ANY WARRANTY; without even the implied warranty of
025// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
026// Lesser General Public License for more details.
027//
028// You should have received a copy of the GNU Lesser General Public
029// License along with this library; if not, write to the Free Software
030// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
031//
032// J. Alex Taylor, President, Founder, CEO, COO, CFO, OOPS hairyfatguy.com
033// jataylor@hairyfatguy.com
034//------------------------------------------------------------------------------
035
036public final class Shape implements Serializable
037{
038
039    private String mName;
040    private int    mIndex;
041
042    private static List sList = new ArrayList(3);
043
044    public static final Shape RECT    = new Shape("rect");
045    public static final Shape CIRCLE  = new Shape("circle");
046    public static final Shape POLY    = new Shape("poly");
047
048    //###########################################################################
049    // CONSTRUCTORS
050    //###########################################################################
051
052    //--------------------------------------------------------------------------
053    private Shape(String inName)
054    {
055        mName = inName;
056        mIndex = sList.size();
057        sList.add(this);
058    }
059
060    //###########################################################################
061    // PUBLIC METHODS
062    //###########################################################################
063
064    //--------------------------------------------------------------------------
065    public final String toString()
066    {
067        return mName;
068    }
069
070    //--------------------------------------------------------------------------
071    public final String getHTMLAttributeName()
072    {
073        return HTML.SHAPE;
074    }
075
076
077    //--------------------------------------------------------------------------
078    public final int hashCode()
079    {
080        return super.hashCode();
081    }
082
083    //--------------------------------------------------------------------------
084    public final boolean equals(Object inObj)
085    {
086        Shape o2 = (Shape) inObj;
087        return (mIndex == o2.mIndex);
088    }
089
090    //--------------------------------------------------------------------------
091    /**
092     * This method is called after de-serialization, allowing the object
093     * to nominate a replacement object to be used in the output
094     * graph instead of this object. We don't want multiple objects of each type
095     * to exist in a target VM, so instances replace themselves with
096     * local objects.
097     */
098    private Object readResolve()
099    {
100        return sList.get(mIndex);
101    }
102}