From 692d51e286a72aee300e3c4e4bdafab77f2b4f5a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Sun, 13 Dec 2020 00:33:06 +0100 Subject: [PATCH 01/10] feat: Add multiplication and its generalization called expression Resolves #1 --- .../de/uulm/sp/swt/profcalculator/Add.java | 10 +++------ .../sp/swt/profcalculator/Expression.java | 15 +++++++++++++ .../sp/swt/profcalculator/Multiplication.java | 18 ++++++++++++++++ .../sp/swt/profcalculator/ProfCalculator.java | 21 ++++++++++++------- 4 files changed, 50 insertions(+), 14 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java index d557740..fca66f5 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java @@ -1,9 +1,8 @@ package de.uulm.sp.swt.profcalculator; -public class Add { +// TODO rename class Add into Addition +public class Add extends Expression { - public Value l, r; - public Add(Value l, Value r) { this.l = l; this.r = r; @@ -16,8 +15,5 @@ public String toString() { public int evaluate() { return l.getValue() + r.getValue(); } - - public String computeEquation() { - return toString() + " = " + evaluate(); - } + } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java new file mode 100644 index 0000000..0075ceb --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -0,0 +1,15 @@ +package de.uulm.sp.swt.profcalculator; + +public abstract class Expression { + + // TODO rename l and r to left and right + public Value l; + public Value r; + + public abstract int evaluate(); + + public String computeEquation() { + return toString() + " = " + evaluate(); + } + +} \ No newline at end of file diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java new file mode 100644 index 0000000..6fa8cc8 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -0,0 +1,18 @@ +package de.uulm.sp.swt.profcalculator; + +public class Multiplication extends Expression { + + public Multiplication(Value l, Value r) { + this.l = l; + this.r = r; + } + + public String toString() { + return l.toString() + " * " + r.toString(); + } + + public int evaluate() { + return l.getValue() * r.getValue(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 0e2930e..e73ad8f 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,13 +16,14 @@ public class ProfCalculator extends Application implements EventHandler Date: Sun, 13 Dec 2020 00:37:49 +0100 Subject: [PATCH 02/10] refactor: Rename class Add and its fields --- .../de/uulm/sp/swt/profcalculator/Add.java | 19 ------------------- .../uulm/sp/swt/profcalculator/Addition.java | 18 ++++++++++++++++++ .../sp/swt/profcalculator/Expression.java | 5 ++--- .../sp/swt/profcalculator/Multiplication.java | 10 +++++----- .../sp/swt/profcalculator/ProfCalculator.java | 4 ++-- 5 files changed, 27 insertions(+), 29 deletions(-) delete mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java deleted file mode 100644 index fca66f5..0000000 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java +++ /dev/null @@ -1,19 +0,0 @@ -package de.uulm.sp.swt.profcalculator; - -// TODO rename class Add into Addition -public class Add extends Expression { - - public Add(Value l, Value r) { - this.l = l; - this.r = r; - } - - public String toString() { - return l.toString() + " + " + r.toString(); - } - - public int evaluate() { - return l.getValue() + r.getValue(); - } - -} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java new file mode 100644 index 0000000..f7c3840 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -0,0 +1,18 @@ +package de.uulm.sp.swt.profcalculator; + +public class Addition extends Expression { + + public Addition(Value left, Value right) { + this.left = left; + this.right = right; + } + + public String toString() { + return left.toString() + " + " + right.toString(); + } + + public int evaluate() { + return left.getValue() + right.getValue(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java index 0075ceb..8dba35d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -2,9 +2,8 @@ public abstract class Expression { - // TODO rename l and r to left and right - public Value l; - public Value r; + public Value left; + public Value right; public abstract int evaluate(); diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index 6fa8cc8..e56f4a3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,17 +2,17 @@ public class Multiplication extends Expression { - public Multiplication(Value l, Value r) { - this.l = l; - this.r = r; + public Multiplication(Value left, Value right) { + this.left = left; + this.right = right; } public String toString() { - return l.toString() + " * " + r.toString(); + return left.toString() + " * " + right.toString(); } public int evaluate() { - return l.getValue() * r.getValue(); + return left.getValue() * right.getValue(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index e73ad8f..d6a3151 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,7 +16,7 @@ public class ProfCalculator extends Application implements EventHandler Date: Wed, 16 Dec 2020 18:39:50 +0100 Subject: [PATCH 03/10] refactor: Push down fields from class Expression --- ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java | 3 +++ .../src/de/uulm/sp/swt/profcalculator/Expression.java | 3 --- .../src/de/uulm/sp/swt/profcalculator/Multiplication.java | 3 +++ 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java index f7c3840..298a3b3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -2,6 +2,9 @@ public class Addition extends Expression { + public Value left; + public Value right; + public Addition(Value left, Value right) { this.left = left; this.right = right; diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java index 8dba35d..f0e4d17 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java @@ -2,9 +2,6 @@ public abstract class Expression { - public Value left; - public Value right; - public abstract int evaluate(); public String computeEquation() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index e56f4a3..b7b896b 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,6 +2,9 @@ public class Multiplication extends Expression { + public Value left; + public Value right; + public Multiplication(Value left, Value right) { this.left = left; this.right = right; From 63d059b7c6d3f8f6dd6a3dfba116a6ce64ee0111 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 18:45:35 +0100 Subject: [PATCH 04/10] feat: Show complete computation as formula --- .../src/de/uulm/sp/swt/profcalculator/Addition.java | 8 ++++---- .../src/de/uulm/sp/swt/profcalculator/Multiplication.java | 8 ++++---- .../src/de/uulm/sp/swt/profcalculator/ProfCalculator.java | 7 +++---- .../src/de/uulm/sp/swt/profcalculator/Value.java | 6 ++++-- 4 files changed, 15 insertions(+), 14 deletions(-) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java index 298a3b3..a994ff0 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java @@ -2,10 +2,10 @@ public class Addition extends Expression { - public Value left; - public Value right; + public Expression left; + public Expression right; - public Addition(Value left, Value right) { + public Addition(Expression left, Expression right) { this.left = left; this.right = right; } @@ -15,7 +15,7 @@ public String toString() { } public int evaluate() { - return left.getValue() + right.getValue(); + return left.evaluate() + right.evaluate(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java index b7b896b..758447d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java @@ -2,10 +2,10 @@ public class Multiplication extends Expression { - public Value left; - public Value right; + public Expression left; + public Expression right; - public Multiplication(Value left, Value right) { + public Multiplication(Expression left, Expression right) { this.left = left; this.right = right; } @@ -15,7 +15,7 @@ public String toString() { } public int evaluate() { - return left.getValue() * right.getValue(); + return left.evaluate() * right.evaluate(); } } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index d6a3151..47ee734 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -16,7 +16,7 @@ public class ProfCalculator extends Application implements EventHandler Date: Wed, 16 Dec 2020 18:47:10 +0100 Subject: [PATCH 05/10] refactor: Move classes into a new subpackage for expressions --- .../src/de/uulm/sp/swt/profcalculator/ProfCalculator.java | 4 ++++ .../sp/swt/profcalculator/{ => expressions}/Addition.java | 2 +- .../sp/swt/profcalculator/{ => expressions}/Expression.java | 2 +- .../swt/profcalculator/{ => expressions}/Multiplication.java | 2 +- .../uulm/sp/swt/profcalculator/{ => expressions}/Value.java | 2 +- 5 files changed, 8 insertions(+), 4 deletions(-) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Addition.java (87%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Expression.java (75%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Multiplication.java (87%) rename ProfCalculator/src/de/uulm/sp/swt/profcalculator/{ => expressions}/Value.java (82%) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 47ee734..0bda3d8 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,5 +1,9 @@ package de.uulm.sp.swt.profcalculator; +import de.uulm.sp.swt.profcalculator.expressions.Addition; +import de.uulm.sp.swt.profcalculator.expressions.Expression; +import de.uulm.sp.swt.profcalculator.expressions.Multiplication; +import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java similarity index 87% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java index a994ff0..99a7a8a 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Addition extends Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java similarity index 75% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java index f0e4d17..c2624ac 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public abstract class Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java similarity index 87% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java index 758447d..c1f3e2d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Multiplication extends Expression { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java similarity index 82% rename from ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java rename to ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java index dc30780..41c5a07 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java @@ -1,4 +1,4 @@ -package de.uulm.sp.swt.profcalculator; +package de.uulm.sp.swt.profcalculator.expressions; public class Value extends Expression { From 37d0dac91b2dab40a69d2bc5ce0a8f67d221a070 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 19:11:44 +0100 Subject: [PATCH 06/10] feat: Add brackets to expressions when needed --- .../sp/swt/profcalculator/ProfCalculator.java | 2 ++ .../profcalculator/expressions/Addition.java | 4 +-- .../expressions/Expression.java | 6 +++++ .../expressions/Multiplication.java | 4 +-- .../expressions/NecessaryBrackets.java | 25 +++++++++++++++++++ .../swt/profcalculator/expressions/Value.java | 2 +- 6 files changed, 38 insertions(+), 5 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 0bda3d8..51994b5 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -3,6 +3,7 @@ import de.uulm.sp.swt.profcalculator.expressions.Addition; import de.uulm.sp.swt.profcalculator.expressions.Expression; import de.uulm.sp.swt.profcalculator.expressions.Multiplication; +import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; @@ -57,6 +58,7 @@ public void handle(ActionEvent event) { else if (event.getSource() == multiplicationButton) { expression = new Multiplication(expression, new Value(newValue)); } + expression = new NecessaryBrackets(expression); updateGUI(); inputField.requestFocus(); } catch (NumberFormatException e) { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java index 99a7a8a..290f903 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java @@ -10,8 +10,8 @@ public Addition(Expression left, Expression right) { this.right = right; } - public String toString() { - return left.toString() + " + " + right.toString(); + public String toString(Expression parent) { + return left.toString(this) + " + " + right.toString(this); } public int evaluate() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java index c2624ac..2047d49 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Expression.java @@ -4,6 +4,12 @@ public abstract class Expression { public abstract int evaluate(); + public abstract String toString(Expression parent); + + public String toString() { + return toString(null); + } + public String computeEquation() { return toString() + " = " + evaluate(); } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java index c1f3e2d..7256be3 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Multiplication.java @@ -10,8 +10,8 @@ public Multiplication(Expression left, Expression right) { this.right = right; } - public String toString() { - return left.toString() + " * " + right.toString(); + public String toString(Expression parent) { + return left.toString(this) + " * " + right.toString(this); } public int evaluate() { diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java new file mode 100644 index 0000000..177b051 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/NecessaryBrackets.java @@ -0,0 +1,25 @@ +package de.uulm.sp.swt.profcalculator.expressions; + +public class NecessaryBrackets extends Expression { + + private Expression expression; + + public NecessaryBrackets(Expression expression) { + this.expression = expression; + } + + @Override + public String toString(Expression parent) { + String childString = expression.toString(parent); + if (parent instanceof Multiplication && expression instanceof Addition) { + childString = "(" + childString + ")"; + } + return childString; + } + + @Override + public int evaluate() { + return expression.evaluate(); + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java index 41c5a07..c9f9ed6 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Value.java @@ -8,7 +8,7 @@ public Value(int value) { this.value = value; } - public String toString() { + public String toString(Expression parent) { return value.toString(); } From 1bf0a967ada84f5bab38ffaa490a3473a7f4e65e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 19:42:05 +0100 Subject: [PATCH 07/10] feat: Enable logging with the singleton pattern --- .../de/uulm/sp/swt/profcalculator/Logger.java | 23 +++++++++++++++++++ .../sp/swt/profcalculator/ProfCalculator.java | 2 ++ 2 files changed, 25 insertions(+) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java new file mode 100644 index 0000000..8786ac8 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java @@ -0,0 +1,23 @@ +package de.uulm.sp.swt.profcalculator; + +public class Logger { + + public static final boolean LOGGING = true; + + private static Logger logger = new Logger(); + + private Logger() { + log("Logging enabled"); + } + + public void log(String message) { + if (LOGGING) { + System.out.println(message); + } + } + + public static Logger getLogger() { + return logger; + } + +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 51994b5..e6ceb82 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -54,9 +54,11 @@ public void handle(ActionEvent event) { int newValue = Integer.parseInt(inputField.getText()); if (event.getSource() == additionButton) { expression = new Addition(expression, new Value(newValue)); + Logger.getLogger().log("+ " + newValue); } else if (event.getSource() == multiplicationButton) { expression = new Multiplication(expression, new Value(newValue)); + Logger.getLogger().log("* " + newValue); } expression = new NecessaryBrackets(expression); updateGUI(); From 6164eb5a4e6c0b8b8f1b690834c7486b93cce311 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thomas=20Th=C3=BCm?= Date: Wed, 16 Dec 2020 20:09:33 +0100 Subject: [PATCH 08/10] feat: Allow to change the visual style of the calculator --- .../sp/swt/profcalculator/ProfCalculator.java | 12 ++++++--- .../gui/BlueFontGUIFactory.java | 26 +++++++++++++++++++ .../sp/swt/profcalculator/gui/GUIFactory.java | 12 +++++++++ .../gui/LargeFontGUIFactory.java | 25 ++++++++++++++++++ 4 files changed, 71 insertions(+), 4 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/gui/BlueFontGUIFactory.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/gui/GUIFactory.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/gui/LargeFontGUIFactory.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index e6ceb82..8f7fb4f 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -5,6 +5,8 @@ import de.uulm.sp.swt.profcalculator.expressions.Multiplication; import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; import de.uulm.sp.swt.profcalculator.expressions.Value; +import de.uulm.sp.swt.profcalculator.gui.BlueFontGUIFactory; +import de.uulm.sp.swt.profcalculator.gui.GUIFactory; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -22,15 +24,17 @@ public class ProfCalculator extends Application implements EventHandler Date: Wed, 16 Dec 2020 20:43:08 +0100 Subject: [PATCH 09/10] feat: Increase the default value by one every second --- .../sp/swt/profcalculator/ProfCalculator.java | 8 ++--- .../expressions/CounterValue.java | 33 +++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 8f7fb4f..3018f37 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,6 +1,8 @@ package de.uulm.sp.swt.profcalculator; import de.uulm.sp.swt.profcalculator.expressions.Addition; +import de.uulm.sp.swt.profcalculator.expressions.CounterValue; +import de.uulm.sp.swt.profcalculator.expressions.CounterValue; import de.uulm.sp.swt.profcalculator.expressions.Expression; import de.uulm.sp.swt.profcalculator.expressions.Multiplication; import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; @@ -21,9 +23,7 @@ public class ProfCalculator extends Application implements EventHandler { - private final static Value DEFAULT_VALUE = new Value(0); - - private Expression expression = DEFAULT_VALUE; + private Expression expression = new CounterValue(this); private GUIFactory guiFactory = new BlueFontGUIFactory(); @@ -72,7 +72,7 @@ else if (event.getSource() == multiplicationButton) { } } - private void updateGUI() { + public void updateGUI() { resultLabel.setText(expression.computeEquation()); inputField.setText(""); errorLabel.setText(""); diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java new file mode 100644 index 0000000..8ba1c98 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java @@ -0,0 +1,33 @@ +package de.uulm.sp.swt.profcalculator.expressions; + +import de.uulm.sp.swt.profcalculator.ProfCalculator; +import javafx.application.Platform; + +public class CounterValue extends Value implements Runnable { + + private ProfCalculator calc; + + public CounterValue(ProfCalculator calc) { + super(0); + this.calc = calc; + new Thread(this).start(); + } + + @Override + public void run() { + while (value < 10) { + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + } + value++; + Platform.runLater(new Runnable() { + @Override + public void run() { + calc.updateGUI(); + } + }); + } + } + +} From 547cf043b8610127142ad01a387ee98e508ce8a3 Mon Sep 17 00:00:00 2001 From: Simon Schall Date: Sat, 17 Jul 2021 22:39:06 +0200 Subject: [PATCH 10/10] add observer pattern to avoid explicit reference to calculator in CounterValue --- .../uulm/sp/swt/profcalculator/Observer.java | 5 ++++ .../sp/swt/profcalculator/ProfCalculator.java | 7 ++++- .../uulm/sp/swt/profcalculator/Subject.java | 7 +++++ .../expressions/CounterValue.java | 29 ++++++++++++++++--- 4 files changed, 43 insertions(+), 5 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Subject.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java new file mode 100644 index 0000000..9d01f2d --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java @@ -0,0 +1,5 @@ +package de.uulm.sp.swt.profcalculator; + +public interface Observer { + void update(); +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 3018f37..9ccbfa7 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -21,7 +21,7 @@ import javafx.scene.paint.Color; import javafx.stage.Stage; -public class ProfCalculator extends Application implements EventHandler { +public class ProfCalculator extends Application implements EventHandler, Observer { private Expression expression = new CounterValue(this); @@ -82,4 +82,9 @@ public static void main(String[] args) { launch(args); } + @Override + public void update() { + updateGUI(); + } + } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Subject.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Subject.java new file mode 100644 index 0000000..dabadaf --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Subject.java @@ -0,0 +1,7 @@ +package de.uulm.sp.swt.profcalculator; + +public interface Subject { + void register(Observer observer); + void unregister(Observer observer); + void notifyObservers(); +} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java index 8ba1c98..3b402ae 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java @@ -1,15 +1,19 @@ package de.uulm.sp.swt.profcalculator.expressions; +import java.util.LinkedList; + +import de.uulm.sp.swt.profcalculator.Observer; import de.uulm.sp.swt.profcalculator.ProfCalculator; +import de.uulm.sp.swt.profcalculator.Subject; import javafx.application.Platform; -public class CounterValue extends Value implements Runnable { +public class CounterValue extends Value implements Runnable, Subject { - private ProfCalculator calc; + private LinkedList observerList = new LinkedList(); public CounterValue(ProfCalculator calc) { super(0); - this.calc = calc; + observerList.add(calc); new Thread(this).start(); } @@ -24,10 +28,27 @@ public void run() { Platform.runLater(new Runnable() { @Override public void run() { - calc.updateGUI(); + notifyObservers(); } }); } } + @Override + public void register(Observer observer) { + observerList.add(observer); + } + + @Override + public void unregister(Observer observer) { + observerList.remove(observer); + } + + @Override + public void notifyObservers() { + for(int i=0;i