summaryrefslogtreecommitdiffstats
path: root/sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java')
-rw-r--r--sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java74
1 files changed, 74 insertions, 0 deletions
diff --git a/sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java b/sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java
new file mode 100644
index 0000000000..a833bb63a9
--- /dev/null
+++ b/sca-java-1.x/tags/java-stable-20060304/spec/sdo/src/main/java/commonj/sdo/impl/ExternalizableDelegator.java
@@ -0,0 +1,74 @@
+package commonj.sdo.impl;
+
+import java.io.Externalizable;
+import java.io.IOException;
+import java.io.ObjectInput;
+import java.io.ObjectOutput;
+import java.io.ObjectStreamException;
+
+/**
+ * Delegates DataObject serialization while ensuring implementation independent
+ * java.io.Serialization. An implementation of DataObject
+ * returns an ExternalizableDelegator from its writeReplace() method.
+ *
+ * The root DataObject is the object returned from do.getRootObject() where
+ * do is the DataObject being serialized in a java.io.ObjectOutputStream.
+ * When do.getContainer() == null then do is a root object.
+ *
+ * The byte format for each DataObject in the stream is:
+ * [0] [path] [root] // when do is not a root object
+ * [1] [rootXML] // when do is a root object
+ *
+ * where:
+ * [0] is the byte 0, serialized using writeByte(0).
+ * [1] is the byte 1, serialized using writeByte(1).
+ *
+ * [path] is an SDO path expression from the root DataObject to the serialized
+ * DataObject such that root.getDataObject(path) == do.
+ * Serialized using writeUTF(path).
+ *
+ * [root] is the root object serialized using writeObject(root).
+ *
+ * [rootXML] is the GZip of the XML serialization of the root DataObject.
+ * The XML serialization is the same as
+ * XMLHelper.INSTANCE.save(root, "commonj.sdo", "dataObject", stream);
+ * where stream is a GZIPOutputStream, length is the number of bytes
+ * in the stream, and bytes are the contents of the stream.
+ * Serialized using writeInt(length), write(bytes).
+ *
+ */
+public class ExternalizableDelegator implements Externalizable
+{
+ public interface Resolvable extends Externalizable
+ {
+ Object readResolve() throws ObjectStreamException;
+ }
+
+ static final long serialVersionUID = 1;
+ transient Resolvable delegate;
+
+ public ExternalizableDelegator()
+ {
+ delegate = HelperProvider.createResolvable();
+ }
+
+ public ExternalizableDelegator(Object target)
+ {
+ delegate = HelperProvider.createResolvable(target);
+ }
+
+ public void writeExternal(ObjectOutput out) throws IOException
+ {
+ delegate.writeExternal(out);
+ }
+
+ public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException
+ {
+ delegate.readExternal(in);
+ }
+
+ public Object readResolve() throws ObjectStreamException
+ {
+ return delegate.readResolve();
+ }
+}