From 293c73f50f87b3d73d3947a9f79430b23ec4ddba Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sun, 1 Jun 2008 22:45:59 +0000 Subject: better serialization --- sources/core/VSTask.java | 76 ++++++++++++++++++++++++++++++------------------ 1 file changed, 48 insertions(+), 28 deletions(-) (limited to 'sources/core/VSTask.java') diff --git a/sources/core/VSTask.java b/sources/core/VSTask.java index d27a9a4..a903868 100644 --- a/sources/core/VSTask.java +++ b/sources/core/VSTask.java @@ -30,6 +30,7 @@ import events.implementations.*; import events.internal.*; import prefs.VSPrefs; import protocols.VSAbstractProtocol; +import serialize.*; import utils.*; /** @@ -41,7 +42,7 @@ import utils.*; * * @author Paul C. Buetow */ -public class VSTask implements Comparable, Serializable { +public class VSTask implements Comparable, VSSerializable { /** The serial version uid */ private static final long serialVersionUID = 1L; @@ -94,6 +95,17 @@ public class VSTask implements Comparable, Serializable { init(taskTime, process, event, isLocal); } + /** + * Instantiates a new task during a deserialization. + * + * @param serialize the serialize object + * @param process the object input stream + */ + public VSTask(VSSerialize serialize, ObjectInputStream objectInputStream) + throws IOException, ClassNotFoundException { + deserialize(serialize, objectInputStream); + } + /** * Inits the task * @@ -338,51 +350,59 @@ public class VSTask implements Comparable, Serializable { return 0; } - /** - * Write object. - * - * @param objectOutputStream the object output stream - * - * @throws IOException Signals that an I/O exception has occurred. + /* (non-Javadoc) + * @see serialize.VSSerializable#serialize(serialize.VSSerialize, + * java.io.ObjectOutputStream) */ - public synchronized void writeObject(ObjectOutputStream objectOutputStream) + public synchronized void serialize(VSSerialize serialize, + ObjectOutputStream objectOutputStream) throws IOException { - objectOutputStream.writeObject(event); objectOutputStream.writeObject(new Integer(process.getProcessNum())); + objectOutputStream.writeObject(event.getClassname()); + objectOutputStream.writeObject(new Integer(event.getID())); + event.serialize(serialize, objectOutputStream); objectOutputStream.writeObject(new Integer(taskNum)); objectOutputStream.writeObject(new Long(taskTime)); objectOutputStream.writeObject(new Boolean(isGlobalTimed)); objectOutputStream.writeObject(new Boolean(isProgrammed)); } - /** - * Read object. - * - * @param objectInputStream the object input stream - * - * @throws IOException Signals that an I/O exception has occurred. - * @throws ClassNotFoundException the class not found exception + /* (non-Javadoc) + * @see serialize.VSSerializable#deserialize(serialize.VSSerialize, + * java.io.ObjectInputStream) */ @SuppressWarnings("unchecked") - public synchronized void readObject(ObjectInputStream objectInputStream) + public synchronized void deserialize(VSSerialize serialize, + ObjectInputStream objectInputStream) throws IOException, ClassNotFoundException { - if (VSDeserializationHelper.DEBUG) + if (VSSerialize.DEBUG) System.out.println("Deserializing: VSTask"); - this.event = (VSAbstractEvent) objectInputStream.readObject(); - Integer processNum = (Integer) objectInputStream.readObject(); - Integer taskNum = (Integer) objectInputStream.readObject(); - Long taskTime = (Long) objectInputStream.readObject(); + int processNum = ((Integer) objectInputStream.readObject()).intValue(); + VSProcess process = (VSProcess) + serialize.getObject(processNum, "process"); + + String eventClassname = (String) objectInputStream.readObject(); + int eventID = ((Integer) objectInputStream.readObject()).intValue(); + + VSAbstractEvent event = (VSAbstractEvent) + serialize.getObject(eventID, "event"); + + if (event == null) { + event = VSRegisteredEvents. + createEventInstanceByClassname(eventClassname, process); + + serialize.setObject(eventID, "event", event); + } + + int taskNum = ((Integer) objectInputStream.readObject()).intValue(); + long taskTime = ((Long) objectInputStream.readObject()).longValue(); Boolean isGlobalTimed = (Boolean) objectInputStream.readObject(); Boolean isProgrammed = (Boolean) objectInputStream.readObject(); - VSDeserializationHelper.setObject(taskNum.intValue(), "task", this); - - VSProcess process = (VSProcess) VSDeserializationHelper.getObject( - processNum.intValue(), "process"); + serialize.setObject(taskNum, "task", this); - init(taskTime.longValue(), process, event, - !isGlobalTimed.booleanValue()); + init(taskTime, process, event, !isGlobalTimed.booleanValue()); this.isProgrammed = isProgrammed.booleanValue(); } -- cgit v1.2.3