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 d557740..0000000 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Add.java +++ /dev/null @@ -1,23 +0,0 @@ -package de.uulm.sp.swt.profcalculator; - -public class Add { - - public Value l, r; - - 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(); - } - - public String computeEquation() { - return toString() + " = " + evaluate(); - } -} 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/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 0e2930e..9ccbfa7 100644 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/ProfCalculator.java @@ -1,5 +1,14 @@ 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; +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; @@ -12,32 +21,34 @@ 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 final static Value DEFAULT_VALUE = new Value(0); + private Expression expression = new CounterValue(this); + + private GUIFactory guiFactory = new BlueFontGUIFactory(); - private Add addition = new Add(DEFAULT_VALUE, DEFAULT_VALUE); - - private Label errorLabel = new Label(); + private Label errorLabel = guiFactory.createLabel(); private TextField inputField = new TextField(); - private Button addButton = new Button("+"); + private Button additionButton = guiFactory.createButton("+"); + private Button multiplicationButton = guiFactory.createButton("*"); - private Label resultLabel = new Label(); + private Label resultLabel = guiFactory.createLabel(); @Override public void start(Stage stage) throws Exception { stage.setTitle("Professorial Calculator"); errorLabel.setTextFill(Color.web("#AA0000")); - VBox layout = new VBox(10, errorLabel, inputField, addButton, resultLabel); + VBox layout = new VBox(10, errorLabel, inputField, additionButton, multiplicationButton, resultLabel); layout.setPadding(new Insets(20, 80, 20, 80)); Scene scene = new Scene(layout); stage.setScene(scene); stage.show(); - addButton.setOnAction(this); + additionButton.setOnAction(this); + multiplicationButton.setOnAction(this); updateGUI(); } @@ -45,8 +56,15 @@ public void start(Stage stage) throws Exception { public void handle(ActionEvent event) { try { int newValue = Integer.parseInt(inputField.getText()); - int oldResult = addition.evaluate(); - addition = new Add(new Value(oldResult), new Value(newValue)); + 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(); inputField.requestFocus(); } catch (NumberFormatException e) { @@ -54,8 +72,8 @@ public void handle(ActionEvent event) { } } - private void updateGUI() { - resultLabel.setText(addition.computeEquation()); + public void updateGUI() { + resultLabel.setText(expression.computeEquation()); inputField.setText(""); errorLabel.setText(""); } @@ -64,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/Value.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java deleted file mode 100644 index 85e75c7..0000000 --- a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/Value.java +++ /dev/null @@ -1,18 +0,0 @@ -package de.uulm.sp.swt.profcalculator; - -public class Value { - - Integer value; - - public Value(int value) { - this.value = value; - } - - public String toString() { - return value.toString(); - } - - public int getValue() { - return value.intValue(); - } -} diff --git a/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java new file mode 100644 index 0000000..290f903 --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/Addition.java @@ -0,0 +1,21 @@ +package de.uulm.sp.swt.profcalculator.expressions; + +public class Addition extends Expression { + + public Expression left; + public Expression right; + + public Addition(Expression left, Expression right) { + this.left = left; + this.right = right; + } + + public String toString(Expression parent) { + return left.toString(this) + " + " + right.toString(this); + } + + public int evaluate() { + return left.evaluate() + right.evaluate(); + } + +} 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..3b402ae --- /dev/null +++ b/ProfCalculator/src/de/uulm/sp/swt/profcalculator/expressions/CounterValue.java @@ -0,0 +1,54 @@ +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, Subject { + + private LinkedList observerList = new LinkedList(); + + public CounterValue(ProfCalculator calc) { + super(0); + observerList.add(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() { + 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