From 720f147c09f91758f807026f308e7980ed14c474 Mon Sep 17 00:00:00 2001 From: David Huynh Date: Thu, 4 Feb 2010 06:00:26 +0000 Subject: [PATCH] Moved concrete change classes out to their own package. Added a few change classes for columns, but they are not hooked up yet. git-svn-id: http://google-refine.googlecode.com/svn/trunk@36 7d457c2a-affb-35e4-300a-418c747d4874 --- .../commands/ApproveNewReconcileCommand.java | 4 +- .../commands/ApproveReconcileCommand.java | 4 +- .../commands/DiscardReconcileCommand.java | 4 +- .../commands/DoTextTransformCommand.java | 4 +- .../gridworks/history/ChangeSequence.java | 32 ++++++++++++ .../metaweb/gridworks/model/ColumnModel.java | 4 ++ .../gridworks/model/changes/CellAtRow.java | 17 +++++++ .../changes}/CellChange.java | 2 +- .../model/changes/ColumnAdditionChange.java | 49 ++++++++++++++++++ .../gridworks/model/changes/ColumnChange.java | 7 +++ .../model/changes/ColumnRemovalChange.java | 50 +++++++++++++++++++ .../model/changes/ColumnSplitChange.java | 19 +++++++ .../changes}/MassCellChange.java | 3 +- .../gridworks/process/ReconProcess.java | 4 +- 14 files changed, 191 insertions(+), 12 deletions(-) create mode 100644 src/main/java/com/metaweb/gridworks/history/ChangeSequence.java create mode 100644 src/main/java/com/metaweb/gridworks/model/changes/CellAtRow.java rename src/main/java/com/metaweb/gridworks/{history => model/changes}/CellChange.java (87%) create mode 100644 src/main/java/com/metaweb/gridworks/model/changes/ColumnAdditionChange.java create mode 100644 src/main/java/com/metaweb/gridworks/model/changes/ColumnChange.java create mode 100644 src/main/java/com/metaweb/gridworks/model/changes/ColumnRemovalChange.java create mode 100644 src/main/java/com/metaweb/gridworks/model/changes/ColumnSplitChange.java rename src/main/java/com/metaweb/gridworks/{history => model/changes}/MassCellChange.java (90%) diff --git a/src/main/java/com/metaweb/gridworks/commands/ApproveNewReconcileCommand.java b/src/main/java/com/metaweb/gridworks/commands/ApproveNewReconcileCommand.java index 591275f19..1eb3f464d 100644 --- a/src/main/java/com/metaweb/gridworks/commands/ApproveNewReconcileCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/ApproveNewReconcileCommand.java @@ -11,15 +11,15 @@ import javax.servlet.http.HttpServletResponse; import com.metaweb.gridworks.browsing.Engine; import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.browsing.RowVisitor; -import com.metaweb.gridworks.history.CellChange; import com.metaweb.gridworks.history.HistoryEntry; -import com.metaweb.gridworks.history.MassCellChange; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Column; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Recon; import com.metaweb.gridworks.model.Row; import com.metaweb.gridworks.model.Recon.Judgment; +import com.metaweb.gridworks.model.changes.CellChange; +import com.metaweb.gridworks.model.changes.MassCellChange; import com.metaweb.gridworks.process.QuickHistoryEntryProcess; public class ApproveNewReconcileCommand extends Command { diff --git a/src/main/java/com/metaweb/gridworks/commands/ApproveReconcileCommand.java b/src/main/java/com/metaweb/gridworks/commands/ApproveReconcileCommand.java index 8f813182f..fc4b34bcc 100644 --- a/src/main/java/com/metaweb/gridworks/commands/ApproveReconcileCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/ApproveReconcileCommand.java @@ -11,14 +11,14 @@ import javax.servlet.http.HttpServletResponse; import com.metaweb.gridworks.browsing.Engine; import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.browsing.RowVisitor; -import com.metaweb.gridworks.history.CellChange; import com.metaweb.gridworks.history.HistoryEntry; -import com.metaweb.gridworks.history.MassCellChange; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Column; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; import com.metaweb.gridworks.model.Recon.Judgment; +import com.metaweb.gridworks.model.changes.CellChange; +import com.metaweb.gridworks.model.changes.MassCellChange; import com.metaweb.gridworks.process.QuickHistoryEntryProcess; public class ApproveReconcileCommand extends Command { diff --git a/src/main/java/com/metaweb/gridworks/commands/DiscardReconcileCommand.java b/src/main/java/com/metaweb/gridworks/commands/DiscardReconcileCommand.java index 31bce610c..f849225d8 100644 --- a/src/main/java/com/metaweb/gridworks/commands/DiscardReconcileCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/DiscardReconcileCommand.java @@ -11,13 +11,13 @@ import javax.servlet.http.HttpServletResponse; import com.metaweb.gridworks.browsing.Engine; import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.browsing.RowVisitor; -import com.metaweb.gridworks.history.CellChange; import com.metaweb.gridworks.history.HistoryEntry; -import com.metaweb.gridworks.history.MassCellChange; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Column; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; +import com.metaweb.gridworks.model.changes.CellChange; +import com.metaweb.gridworks.model.changes.MassCellChange; import com.metaweb.gridworks.process.QuickHistoryEntryProcess; public class DiscardReconcileCommand extends Command { diff --git a/src/main/java/com/metaweb/gridworks/commands/DoTextTransformCommand.java b/src/main/java/com/metaweb/gridworks/commands/DoTextTransformCommand.java index 0f95c6286..9f028d095 100644 --- a/src/main/java/com/metaweb/gridworks/commands/DoTextTransformCommand.java +++ b/src/main/java/com/metaweb/gridworks/commands/DoTextTransformCommand.java @@ -15,13 +15,13 @@ import com.metaweb.gridworks.browsing.FilteredRows; import com.metaweb.gridworks.browsing.RowVisitor; import com.metaweb.gridworks.expr.Evaluable; import com.metaweb.gridworks.expr.Parser; -import com.metaweb.gridworks.history.CellChange; import com.metaweb.gridworks.history.HistoryEntry; -import com.metaweb.gridworks.history.MassCellChange; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Column; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; +import com.metaweb.gridworks.model.changes.CellChange; +import com.metaweb.gridworks.model.changes.MassCellChange; import com.metaweb.gridworks.process.QuickHistoryEntryProcess; public class DoTextTransformCommand extends Command { diff --git a/src/main/java/com/metaweb/gridworks/history/ChangeSequence.java b/src/main/java/com/metaweb/gridworks/history/ChangeSequence.java new file mode 100644 index 000000000..fc7c86dd3 --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/history/ChangeSequence.java @@ -0,0 +1,32 @@ +package com.metaweb.gridworks.history; + +import com.metaweb.gridworks.model.Project; + +public class ChangeSequence implements Change { + private static final long serialVersionUID = 5029993970500006428L; + + final protected Change[] _changes; + + public ChangeSequence(Change[] changes) { + _changes = changes; + } + + @Override + public void apply(Project project) { + synchronized (project) { + for (int i = 0; i < _changes.length; i++) { + _changes[i].apply(project); + } + } + } + + @Override + public void revert(Project project) { + synchronized (project) { + for (int i = _changes.length - 1; i >= 0 ; i--) { + _changes[i].apply(project); + } + } + } + +} diff --git a/src/main/java/com/metaweb/gridworks/model/ColumnModel.java b/src/main/java/com/metaweb/gridworks/model/ColumnModel.java index efca98000..10d754005 100644 --- a/src/main/java/com/metaweb/gridworks/model/ColumnModel.java +++ b/src/main/java/com/metaweb/gridworks/model/ColumnModel.java @@ -41,6 +41,10 @@ public class ColumnModel implements Serializable, Jsonizable { return _maxCellIndex; } + public int allocateNewCellIndex() { + return ++_maxCellIndex; + } + public void setKeyCellIndex(int keyCellIndex) { // TODO: check validity of new cell index, e.g., it's not in any group this._keyCellIndex = keyCellIndex; diff --git a/src/main/java/com/metaweb/gridworks/model/changes/CellAtRow.java b/src/main/java/com/metaweb/gridworks/model/changes/CellAtRow.java new file mode 100644 index 000000000..f02dc041a --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/model/changes/CellAtRow.java @@ -0,0 +1,17 @@ +package com.metaweb.gridworks.model.changes; + +import java.io.Serializable; + +import com.metaweb.gridworks.model.Cell; + +public class CellAtRow implements Serializable { + private static final long serialVersionUID = 7280920621006690944L; + + final public int row; + final public Cell cell; + + public CellAtRow(int row, Cell cell) { + this.row = row; + this.cell = cell; + } +} diff --git a/src/main/java/com/metaweb/gridworks/history/CellChange.java b/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java similarity index 87% rename from src/main/java/com/metaweb/gridworks/history/CellChange.java rename to src/main/java/com/metaweb/gridworks/model/changes/CellChange.java index 75430c309..3e831a264 100644 --- a/src/main/java/com/metaweb/gridworks/history/CellChange.java +++ b/src/main/java/com/metaweb/gridworks/model/changes/CellChange.java @@ -1,4 +1,4 @@ -package com.metaweb.gridworks.history; +package com.metaweb.gridworks.model.changes; import java.io.Serializable; diff --git a/src/main/java/com/metaweb/gridworks/model/changes/ColumnAdditionChange.java b/src/main/java/com/metaweb/gridworks/model/changes/ColumnAdditionChange.java new file mode 100644 index 000000000..da008c5e9 --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/model/changes/ColumnAdditionChange.java @@ -0,0 +1,49 @@ +package com.metaweb.gridworks.model.changes; + +import java.util.List; + +import com.metaweb.gridworks.model.Column; +import com.metaweb.gridworks.model.Project; + +public class ColumnAdditionChange extends ColumnChange { + private static final long serialVersionUID = -3938837464064526052L; + + final protected String _headerLabel; + final protected int _columnIndex; + final protected CellAtRow[] _newCells; + protected int _newCellIndex; + + public ColumnAdditionChange(String headerLabel, int columnIndex, List newCells) { + _headerLabel = headerLabel; + _columnIndex = columnIndex; + _newCells = new CellAtRow[newCells.size()]; + newCells.toArray(_newCells); + } + + @Override + public void apply(Project project) { + synchronized (project) { + _newCellIndex = project.columnModel.allocateNewCellIndex(); + + Column column = new Column(_newCellIndex, _headerLabel); + + project.columnModel.columns.add(_columnIndex, column); + + for (CellAtRow cell : _newCells) { + project.rows.get(cell.row).cells.set(_newCellIndex, cell.cell); + } + } + } + + @Override + public void revert(Project project) { + synchronized (project) { + for (CellAtRow cell : _newCells) { + project.rows.get(cell.row).cells.remove(_newCellIndex); + } + + project.columnModel.columns.remove(_columnIndex); + } + } + +} diff --git a/src/main/java/com/metaweb/gridworks/model/changes/ColumnChange.java b/src/main/java/com/metaweb/gridworks/model/changes/ColumnChange.java new file mode 100644 index 000000000..b89670aa6 --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/model/changes/ColumnChange.java @@ -0,0 +1,7 @@ +package com.metaweb.gridworks.model.changes; + +import com.metaweb.gridworks.history.Change; + +abstract public class ColumnChange implements Change { + private static final long serialVersionUID = 2725529838777790586L; +} diff --git a/src/main/java/com/metaweb/gridworks/model/changes/ColumnRemovalChange.java b/src/main/java/com/metaweb/gridworks/model/changes/ColumnRemovalChange.java new file mode 100644 index 000000000..8279d71c0 --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/model/changes/ColumnRemovalChange.java @@ -0,0 +1,50 @@ +package com.metaweb.gridworks.model.changes; + +import com.metaweb.gridworks.model.Cell; +import com.metaweb.gridworks.model.Column; +import com.metaweb.gridworks.model.Project; +import com.metaweb.gridworks.model.Row; + +public class ColumnRemovalChange extends ColumnChange { + private static final long serialVersionUID = -3587865920553490108L; + + final protected int _oldColumnIndex; + protected Column _oldColumn; + protected CellAtRow[] _oldCells; + + public ColumnRemovalChange(int index) { + _oldColumnIndex = index; + } + + @Override + public void apply(Project project) { + synchronized (project) { + _oldColumn = project.columnModel.columns.remove(_oldColumnIndex); + _oldCells = new CellAtRow[project.rows.size()]; + + int cellIndex = _oldColumn.getCellIndex(); + for (int i = 0; i < _oldCells.length; i++) { + Row row = project.rows.get(i); + + Cell oldCell = null; + if (cellIndex < row.cells.size()) { + oldCell = row.cells.get(cellIndex); + } + _oldCells[i] = new CellAtRow(i, oldCell); + } + } + } + + @Override + public void revert(Project project) { + synchronized (project) { + project.columnModel.columns.add(_oldColumnIndex, _oldColumn); + + int cellIndex = _oldColumn.getCellIndex(); + for (CellAtRow cell : _oldCells) { + project.rows.get(cell.row).cells.set(cellIndex, cell.cell); + } + } + } + +} diff --git a/src/main/java/com/metaweb/gridworks/model/changes/ColumnSplitChange.java b/src/main/java/com/metaweb/gridworks/model/changes/ColumnSplitChange.java new file mode 100644 index 000000000..5892e9b36 --- /dev/null +++ b/src/main/java/com/metaweb/gridworks/model/changes/ColumnSplitChange.java @@ -0,0 +1,19 @@ +package com.metaweb.gridworks.model.changes; + +import com.metaweb.gridworks.model.Project; + +public class ColumnSplitChange extends ColumnChange { + + @Override + public void apply(Project project) { + // TODO Auto-generated method stub + + } + + @Override + public void revert(Project project) { + // TODO Auto-generated method stub + + } + +} diff --git a/src/main/java/com/metaweb/gridworks/history/MassCellChange.java b/src/main/java/com/metaweb/gridworks/model/changes/MassCellChange.java similarity index 90% rename from src/main/java/com/metaweb/gridworks/history/MassCellChange.java rename to src/main/java/com/metaweb/gridworks/model/changes/MassCellChange.java index 742333e3c..75b1ecddf 100644 --- a/src/main/java/com/metaweb/gridworks/history/MassCellChange.java +++ b/src/main/java/com/metaweb/gridworks/model/changes/MassCellChange.java @@ -1,7 +1,8 @@ -package com.metaweb.gridworks.history; +package com.metaweb.gridworks.model.changes; import java.util.List; +import com.metaweb.gridworks.history.Change; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Row; diff --git a/src/main/java/com/metaweb/gridworks/process/ReconProcess.java b/src/main/java/com/metaweb/gridworks/process/ReconProcess.java index 5d0d0b244..266a8f27e 100644 --- a/src/main/java/com/metaweb/gridworks/process/ReconProcess.java +++ b/src/main/java/com/metaweb/gridworks/process/ReconProcess.java @@ -20,13 +20,13 @@ import org.json.JSONException; import org.json.JSONObject; import org.json.JSONWriter; -import com.metaweb.gridworks.history.CellChange; import com.metaweb.gridworks.history.HistoryEntry; -import com.metaweb.gridworks.history.MassCellChange; import com.metaweb.gridworks.model.Cell; import com.metaweb.gridworks.model.Project; import com.metaweb.gridworks.model.Recon; import com.metaweb.gridworks.model.ReconCandidate; +import com.metaweb.gridworks.model.changes.CellChange; +import com.metaweb.gridworks.model.changes.MassCellChange; import com.metaweb.gridworks.util.ParsingUtilities; public class ReconProcess extends LongRunningProcess implements Runnable {