From 88851522c6f8adb556e1c885e25395960add3697 Mon Sep 17 00:00:00 2001
From: Martin Goik <goik@hdm-stuttgart.de>
Date: Tue, 28 Oct 2014 23:29:34 +0100
Subject: [PATCH] Preparing an account transfering application

---
 Sda2/P/account/.gitignore                     |  4 +
 Sda2/P/account/pom.xml                        | 48 +++++++++++
 .../hdm_stuttgart/mi/sda2/account/Driver.java | 13 +++
 .../mi/sda2/account/MainGUI.java              | 86 +++++++++++++++++++
 .../mi/sda2/account/gui/NumberField.java      | 37 ++++++++
 .../src/main/resources/log4j.properties       | 15 ++++
 .../mi/sda2/account/AppTest.java              | 14 +++
 7 files changed, 217 insertions(+)
 create mode 100644 Sda2/P/account/.gitignore
 create mode 100644 Sda2/P/account/pom.xml
 create mode 100644 Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/Driver.java
 create mode 100644 Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/MainGUI.java
 create mode 100644 Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/gui/NumberField.java
 create mode 100644 Sda2/P/account/src/main/resources/log4j.properties
 create mode 100644 Sda2/P/account/src/test/java/de/hdm_stuttgart/mi/sda2/account/AppTest.java

