From 1021067099085d6b8cd7384580ddc83cb696c1d4 Mon Sep 17 00:00:00 2001 From: Tim Nolle Date: Fri, 10 Sep 2021 16:22:20 +0200 Subject: [PATCH 1/6] updated gitignore to ignore the eclipse-files --- .gitignore | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) diff --git a/.gitignore b/.gitignore index a1c2a23..0b4f76c 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,5 @@ +ProfCalculator/.classpath +.project # Compiled class file *.class @@ -21,3 +23,101 @@ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* + + +# Created by https://www.toptal.com/developers/gitignore/api/java,eclipse +# Edit at https://www.toptal.com/developers/gitignore?templates=java,eclipse + +### Eclipse ### +.metadata +bin/ +tmp/ +*.tmp +*.bak +*.swp +*~.nib +local.properties +.settings/ +.loadpath +.recommenders + +# External tool builders +.externalToolBuilders/ + +# Locally stored "Eclipse launch configurations" +*.launch + +# PyDev specific (Python IDE for Eclipse) +*.pydevproject + +# CDT-specific (C/C++ Development Tooling) +.cproject + +# CDT- autotools +.autotools + +# Java annotation processor (APT) +.factorypath + +# PDT-specific (PHP Development Tools) +.buildpath + +# sbteclipse plugin +.target + +# Tern plugin +.tern-project + +# TeXlipse plugin +.texlipse + +# STS (Spring Tool Suite) +.springBeans + +# Code Recommenders +.recommenders/ + +# Annotation Processing +.apt_generated/ +.apt_generated_test/ + +# Scala IDE specific (Scala & Java development for Eclipse) +.cache-main +.scala_dependencies +.worksheet + +# Uncomment this line if you wish to ignore the project description file. +# Typically, this file would be tracked if it contains build/dependency configurations: +#.project + +### Eclipse Patch ### +# Spring Boot Tooling +.sts4-cache/ + +### Java ### +# Compiled class file +*.class + +# Log file +*.log + +# BlueJ files +*.ctxt + +# Mobile Tools for Java (J2ME) +.mtj.tmp/ + +# Package Files # +*.jar +*.war +*.nar +*.ear +*.zip +*.tar.gz +*.rar + +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* + +# End of https://www.toptal.com/developers/gitignore/api/java,eclipse + From 2bd7552d16d02c1a909ad078006b2235b60e59fd Mon Sep 17 00:00:00 2001 From: Tim Nolle Date: Sat, 11 Sep 2021 15:56:40 +0200 Subject: [PATCH 2/6] unneccesary commit, but files dont get ignored despite in the gitignore --- .gitignore | 2 +- ProfCalculator/.classpath | 3 +-- ProfCalculator/.settings/org.eclipse.jdt.core.prefs | 9 +++++---- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 0b4f76c..438d538 100644 --- a/.gitignore +++ b/.gitignore @@ -37,7 +37,7 @@ tmp/ *.swp *~.nib local.properties -.settings/ +.settings/* .loadpath .recommenders diff --git a/ProfCalculator/.classpath b/ProfCalculator/.classpath index 2b1ff5c..3c48f73 100644 --- a/ProfCalculator/.classpath +++ b/ProfCalculator/.classpath @@ -1,11 +1,10 @@ - + - diff --git a/ProfCalculator/.settings/org.eclipse.jdt.core.prefs b/ProfCalculator/.settings/org.eclipse.jdt.core.prefs index ef28d2b..cd8d089 100644 --- a/ProfCalculator/.settings/org.eclipse.jdt.core.prefs +++ b/ProfCalculator/.settings/org.eclipse.jdt.core.prefs @@ -1,8 +1,9 @@ eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=13 +org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate +org.eclipse.jdt.core.compiler.codegen.targetPlatform=11 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=13 +org.eclipse.jdt.core.compiler.compliance=11 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate @@ -10,5 +11,5 @@ org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning -org.eclipse.jdt.core.compiler.release=enabled -org.eclipse.jdt.core.compiler.source=13 +org.eclipse.jdt.core.compiler.release=disabled +org.eclipse.jdt.core.compiler.source=11 From 357e62b50306aeab3d6feacdc72d328ff59b2b5a Mon Sep 17 00:00:00 2001 From: Tim Nolle Date: Sat, 11 Sep 2021 15:57:24 +0200 Subject: [PATCH 3/6] added 2 new operators: Div and Sub. Changed Int to Double to be able to calculate the divisions correctly --- .../sp/swt/profcalculator/ProfCalculator.java | 20 ++++++++++++---- .../profcalculator/expressions/Addition.java | 2 +- .../swt/profcalculator/expressions/Div.java | 23 +++++++++++++++++++ .../expressions/Expression.java | 2 +- .../expressions/Multiplication.java | 2 +- .../expressions/NecessaryBrackets.java | 5 ++-- .../swt/profcalculator/expressions/Sub.java | 21 +++++++++++++++++ .../swt/profcalculator/expressions/Value.java | 8 +++---- 8 files changed, 70 insertions(+), 13 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Div.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Sub.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 51994b5..8b9ecf1 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,9 +1,11 @@ package de.uulm.sp.swt.profcalculator; import de.uulm.sp.swt.profcalculator.expressions.Addition; +import de.uulm.sp.swt.profcalculator.expressions.Div; 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.Sub; import de.uulm.sp.swt.profcalculator.expressions.Value; import javafx.application.Application; import javafx.event.ActionEvent; @@ -28,7 +30,9 @@ public class ProfCalculator extends Application implements EventHandler Date: Mon, 13 Sep 2021 15:48:30 +0200 Subject: [PATCH 4/6] implemented new Factory and added textField to every factory --- .../sp/swt/profcalculator/ProfCalculator.java | 12 ++-- .../gui/BlueFontGUIFactory.java | 17 +++++- .../sp/swt/profcalculator/gui/GUIFactory.java | 5 ++ .../gui/LargeFontGUIFactory.java | 14 +++++ .../gui/TerminalStyleFactory.java | 55 +++++++++++++++++++ 5 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/gui/TerminalStyleFactory.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 21bb357..d31428d 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -7,8 +7,7 @@ import de.uulm.sp.swt.profcalculator.expressions.NecessaryBrackets; import de.uulm.sp.swt.profcalculator.expressions.Sub; 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 de.uulm.sp.swt.profcalculator.gui.*; import javafx.application.Application; import javafx.event.ActionEvent; import javafx.event.EventHandler; @@ -27,16 +26,16 @@ public class ProfCalculator extends Application implements EventHandler Date: Tue, 14 Sep 2021 16:57:39 +0200 Subject: [PATCH 5/6] implemented observer-pattern for counterValue --- .../de/uulm/sp/swt/profcalculator/Logger.java | 6 +-- .../sp/swt/profcalculator/Observable.java | 40 +++++++++++++++++++ .../uulm/sp/swt/profcalculator/Observer.java | 7 ++++ .../sp/swt/profcalculator/ProfCalculator.java | 35 ++++++++++++---- .../profcalculator/expressions/Addition.java | 4 +- .../expressions/CounterValue.java | 26 ++++++------ .../swt/profcalculator/expressions/Div.java | 2 +- .../expressions/Multiplication.java | 2 +- .../expressions/NecessaryBrackets.java | 6 +-- .../swt/profcalculator/expressions/Sub.java | 4 +- .../swt/profcalculator/expressions/Value.java | 2 +- .../gui/BlueFontGUIFactory.java | 8 ++-- .../sp/swt/profcalculator/gui/GUIFactory.java | 2 +- .../gui/LargeFontGUIFactory.java | 6 +-- .../gui/TerminalStyleFactory.java | 14 +++---- 15 files changed, 116 insertions(+), 48 deletions(-) create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observable.java create mode 100644 ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java index 8786ac8..a92dd2e 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Logger.java @@ -1,9 +1,9 @@ package de.uulm.sp.swt.profcalculator; public class Logger { - + public static final boolean LOGGING = true; - + private static Logger logger = new Logger(); private Logger() { @@ -15,7 +15,7 @@ public void log(String message) { System.out.println(message); } } - + public static Logger getLogger() { return logger; } diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observable.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observable.java new file mode 100644 index 0000000..b5f96d9 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observable.java @@ -0,0 +1,40 @@ +package de.uulm.sp.swt.profcalculator; + +import java.util.LinkedList; + +import de.uulm.sp.swt.profcalculator.expressions.Value; + +public class Observable extends Value { + + private LinkedList observers = new LinkedList<>(); + private boolean changed = false; + + public Observable(double value) { + super(value); + + } + + public void addObserver(Observer o) { + observers.add(o); + } + + public void removeObserver(Observer o) { + observers.remove(o); + } + + public void notifyObservers() { + if (hasChanged()) { + for (Observer o : observers) { + o.update(); + } + } + } + + public boolean hasChanged() { + return changed; + } + + public void setChanged() { + changed = true; + } +} 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..8c3acb8 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Observer.java @@ -0,0 +1,7 @@ +package de.uulm.sp.swt.profcalculator; + +import javafx.application.Application; + +public abstract class Observer extends Application { + public abstract 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 db2ef52..44fc908 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -9,7 +9,7 @@ import de.uulm.sp.swt.profcalculator.expressions.Sub; import de.uulm.sp.swt.profcalculator.expressions.Value; import de.uulm.sp.swt.profcalculator.gui.*; -import javafx.application.Application; +import javafx.application.Platform; import javafx.event.ActionEvent; import javafx.event.EventHandler; import javafx.geometry.Insets; @@ -21,10 +21,12 @@ import javafx.scene.paint.Color; import javafx.stage.Stage; -public class ProfCalculator extends Application implements EventHandler { +public class ProfCalculator extends Observer implements EventHandler { + + private CounterValue subject = new CounterValue(); + + private Expression expression = subject; - private Expression expression = new CounterValue(this); - private GUIFactory guiFactory = new TerminalStyleFactory(); private Label errorLabel = guiFactory.createLabel(); @@ -38,12 +40,17 @@ public class ProfCalculator extends Application implements EventHandler Date: Tue, 14 Sep 2021 17:01:59 +0200 Subject: [PATCH 6/6] refactor: move logging of button press after the if this reduces redundant code because we habe the nsame code only once and it is also more modular because the text for the logging output is built dynamically with the text on the button --- .../uulm/sp/swt/profcalculator/ProfCalculator.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java index 44fc908..f8c79aa 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -69,18 +69,19 @@ public void start(Stage stage) throws Exception { public void handle(ActionEvent event) { try { double newValue = Double.parseDouble(inputField.getText()); + Button pressedButton = (Button) event.getSource(); - if (event.getSource() == additionButton) { + if (pressedButton == additionButton) { expression = new Addition(expression, new Value(newValue)); - Logger.getLogger().log("+ " + newValue); - } else if (event.getSource() == subtractionButton) { + } else if (pressedButton == subtractionButton) { expression = new Sub(expression, new Value(newValue)); - } else if (event.getSource() == multiplicationButton) { + } else if (pressedButton == multiplicationButton) { expression = new Multiplication(expression, new Value(newValue)); - Logger.getLogger().log("* " + newValue); - } else if (event.getSource() == divisionButton) { + } else if (pressedButton == divisionButton) { expression = new Div(expression, new Value(newValue)); } + + Logger.getLogger().log(pressedButton.getText() + " " + newValue); expression = new NecessaryBrackets(expression); updateGUI(); inputField.requestFocus();