diff --git a/src/main/java/com/metaweb/gridworks/model/Cell.java b/src/main/java/com/metaweb/gridworks/model/Cell.java index b20fbfd68..98ea25b37 100644 --- a/src/main/java/com/metaweb/gridworks/model/Cell.java +++ b/src/main/java/com/metaweb/gridworks/model/Cell.java @@ -75,7 +75,7 @@ public class Cell implements Serializable, HasFields, Jsonizable { } static public Cell load(String s) throws Exception { - return load(ParsingUtilities.evaluateJsonStringToObject(s)); + return s.length() == 0 ? null : load(ParsingUtilities.evaluateJsonStringToObject(s)); } static public Cell load(JSONObject obj) throws Exception { diff --git a/src/main/java/com/metaweb/gridworks/model/Column.java b/src/main/java/com/metaweb/gridworks/model/Column.java index 30da39aa8..67350cf00 100644 --- a/src/main/java/com/metaweb/gridworks/model/Column.java +++ b/src/main/java/com/metaweb/gridworks/model/Column.java @@ -118,7 +118,7 @@ public class Column implements Serializable, Jsonizable { column._reconConfig = ReconConfig.reconstruct(obj.getJSONObject("reconConfig")); } if (obj.has("reconStats")) { - column._reconStats = ReconStats.reconstruct(obj.getJSONObject("reconStats")); + column._reconStats = ReconStats.load(obj.getJSONObject("reconStats")); } return column; diff --git a/src/main/java/com/metaweb/gridworks/model/Recon.java b/src/main/java/com/metaweb/gridworks/model/Recon.java index 9ffe70bb7..9d15d21cb 100644 --- a/src/main/java/com/metaweb/gridworks/model/Recon.java +++ b/src/main/java/com/metaweb/gridworks/model/Recon.java @@ -82,8 +82,10 @@ public class Recon implements Serializable, HasFields, Jsonizable { if (candidates != null) { r.candidates = new ArrayList(candidates); } + r.judgment = judgment; r.match = match; + return r; } diff --git a/src/main/java/com/metaweb/gridworks/model/ReconStats.java b/src/main/java/com/metaweb/gridworks/model/ReconStats.java index 58b131808..62238d064 100644 --- a/src/main/java/com/metaweb/gridworks/model/ReconStats.java +++ b/src/main/java/com/metaweb/gridworks/model/ReconStats.java @@ -15,7 +15,7 @@ import com.metaweb.gridworks.model.Recon.Judgment; public class ReconStats implements Serializable, Jsonizable { private static final long serialVersionUID = -4831409797104437854L; - static public ReconStats reconstruct(JSONObject obj) throws Exception { + static public ReconStats load(JSONObject obj) throws Exception { return new ReconStats( obj.getInt("nonBlanks"), obj.getInt("newTopics"), diff --git a/src/main/java/com/metaweb/gridworks/model/Row.java b/src/main/java/com/metaweb/gridworks/model/Row.java index 883b45dcb..70f1c45db 100644 --- a/src/main/java/com/metaweb/gridworks/model/Row.java +++ b/src/main/java/com/metaweb/gridworks/model/Row.java @@ -162,8 +162,10 @@ public class Row implements Serializable, HasFields, Jsonizable { } static public Row load(String s) throws Exception { - JSONObject obj = ParsingUtilities.evaluateJsonStringToObject(s); - + return s.length() == 0 ? null : load(ParsingUtilities.evaluateJsonStringToObject(s)); + } + + static public Row load(JSONObject obj) throws Exception { JSONArray a = obj.getJSONArray("cells"); int count = a.length(); diff --git a/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java b/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java index 6968f643f..9f2de419b 100644 --- a/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java +++ b/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java @@ -66,9 +66,13 @@ public class CellChange implements Change { } else if ("cell".equals(field)) { cellIndex = Integer.parseInt(value); } else if ("new".equals(field)) { - newCell = Cell.load(value); + if (value.length() > 0) { + newCell = Cell.load(value); + } } else if ("old".equals(field)) { - oldCell = Cell.load(value); + if (value.length() > 0) { + oldCell = Cell.load(value); + } } } diff --git a/src/main/java/com/metaweb/gridworks/model/changes/ReconChange.java b/src/main/java/com/metaweb/gridworks/model/changes/ReconChange.java index 8a56008ac..5dda51e3b 100644 --- a/src/main/java/com/metaweb/gridworks/model/changes/ReconChange.java +++ b/src/main/java/com/metaweb/gridworks/model/changes/ReconChange.java @@ -87,10 +87,30 @@ public class ReconChange extends MassCellChange { } public void save(Writer writer, Properties options) throws IOException { - writer.write("newReconConfig="); _newReconConfig.save(writer); writer.write('\n'); - writer.write("newReconStats="); _newReconStats.save(writer); writer.write('\n'); - writer.write("oldReconConfig="); _oldReconConfig.save(writer); writer.write('\n'); - writer.write("oldReconStats="); _oldReconStats.save(writer); writer.write('\n'); + writer.write("newReconConfig="); + if (_newReconConfig != null) { + _newReconConfig.save(writer); + } + writer.write('\n'); + + writer.write("newReconStats="); + if (_newReconStats != null) { + _newReconStats.save(writer); + } + writer.write('\n'); + + writer.write("oldReconConfig="); + if (_oldReconConfig != null) { + _oldReconConfig.save(writer); + } + writer.write('\n'); + + writer.write("oldReconStats="); + if (_oldReconStats != null) { + _oldReconStats.save(writer); + } + writer.write('\n'); + super.save(writer, options); } @@ -111,13 +131,21 @@ public class ReconChange extends MassCellChange { String value = line.substring(equal + 1); if ("newReconConfig".equals(field)) { - newReconConfig = ReconConfig.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + if (value.length() > 0) { + newReconConfig = ReconConfig.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + } } else if ("newReconStats".equals(field)) { - newReconStats = ReconStats.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + if (value.length() > 0) { + newReconStats = ReconStats.load(ParsingUtilities.evaluateJsonStringToObject(value)); + } } else if ("oldReconConfig".equals(field)) { - oldReconConfig = ReconConfig.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + if (value.length() > 0) { + oldReconConfig = ReconConfig.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + } } else if ("oldReconStats".equals(field)) { - oldReconStats = ReconStats.reconstruct(ParsingUtilities.evaluateJsonStringToObject(value)); + if (value.length() > 0) { + oldReconStats = ReconStats.load(ParsingUtilities.evaluateJsonStringToObject(value)); + } } else if ("commonColumnName".equals(field)) { commonColumnName = value; } else if ("cellChangeCount".equals(field)) { diff --git a/src/main/java/com/metaweb/gridworks/operations/ReconDiscardJudgmentsOperation.java b/src/main/java/com/metaweb/gridworks/operations/ReconDiscardJudgmentsOperation.java index 47b334b2d..a127c9698 100644 --- a/src/main/java/com/metaweb/gridworks/operations/ReconDiscardJudgmentsOperation.java +++ b/src/main/java/com/metaweb/gridworks/operations/ReconDiscardJudgmentsOperation.java @@ -72,17 +72,16 @@ public class ReconDiscardJudgmentsOperation extends EngineDependentMassCellOpera } public boolean visit(Project project, int rowIndex, Row row, boolean contextual) { - if (cellIndex < row.cells.size()) { - Cell cell = row.cells.get(cellIndex); - if (cell.recon != null) { - Recon recon = cell.recon.dup(); - recon.judgment = Judgment.None; - - Cell newCell = new Cell(cell.value, recon); - - CellChange cellChange = new CellChange(rowIndex, cellIndex, cell, newCell); - cellChanges.add(cellChange); - } + Cell cell = row.getCell(cellIndex); + if (cell != null && cell.recon != null) { + Recon recon = cell.recon.dup(); + recon.judgment = Judgment.None; + recon.match = null; + + Cell newCell = new Cell(cell.value, recon); + + CellChange cellChange = new CellChange(rowIndex, cellIndex, cell, newCell); + cellChanges.add(cellChange); } return false; }