diff --git a/Sda2/P/account/.gitignore b/Sda2/P/account/.gitignore
new file mode 100644
index 000000000..a1c3ab4d0
--- /dev/null
+++ b/Sda2/P/account/.gitignore
@@ -0,0 +1,4 @@
+/target/
+/.settings/
+.classpath
+.project
diff --git a/Sda2/P/account/pom.xml b/Sda2/P/account/pom.xml
new file mode 100644
index 000000000..364aa607f
--- /dev/null
+++ b/Sda2/P/account/pom.xml
@@ -0,0 +1,48 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+
+	<groupId>de.hdm-stuttgart.mi.sda2</groupId>
+	<artifactId>account</artifactId>
+	<version>0.9</version>
+	<packaging>jar</packaging>
+
+	<name>account</name>
+
+	<!--Fixme: Add a sensible project related domain here -->
+	<url>http://somedomain.org</url>
+
+	<properties>
+		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+	</properties>
+
+	<dependencies>
+		<dependency>
+			<groupId>junit</groupId>
+			<artifactId>junit</artifactId>
+			<version>4.11</version>
+			<scope>test</scope>
+		</dependency>
+
+		<dependency>
+			<groupId>log4j</groupId>
+			<artifactId>log4j</artifactId>
+			<version>1.2.17</version>
+		</dependency>
+
+	</dependencies>
+
+	<build>
+		<plugins>
+			<plugin>
+				<groupId>org.apache.maven.plugins</groupId>
+				<artifactId>maven-compiler-plugin</artifactId>
+				<version>3.1</version>
+				<configuration>
+					<source>1.8</source>
+					<target>1.8</target>
+				</configuration>
+			</plugin>
+		</plugins>
+	</build>
+</project>
diff --git a/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/Driver.java b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/Driver.java
new file mode 100644
index 000000000..2af860570
--- /dev/null
+++ b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/Driver.java
@@ -0,0 +1,13 @@
+package de.hdm_stuttgart.mi.sda2.account;
+
+import org.apache.log4j.Logger;
+
+/**
+ * Hello world!
+ *
+ */
+public class Driver {
+   private static Logger log = Logger.getLogger(Driver.class);
+
+
+}
diff --git a/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/MainGUI.java b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/MainGUI.java
new file mode 100644
index 000000000..d136b70a4
--- /dev/null
+++ b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/MainGUI.java
@@ -0,0 +1,86 @@
+package de.hdm_stuttgart.mi.sda2.account;
+
+import javafx.application.Application;
+import javafx.geometry.Insets;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.control.Button;
+import javafx.scene.control.Label;
+import javafx.scene.layout.GridPane;
+import javafx.scene.text.Font;
+import javafx.scene.text.FontWeight;
+import javafx.scene.text.Text;
+import javafx.stage.Stage;
+import de.hdm_stuttgart.mi.sda2.account.gui.NumberField;
+
+public class MainGUI extends Application {
+
+    public static void main( String[] args ) {
+    	launch(args);
+    }
+    public MainGUI() {
+    	
+    	initEditor();
+    	srcAccountNoField.textProperty().addListener(event -> amountField.setDisable(false));
+    	
+    	amountField.textProperty().addListener(event -> {
+    		srcAccountNoField.setDisable(true);
+    		destAccountNoField.setDisable(false);
+    	});
+    	destAccountNoField.textProperty().addListener(event -> {
+    		amountField.setDisable(true);
+    		commitBtn.setDisable(false);
+    	});
+    	
+    	commitBtn.setOnAction(event-> initEditor());
+    }
+    
+    final NumberField
+		 srcAccountNoField = new NumberField()
+		,amountField = new NumberField()
+		,destAccountNoField = new NumberField();
+    
+    final Button commitBtn = new Button("Commit transaction");
+    
+    @Override
+    public void start(final Stage primaryStage) {
+        primaryStage.setTitle("Account transfer!");
+        
+        final GridPane grid = new GridPane();
+        grid.setAlignment(Pos.CENTER);
+        grid.setHgap(10);
+        grid.setVgap(10);
+        grid.setPadding(new Insets(25, 25, 25, 25));
+        
+        int currentRowIndex = 0;
+        final Text scenetitle = new Text("Account transfer");//rowIndex == 0
+        scenetitle.setFont(Font.font("Tahoma", FontWeight.NORMAL, 20));
+        grid.add(scenetitle, 0, currentRowIndex, 2, 1);
+        
+        currentRowIndex++;
+        grid.add(new Label("Source account:"), 0, currentRowIndex);
+        grid.add(srcAccountNoField, 1, currentRowIndex);
+
+        currentRowIndex++;
+        grid.add(new Label("Amount:"), 0, currentRowIndex);
+        grid.add(amountField, 1, currentRowIndex);
+        
+        currentRowIndex++;
+        grid.add(new Label("Destination account:"), 0, currentRowIndex);
+        grid.add(destAccountNoField, 1, currentRowIndex);
+
+        currentRowIndex++;
+        grid.add(commitBtn, 1, currentRowIndex);
+        
+        Scene scene = new Scene(grid, 300, 250);
+        primaryStage.setScene(scene);
+        primaryStage.show();
+    }
+    
+    private void initEditor() {
+    	srcAccountNoField.setDisable(false);
+    	amountField.setDisable(true);
+    	destAccountNoField.setDisable(true);
+    	commitBtn.setDisable(true);
+    }
+}
diff --git a/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/gui/NumberField.java b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/gui/NumberField.java
new file mode 100644
index 000000000..fdbc928b0
--- /dev/null
+++ b/Sda2/P/account/src/main/java/de/hdm_stuttgart/mi/sda2/account/gui/NumberField.java
@@ -0,0 +1,37 @@
+package de.hdm_stuttgart.mi.sda2.account.gui;
+
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.TextField;
+
+public class NumberField extends TextField {
+
+	int value = 0;
+
+	public NumberField() {
+
+		setText("0");
+		textProperty().addListener(new ChangeListener<String>() {
+
+			@Override
+			public void changed(ObservableValue<? extends String> observable,
+					String oldValue, String newValue) {
+				switch (newValue) {
+				case "":
+				case "-":
+					return;
+				}
+
+				try {
+					value = Integer.parseInt(newValue);
+				} catch (NumberFormatException e) {
+					setText(oldValue);
+				}
+			}
+		});
+	}
+
+	int getValue() {
+		return value;
+	}
+}
\ No newline at end of file
diff --git a/Sda2/P/account/src/main/resources/log4j.properties b/Sda2/P/account/src/main/resources/log4j.properties
new file mode 100644
index 000000000..a81103b6e
--- /dev/null
+++ b/Sda2/P/account/src/main/resources/log4j.properties
@@ -0,0 +1,15 @@
+#Set root logger level to DEBUG and its only appender to A1.
+log4j.rootLogger=DEBUG, A1
+
+# A1 is set to be a ConsoleAppender.
+log4j.appender.A1=org.apache.log4j.ConsoleAppender
+
+# A1 uses PatternLayout comforting Eclipse's debugger.
+log4j.appender.A1.layout=org.apache.log4j.PatternLayout
+log4j.appender.A1.layout.ConversionPattern=%p: %m at %c.%M(%C{1}.java:%L)%n
+
+# Activate per-class or package logging rules if required. For example
+# reducing logging to INFO level for class de.hdm-stuttgart.mi.sda2.account.App
+# can be achieved by un-commenting the following line:
+
+#log4j.logger.de.hdm-stuttgart.mi.sda2.account.App.parse.Group=INFO
diff --git a/Sda2/P/account/src/test/java/de/hdm_stuttgart/mi/sda2/account/AppTest.java b/Sda2/P/account/src/test/java/de/hdm_stuttgart/mi/sda2/account/AppTest.java
new file mode 100644
index 000000000..8ceb561cf
--- /dev/null
+++ b/Sda2/P/account/src/test/java/de/hdm_stuttgart/mi/sda2/account/AppTest.java
@@ -0,0 +1,14 @@
+package de.hdm_stuttgart.mi.sda2.account;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+/**
+ * Unit test for simple App.
+ */
+public class AppTest {
+    @Test
+    public void testApp() {
+        Assert.assertTrue( true );
+    }
+}
-- 
GitLab