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}