SerializableObject.java :  » REST » alc-rest » org » allcolor » alc » webapp » Java Open Source

Java Open Source » REST » alc rest 
alc rest » org » allcolor » alc » webapp » SerializableObject.java
package org.allcolor.alc.webapp;

import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

import org.allcolor.alc.reflect.Dynamic;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

import java.lang.ref.WeakReference;

import java.util.ArrayList;
import java.util.List;


/**
 * @author (Author)
 * @version $Revision$
  */
public class SerializableObject
  implements Serializable {
  //~ Static fields/initializers -----------------------------------------------

  /**
   * DOCUMENT ME!
   */
  private static transient List<WeakReference<SerializableObject>> list = new ArrayList<WeakReference<SerializableObject>>();

  /**  */
  private static final long serialVersionUID = 3829808570940646550L;

  //~ Instance fields ----------------------------------------------------------

  /**
   * DOCUMENT ME!
   */
  private transient Object obj = null;

  /**
   * DOCUMENT ME!
   */
  private transient byte array[] = null;

  //~ Constructors -------------------------------------------------------------

  /**
   * Creates a new SerializableObject object.
   *
   * @param obj DOCUMENT ME!
   */
  public SerializableObject (final Object obj) {
    super();
    this.obj = obj;
    SerializableObject.register (this);
  } // end SerializableObject()

  //~ Methods ------------------------------------------------------------------

  /**
   * DOCUMENT ME!
   */
  public static void destroy () {
    SerializableObject._TestList ();

    for (int i = 0; i < SerializableObject.list.size (); i++) {
      final WeakReference<SerializableObject> ref = SerializableObject.list
          .get (i);
      final SerializableObject so = ref.get ();

      if (so != null) {
        so.serialize ();
      } // end if
    } // end for

    SerializableObject.list.clear ();
  } // end destroy()

  /**
   * DOCUMENT ME!
   *
   * @return DOCUMENT ME!
   */
  public final Object getObj () {
    if (this.array != null) {
      try {
        final String xml = new String(this.array, "utf-8");
        final XStream xt = new XStream(new DomDriver());
        this.obj = xt.fromXML (xml);
      } // end try
      catch (final Exception e) {
        e.printStackTrace ();
        this.obj = null;
      } // end catch

      this.array = null;
    } // end if

    return this.obj;
  } // end getObj()

  /**
   * DOCUMENT ME!
   */
  private static void _TestList () {
    if (SerializableObject.list == null) {
      SerializableObject.list = new ArrayList<WeakReference<SerializableObject>>();
    } // end if
  } // end _TestList()

  /**
   * DOCUMENT ME!
   *
   * @param obj DOCUMENT ME!
   */
  private static void register (final SerializableObject obj) {
    SerializableObject._TestList ();
    SerializableObject.list.add (new WeakReference<SerializableObject>(obj));
  } // end register()

  /**
   * DOCUMENT ME!
   *
   * @param stream DOCUMENT ME!
   *
   * @throws IOException DOCUMENT ME!
   * @throws ClassNotFoundException DOCUMENT ME!
   */
  private void readObject (final ObjectInputStream stream)
    throws IOException,
      ClassNotFoundException {
    stream.defaultReadObject ();
    this.array = ( byte [] ) stream.readObject ();
    SerializableObject.register (this);
  } // end readObject()

  /**
   * DOCUMENT ME!
   */
  private void serialize () {
    final ClassLoader cl = Dynamic._.ContextClassLoader (
        ALCWebFilter.getFsClassLoader ());

    try {
      final XStream xt = new XStream(new DomDriver());
      final String xml = xt.toXML (this.obj);
      this.array = xml.getBytes ("utf-8");
    } // end try
    catch (final Exception e) {
      e.printStackTrace ();
      this.array = new byte[0];
    } // end catch
    finally {
      Dynamic._.ContextClassLoader (cl);
    } // end finally
  } // end serialize()

  /**
   * DOCUMENT ME!
   *
   * @param stream DOCUMENT ME!
   *
   * @throws IOException DOCUMENT ME!
   */
  private void writeObject (final ObjectOutputStream stream)
    throws IOException {
    stream.defaultWriteObject ();

    if (this.array == null) {
      this.serialize ();
    } // end if

    stream.writeObject (this.array);
    stream.flush ();
    this.array = null;
  } // end writeObject()
} // end SerializableObject
java2s.com  | Contact Us | Privacy Policy
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.