summaryrefslogtreecommitdiff
path: root/sources/core/VSProcess.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-06-01 19:28:00 +0000
committerPaul Buetow <paul@buetow.org>2008-06-01 19:28:00 +0000
commit00120474f64906e34fa79ce6ac8eede521c320d5 (patch)
tree88146a9507716ba40f10b01d55e14670a364f605 /sources/core/VSProcess.java
parent9a0fc6463ac1bca1ec05056fb4f84163d1e9fc26 (diff)
initial complete serialization support
Diffstat (limited to 'sources/core/VSProcess.java')
-rw-r--r--sources/core/VSProcess.java60
1 files changed, 58 insertions, 2 deletions
diff --git a/sources/core/VSProcess.java b/sources/core/VSProcess.java
index 31bbab6..023e017 100644
--- a/sources/core/VSProcess.java
+++ b/sources/core/VSProcess.java
@@ -24,6 +24,7 @@
package core;
import java.awt.*;
+import java.io.*;
import java.util.*;
import core.time.*;
@@ -40,7 +41,7 @@ import utils.*;
*
* @author Paul C. Buetow
*/
-public class VSProcess extends VSPrefs {
+public class VSProcess extends VSPrefs implements Serializable {
/** The data serialization id. */
private static final long serialVersionUID = 1L;
@@ -198,7 +199,22 @@ public class VSProcess extends VSPrefs {
*/
public VSProcess(VSPrefs prefs, int processNum,
VSSimulatorCanvas simulatorCanvas, VSLogging logging) {
- this.protocolsToReset = new ArrayList<VSAbstractProtocol>();
+ init(prefs, processNum, simulatorCanvas, logging);
+ }
+
+ /**
+ * Inits a the process.
+ *
+ * @param prefs the simulator's default prefs
+ * @param processNum the process num
+ * @param simulatorCanvas the simulator canvas
+ * @param logging the logging object
+ */
+ private void init(VSPrefs prefs, int processNum,
+ VSSimulatorCanvas simulatorCanvas, VSLogging logging) {
+ /* May be not null if called from deserialization */
+ if (protocolsToReset == null)
+ this.protocolsToReset = new ArrayList<VSAbstractProtocol>();
this.processNum = processNum;
this.prefs = prefs;
this.simulatorCanvas = simulatorCanvas;
@@ -992,4 +1008,44 @@ public class VSProcess extends VSPrefs {
return protocol;
}
+
+ /* (non-Javadoc)
+ * @see prefs.VSPrefs#writeObject()
+ */
+ public synchronized void writeObject(ObjectOutputStream objectOutputStream)
+ throws IOException {
+ super.writeObject(objectOutputStream);
+ objectOutputStream.writeObject(new Integer(processNum));
+ objectOutputStream.writeObject(protocolsToReset);
+ }
+
+ /* (non-Javadoc)
+ * @see prefs.VSPrefs#readObject()
+ */
+ @SuppressWarnings("unchecked")
+ public synchronized void readObject(ObjectInputStream objectInputStream)
+ throws IOException, ClassNotFoundException {
+ super.readObject(objectInputStream);
+
+ if (VSDeserializationHelper.DEBUG)
+ System.out.println("Deserializing: VSProcess");
+
+ VSLogging logging = (VSLogging)
+ VSDeserializationHelper.getObject("logging");
+ VSSimulatorCanvas simulatorCanvas = (VSSimulatorCanvas)
+ VSDeserializationHelper.getObject(
+ "simulatorCanvas");
+ VSPrefs prefs = (VSPrefs) VSDeserializationHelper.getObject("prefs");
+
+ Integer processNum = (Integer) objectInputStream.readObject();
+ this.protocolsToReset = (ArrayList<VSAbstractProtocol>)
+ objectInputStream.readObject();
+
+ for (VSAbstractProtocol protocol : protocolsToReset)
+ setObject(protocol.getClassname(), protocol);
+
+ VSDeserializationHelper.setObject(processNum.intValue(),
+ "process", this);
+ init(prefs, processNum.intValue(), simulatorCanvas, logging);
+ }
}