From 6475fa67a0b7a8f2b4fcbe4afd334ce21e1eb03e Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Thu, 13 Jun 2024 16:28:56 +0200 Subject: [PATCH 1/2] Refactor Cell and subclasses --- app/src/main/java/xl/model/BombCell.java | 3 +++ app/src/main/java/xl/model/Cell.java | 1 + app/src/main/java/xl/model/CommentCell.java | 4 ++++ app/src/main/java/xl/model/ExpressionCell.java | 5 ++++- app/src/main/java/xl/model/XLModel.java | 17 ++++------------- 5 files changed, 16 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/xl/model/BombCell.java b/app/src/main/java/xl/model/BombCell.java index 4f1782d..c8dc2b8 100644 --- a/app/src/main/java/xl/model/BombCell.java +++ b/app/src/main/java/xl/model/BombCell.java @@ -19,4 +19,7 @@ public class BombCell implements Cell { throw XLException.ERROR_RECURSIVE; } + public String formula() { + throw XLException.ERROR_RECURSIVE; + } } diff --git a/app/src/main/java/xl/model/Cell.java b/app/src/main/java/xl/model/Cell.java index a65781e..0971c7f 100644 --- a/app/src/main/java/xl/model/Cell.java +++ b/app/src/main/java/xl/model/Cell.java @@ -8,4 +8,5 @@ import xl.expr.Environment; public interface Cell { public double cellValue(Environment e); public String displayValue(); + public String formula(); } diff --git a/app/src/main/java/xl/model/CommentCell.java b/app/src/main/java/xl/model/CommentCell.java index b9a9550..45a98e7 100644 --- a/app/src/main/java/xl/model/CommentCell.java +++ b/app/src/main/java/xl/model/CommentCell.java @@ -16,6 +16,10 @@ public class CommentCell implements Cell { } public String displayValue() { + return "# " + commentText; + } + + public String formula() { return commentText; } } diff --git a/app/src/main/java/xl/model/ExpressionCell.java b/app/src/main/java/xl/model/ExpressionCell.java index b720159..630dc39 100644 --- a/app/src/main/java/xl/model/ExpressionCell.java +++ b/app/src/main/java/xl/model/ExpressionCell.java @@ -18,9 +18,12 @@ public class ExpressionCell implements Cell { } public String displayValue() { + return Double.toString(cellValue(ENVIRON)); + } + + public String formula() { return expr.toString(); } - } diff --git a/app/src/main/java/xl/model/XLModel.java b/app/src/main/java/xl/model/XLModel.java index 072b43e..62c3483 100644 --- a/app/src/main/java/xl/model/XLModel.java +++ b/app/src/main/java/xl/model/XLModel.java @@ -58,7 +58,7 @@ public class XLModel extends Observable implements Environment { status = "Error creating cell"; return; } - + // Tell observers that the model has changed setChanged(); notifyObservers(); @@ -107,25 +107,16 @@ public class XLModel extends Observable implements Environment { public String getAddressValue(String address) { if (map.containsKey(address)) { - Cell cell = map.get(address); - if (cell instanceof CommentCell) { - return cell.displayValue(); - } - return Double.toString(cell.cellValue(this)); + return map.get(address).displayValue(); } return ""; } public String getAddressContent(String address) { if (map.containsKey(address)) { - Cell cell = map.get(address); - if (cell instanceof CommentCell) { - return "#" + map.get(address).displayValue(); - } - return map.get(address).displayValue(); - } else { - return ""; + return map.get(address).formula(); } + return ""; } public boolean containsKey(String address) { From d130907159cb8288d8d80d3525dc6571ab26a5ec Mon Sep 17 00:00:00 2001 From: Imbus <> Date: Thu, 13 Jun 2024 16:41:02 +0200 Subject: [PATCH 2/2] Cell now properly differentiates between formula and displayValue --- app/src/main/java/xl/model/BombCell.java | 2 +- app/src/main/java/xl/model/Cell.java | 2 +- app/src/main/java/xl/model/CommentCell.java | 2 +- app/src/main/java/xl/model/ExpressionCell.java | 4 ++-- app/src/main/java/xl/model/XLModel.java | 4 ++-- app/src/main/java/xl/model/XLPrintStream.java | 12 +++++------- 6 files changed, 12 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/xl/model/BombCell.java b/app/src/main/java/xl/model/BombCell.java index c8dc2b8..cacf355 100644 --- a/app/src/main/java/xl/model/BombCell.java +++ b/app/src/main/java/xl/model/BombCell.java @@ -15,7 +15,7 @@ public class BombCell implements Cell { throw XLException.ERROR_RECURSIVE; } - public String displayValue() { + public String displayValue(Environment e) { throw XLException.ERROR_RECURSIVE; } diff --git a/app/src/main/java/xl/model/Cell.java b/app/src/main/java/xl/model/Cell.java index 0971c7f..f75ff1f 100644 --- a/app/src/main/java/xl/model/Cell.java +++ b/app/src/main/java/xl/model/Cell.java @@ -7,6 +7,6 @@ import xl.expr.Environment; */ public interface Cell { public double cellValue(Environment e); - public String displayValue(); + public String displayValue(Environment e); public String formula(); } diff --git a/app/src/main/java/xl/model/CommentCell.java b/app/src/main/java/xl/model/CommentCell.java index 45a98e7..c9b03ec 100644 --- a/app/src/main/java/xl/model/CommentCell.java +++ b/app/src/main/java/xl/model/CommentCell.java @@ -15,7 +15,7 @@ public class CommentCell implements Cell { return 0; } - public String displayValue() { + public String displayValue(Environment e) { return "# " + commentText; } diff --git a/app/src/main/java/xl/model/ExpressionCell.java b/app/src/main/java/xl/model/ExpressionCell.java index 630dc39..4575352 100644 --- a/app/src/main/java/xl/model/ExpressionCell.java +++ b/app/src/main/java/xl/model/ExpressionCell.java @@ -17,8 +17,8 @@ public class ExpressionCell implements Cell { return expr.value(env); } - public String displayValue() { - return Double.toString(cellValue(ENVIRON)); + public String displayValue(Environment e) { + return Double.toString(cellValue(e)); } public String formula() { diff --git a/app/src/main/java/xl/model/XLModel.java b/app/src/main/java/xl/model/XLModel.java index 62c3483..50a5e7b 100644 --- a/app/src/main/java/xl/model/XLModel.java +++ b/app/src/main/java/xl/model/XLModel.java @@ -99,7 +99,7 @@ public class XLModel extends Observable implements Environment { public void save(String path) { try (XLPrintStream xlPrintStream = new XLPrintStream(path)) { - xlPrintStream.save(map.entrySet()); + xlPrintStream.save(this, map.entrySet()); } catch (IOException e) { status = "Error saving file"; } @@ -107,7 +107,7 @@ public class XLModel extends Observable implements Environment { public String getAddressValue(String address) { if (map.containsKey(address)) { - return map.get(address).displayValue(); + return map.get(address).displayValue(this); } return ""; } diff --git a/app/src/main/java/xl/model/XLPrintStream.java b/app/src/main/java/xl/model/XLPrintStream.java index 3bbe6ca..869f4d2 100644 --- a/app/src/main/java/xl/model/XLPrintStream.java +++ b/app/src/main/java/xl/model/XLPrintStream.java @@ -3,6 +3,9 @@ package xl.model; import java.io.FileNotFoundException; import java.io.PrintStream; import java.util.Map.Entry; + +import xl.expr.Environment; + import java.util.Set; /** @@ -14,16 +17,11 @@ public class XLPrintStream extends PrintStream { super(fileName); } - public void save(Set> set) { + public void save(Environment e, Set> set) { for (Entry entry : set) { print(entry.getKey()); print('='); - Cell cell = entry.getValue(); - if (cell instanceof CommentCell) { - println("#" + cell.displayValue()); - } else { - println(cell.displayValue()); - } + println(entry.getValue().displayValue(e)); } flush(); close();