From f5dcb1810317ff1a8b0d9e96b75222a2abcf9a4f Mon Sep 17 00:00:00 2001
From: Johannes Mey <johannes.mey@tu-dresden.de>
Date: Fri, 22 Mar 2019 12:29:09 +0100
Subject: [PATCH] use IN_CONSTRUCTION state in all incremental JastAdd drivers
 when deserializing the model

---
 .../train/jastadd/driver/JastaddDriver.java   | 15 ++---
 .../train/jastadd/driver/JastaddDriver.java   | 59 ++++++++++++++++++
 .../train/jastadd/driver/JastaddDriver.java   | 12 ++--
 .../train/jastadd/driver/JastaddDriver.java   | 61 +++++++++++++++++++
 .../train/jastadd/driver/JastaddDriver.java   |  0
 .../train/jastadd/driver/JastaddDriver.java   | 14 ++---
 6 files changed, 134 insertions(+), 27 deletions(-)
 rename trainbenchmark/{trainbenchmark-tool-jastadd-namelookup-base => trainbenchmark-tool-jastadd-intrinsic-incremental}/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java (88%)
 create mode 100644 trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
 create mode 100644 trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
 rename trainbenchmark/{trainbenchmark-tool-jastadd-intrinsic-base => trainbenchmark-tool-jastadd-namelookup}/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java (100%)

diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
similarity index 88%
rename from trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
rename to trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index ee595c277..94ccaeb7d 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -6,21 +6,14 @@ import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
-import java.io.IOException;
 
 
 public class JastaddDriver extends Driver {
 
-  RailwayContainer root;
-
-  private int idCounter = 0;
-
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
 
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
@@ -42,10 +35,12 @@ public class JastaddDriver extends Driver {
   }
 
   @Override
-  public void read(final String modelPath) throws IOException {
+  public void read(final String modelPath) {
 
     File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
     root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
 
     // enable tracing if there is a receiver
     if (receiver != null) {
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
new file mode 100644
index 000000000..207452385
--- /dev/null
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -0,0 +1,59 @@
+package de.tudresden.inf.st.train.jastadd.driver;
+
+import de.tudresden.inf.st.train.jastadd.ast.ASTState;
+import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
+import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
+import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
+
+import java.io.File;
+
+
+public class JastaddDriver extends Driver {
+
+  private final boolean flushCaches;
+  private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
+
+  public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    super();
+    this.flushCaches = flushCaches;
+    this.receiver = receiver;
+  }
+
+  public static JastaddDriver create(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    return new JastaddDriver(flushCaches, receiver);
+  }
+
+  public int nextId() {
+    idCounter--;
+    return idCounter;
+  }
+
+  public RailwayContainer getModel() {
+    return root;
+  }
+
+  @Override
+  public void read(final String modelPath) {
+
+    File modelFile = new File(modelPath);
+    root = JsonDeserializer.read(modelFile);
+
+    // enable tracing if there is a receiver
+    if (receiver != null) {
+      getModel().trace().setReceiver(receiver);
+    }
+  }
+
+  @Override
+  public String getPostfix() {
+    return "-jastadd-manual.json";
+  }
+
+  public void flushCache() {
+    if (flushCaches) {
+      getModel().flushTreeCache();
+    }
+  }
+}
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index 302490b8f..6e7871d36 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-manual-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -6,15 +6,15 @@ import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
-import java.io.IOException;
 
 
 public class JastaddDriver extends Driver {
 
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
-  RailwayContainer root;
+  private RailwayContainer root;
   private int idCounter = 0;
+
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
     this.flushCaches = flushCaches;
@@ -25,10 +25,6 @@ public class JastaddDriver extends Driver {
     return new JastaddDriver(flushCaches, receiver);
   }
 
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   public int nextId() {
     idCounter--;
     return idCounter;
@@ -39,10 +35,12 @@ public class JastaddDriver extends Driver {
   }
 
   @Override
-  public void read(final String modelPath) throws IOException {
+  public void read(final String modelPath) {
 
     File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
     root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
 
     // enable tracing if there is a receiver
     if (receiver != null) {
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
new file mode 100644
index 000000000..94ccaeb7d
--- /dev/null
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -0,0 +1,61 @@
+package de.tudresden.inf.st.train.jastadd.driver;
+
+import de.tudresden.inf.st.train.jastadd.ast.ASTState;
+import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
+import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
+import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
+
+import java.io.File;
+
+
+public class JastaddDriver extends Driver {
+
+  private final boolean flushCaches;
+  private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
+
+  public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    super();
+    this.flushCaches = flushCaches;
+    this.receiver = receiver;
+  }
+
+  public static JastaddDriver create(boolean flushCaches, ASTState.Trace.Receiver receiver) {
+    return new JastaddDriver(flushCaches, receiver);
+  }
+
+  public int nextId() {
+    idCounter--;
+    return idCounter;
+  }
+
+  public RailwayContainer getModel() {
+    return root;
+  }
+
+  @Override
+  public void read(final String modelPath) {
+
+    File modelFile = new File(modelPath);
+    new RailwayContainer().state().enterConstruction();
+    root = JsonDeserializer.read(modelFile);
+    root.state().exitConstruction();
+
+    // enable tracing if there is a receiver
+    if (receiver != null) {
+      getModel().trace().setReceiver(receiver);
+    }
+  }
+
+  @Override
+  public String getPostfix() {
+    return "-jastadd-manual.json";
+  }
+
+  public void flushCache() {
+    if (flushCaches) {
+      getModel().flushTreeCache();
+    }
+  }
+}
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-namelookup/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
similarity index 100%
rename from trainbenchmark/trainbenchmark-tool-jastadd-intrinsic-base/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
rename to trainbenchmark/trainbenchmark-tool-jastadd-namelookup/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
diff --git a/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java b/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
index 668f03e49..eeee13f0d 100644
--- a/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
+++ b/trainbenchmark/trainbenchmark-tool-jastadd-relast-incremental/src/main/java/de/tudresden/inf/st/train/jastadd/driver/JastaddDriver.java
@@ -3,8 +3,6 @@ package de.tudresden.inf.st.train.jastadd.driver;
 import de.tudresden.inf.st.train.jastadd.ast.ASTState;
 import de.tudresden.inf.st.train.jastadd.ast.DeserializationException;
 import de.tudresden.inf.st.train.jastadd.ast.RailwayContainer;
-import de.tudresden.inf.st.train.jastadd.ast.SerializationException;
-import de.tudresden.inf.st.train.jastadd.driver.deserializer.JsonDeserializer;
 import hu.bme.mit.trainbenchmark.benchmark.driver.Driver;
 
 import java.io.File;
@@ -13,16 +11,10 @@ import java.io.IOException;
 
 public class JastaddDriver extends Driver {
 
-  RailwayContainer root;
-
-  private int idCounter = 0;
-
-  public boolean flushCaches() {
-    return flushCaches;
-  }
-
   private final boolean flushCaches;
   private final ASTState.Trace.Receiver receiver;
+  private RailwayContainer root;
+  private int idCounter = 0;
 
   public JastaddDriver(boolean flushCaches, ASTState.Trace.Receiver receiver) {
     super();
@@ -48,7 +40,9 @@ public class JastaddDriver extends Driver {
 
     File modelFile = new File(modelPath);
     try {
+      new RailwayContainer().state().enterConstruction();
       root = RailwayContainer.deserialize(modelFile);
+      root.state().exitConstruction();
     } catch (DeserializationException e) {
       throw new IOException(e);
     }
-- 
GitLab