1997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/* 2997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Copyright (c) 2003,2004, Stefan Haustein, Oberhausen, Rhld., Germany 3997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 4997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and 5997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * associated documentation files (the "Software"), to deal in the Software without restriction, including 6997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the 8997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * following conditions: 9997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 10997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The above copyright notice and this permission notice shall be included in all copies or substantial 11997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * portions of the Software. 12997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 13997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT 14997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO 15997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 16997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE 17997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * USE OR OTHER DEALINGS IN THE SOFTWARE. 18997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 19997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Contributor(s): John D. Beatty, F. Hunter, Renaud Tognelli 20997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 21997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 22997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupackage org.ksoap2.serialization; 23997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 24997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.ByteArrayOutputStream; 25997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.ByteArrayInputStream; 26997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.ObjectOutputStream; 27997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.ObjectInputStream; 28997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 29997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.IOException; 30997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yuimport java.io.NotSerializableException; 31997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 32997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu/** 33997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * This class is used to store information about each property an implementation of KvmSerializable exposes. 34997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 35997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 36997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yupublic class SppPropertyInfo implements java.io.Serializable 37997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu{ 38997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class OBJECT_CLASS = new Object().getClass(); 39997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class STRING_CLASS = "".getClass(); 40997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class INTEGER_CLASS = new Integer(0).getClass(); 41997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class LONG_CLASS = new Long(0).getClass(); 42997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class BOOLEAN_CLASS = new Boolean(true).getClass(); 43997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final Class VECTOR_CLASS = new java.util.Vector().getClass(); 44997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final PropertyInfo OBJECT_TYPE = new PropertyInfo(); 45997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int TRANSIENT = 1; 46997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int MULTI_REF = 2; 47997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public static final int REF_ONLY = 4; 48997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 49997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 50997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Name of the property 51997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 52997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String name; 53997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 54997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 55997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Namespace of this property 56997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 57997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String namespace; 58997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 59997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 60997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Type of property, Transient, multi_ref, Ref_only *JHS* Note, not really used that effectively 61997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 62997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public int flags; 63997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 64997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 65997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The current value of this property. 66997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 67997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu protected Object value; 68997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 69997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 70997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Type of the property/elements. Should usually be an instance of Class. 71997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 72997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Object type = OBJECT_CLASS; 73997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 74997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 75997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * if a property is multi-referenced, set this flag to true. 76997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 77997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public boolean multiRef; 78997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 79997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 80997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Element type for array properties, null if not array prop. 81997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 82997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public PropertyInfo elementType; 83997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 84997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public SppPropertyInfo() 85997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 86997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 87997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 88997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void clear() 89997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 90997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu type = OBJECT_CLASS; 91997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu flags = 0; 92997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu name = null; 93997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu namespace = null; 94997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 95997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 96997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 97997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the elementType. 98997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 99997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public PropertyInfo getElementType() 100997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 101997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return elementType; 102997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 103997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 104997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 105997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param elementType 106997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The elementType to set. 107997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 108997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setElementType(PropertyInfo elementType) 109997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 110997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.elementType = elementType; 111997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 112997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 113997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 114997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the flags. 115997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 116997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public int getFlags() 117997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 118997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return flags; 119997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 120997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 121997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 122997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param flags 123997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The flags to set. 124997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 125997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setFlags(int flags) 126997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 127997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.flags = flags; 128997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 129997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 130997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 131997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the multiRef. 132997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 133997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public boolean isMultiRef() 134997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 135997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return multiRef; 136997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 137997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 138997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 139997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param multiRef 140997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The multiRef to set. 141997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 142997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setMultiRef(boolean multiRef) 143997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 144997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.multiRef = multiRef; 145997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 146997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 147997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 148997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the name. 149997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 150997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getName() 151997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 152997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return name; 153997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 154997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 155997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 156997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param name 157997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The name to set. 158997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 159997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setName(String name) 160997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 161997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.name = name; 162997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 163997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 164997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 165997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the namespace. 166997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 167997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String getNamespace() 168997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 169997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return namespace; 170997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 171997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 172997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 173997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param namespace 174997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The namespace to set. 175997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 176997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setNamespace(String namespace) 177997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 178997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.namespace = namespace; 179997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 180997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 181997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 182997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the type. 183997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 184997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Object getType() 185997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 186997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return type; 187997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 188997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 189997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 190997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param type 191997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The type to set. 192997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 193997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setType(Object type) 194997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 195997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.type = type; 196997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 197997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 198997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 199997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @return Returns the value. 200997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 201997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Object getValue() 202997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 203997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return value; 204997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 205997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 206997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 207997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @param value 208997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * The value to set. 209997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 210997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public void setValue(Object value) 211997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 212997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu this.value = value; 213997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 214997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 215997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 216997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Show the name and value. 217997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 218997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see java.lang.Object#toString() 219997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 220997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public String toString() 221997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 222997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu StringBuffer sb = new StringBuffer(); 223997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu sb.append(name); 224997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu sb.append(" : "); 225997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu if (value != null) 226997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 227997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu sb.append(value); 228997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 229997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu else 230997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 231997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu sb.append("(not set)"); 232997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 233997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return sb.toString(); 234997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 235997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 236997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu /** 237997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * Make a deep clone of the properties through Object serialization 238997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * 239997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu * @see java.lang.Object#clone() 240997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu */ 241997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu public Object clone() { 242997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu Object obj = null; 243997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu try 244997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 245997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // Write the object out to a byte array 246997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ByteArrayOutputStream bos = new ByteArrayOutputStream(); 247997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ObjectOutputStream out = new ObjectOutputStream(bos); 248997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu out.writeObject(this); 249997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu out.flush(); 250997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu out.close(); 251997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu 252997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // Make an input stream from the byte array and read 253997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu // a copy of the object back in. 254997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu ObjectInputStream in = new ObjectInputStream( 255997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu new ByteArrayInputStream(bos.toByteArray())); 256997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu obj = in.readObject(); 257997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (ClassNotFoundException cnfe) 258997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 259997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu cnfe.printStackTrace(); 260997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (NotSerializableException nse) 261997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 262997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu nse.printStackTrace(); 263997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } catch (IOException e) 264997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu { 265997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu e.printStackTrace(); 266997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 267997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu return obj; 268997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu } 269997171ed3fdf8baf96d8fdf9dd3201a459327d89Ryan Yu} 270