summaryrefslogtreecommitdiffstats
path: root/src/de/fhswf
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/fhswf')
-rw-r--r--src/de/fhswf/fbin/java2fx/validation/StatusEvent.java24
-rw-r--r--src/de/fhswf/fbin/java2fx/validation/StatusListener.java6
-rw-r--r--src/de/fhswf/fbin/java2fx/validation/ValidationAdapter.java64
-rw-r--r--src/de/fhswf/fbin/java2fx/validation/Validator.java16
-rw-r--r--src/de/fhswf/in/inf/java2/aufgabe03/EmailTextField.java25
-rw-r--r--src/de/fhswf/in/inf/java2/aufgabe03/JavaFxMain.java47
-rw-r--r--src/de/fhswf/in/inf/java2/aufgabe03/RegExTextField.java89
-rw-r--r--src/de/fhswf/in/inf/java2/aufgabe03/RegExValidator.java45
8 files changed, 316 insertions, 0 deletions
diff --git a/src/de/fhswf/fbin/java2fx/validation/StatusEvent.java b/src/de/fhswf/fbin/java2fx/validation/StatusEvent.java
new file mode 100644
index 0000000..3a6ce24
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/validation/StatusEvent.java
@@ -0,0 +1,24 @@
+package de.fhswf.fbin.java2fx.validation;
+
+public class StatusEvent<T>
+{
+ private boolean status;
+ private T value;
+
+ public StatusEvent(T value, boolean status)
+ {
+ super();
+ this.status = status;
+ this.value = value;
+ }
+
+ public boolean isStatus()
+ {
+ return status;
+ }
+
+ public T getValue()
+ {
+ return value;
+ }
+}
diff --git a/src/de/fhswf/fbin/java2fx/validation/StatusListener.java b/src/de/fhswf/fbin/java2fx/validation/StatusListener.java
new file mode 100644
index 0000000..26b341d
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/validation/StatusListener.java
@@ -0,0 +1,6 @@
+package de.fhswf.fbin.java2fx.validation;
+
+public interface StatusListener<T>
+{
+ public void stateChanged(StatusEvent<T> e);
+}
diff --git a/src/de/fhswf/fbin/java2fx/validation/ValidationAdapter.java b/src/de/fhswf/fbin/java2fx/validation/ValidationAdapter.java
new file mode 100644
index 0000000..6b6afea
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/validation/ValidationAdapter.java
@@ -0,0 +1,64 @@
+package de.fhswf.fbin.java2fx.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javafx.beans.value.ObservableValue;
+
+public abstract class ValidationAdapter<T> implements Validator<T>
+{
+ private List<StatusListener<T>> listeners;
+
+ private boolean wasValid = true;
+
+ // Partial implementation of interface Validator
+ public boolean validate(T value)
+ {
+ boolean isValidNow = isValid(value);
+ if (isValidNow != wasValid)
+ { // state changed
+ fireChangedEvent(value, isValidNow);
+ wasValid = isValidNow;
+ }
+ return (isValidNow);
+ }
+
+ // Implementation of interface ChangeListener<T>
+ @Override
+ public void changed(ObservableValue<? extends T> observable, T oldValue,
+ T newValue)
+ {
+ validate(newValue);
+ }
+
+ // Support for StatusListeners
+ public void addStatusListener(StatusListener<T> l)
+ {
+ if (listeners == null)
+ {
+ listeners = new ArrayList<>();
+ }
+
+ listeners.add(l);
+ }
+
+ public void removeStatusListener(StatusListener<T> l)
+ {
+ if (listeners != null)
+ {
+ listeners.remove(l);
+ }
+ }
+
+ public void fireChangedEvent(T value, boolean status)
+ {
+ if (listeners != null)
+ {
+ StatusEvent<T> event = new StatusEvent<T>(value, status);
+ for (StatusListener<T> sl : listeners)
+ {
+ sl.stateChanged(event);
+ }
+ }
+ }
+}
diff --git a/src/de/fhswf/fbin/java2fx/validation/Validator.java b/src/de/fhswf/fbin/java2fx/validation/Validator.java
new file mode 100644
index 0000000..ee23298
--- /dev/null
+++ b/src/de/fhswf/fbin/java2fx/validation/Validator.java
@@ -0,0 +1,16 @@
+package de.fhswf.fbin.java2fx.validation;
+
+import javafx.beans.value.ChangeListener;
+
+public interface Validator<T> extends ChangeListener<T>
+{
+
+ public boolean isValid(T value);
+
+ public boolean validate(T value);
+
+ // support StatusListeners
+ public void addStatusListener(StatusListener<T> l);
+
+ public void removeStatusListener(StatusListener<T> l);
+}
diff --git a/src/de/fhswf/in/inf/java2/aufgabe03/EmailTextField.java b/src/de/fhswf/in/inf/java2/aufgabe03/EmailTextField.java
new file mode 100644
index 0000000..e68860c
--- /dev/null
+++ b/src/de/fhswf/in/inf/java2/aufgabe03/EmailTextField.java
@@ -0,0 +1,25 @@
+/**
+ * File for the EmailTextField class.
+ */
+
+package de.fhswf.in.inf.java2.aufgabe03;
+
+/**
+ * A text field that validates email addresses and gives optical feedback.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public class EmailTextField extends RegExTextField
+{
+
+ /**
+ * Creates a RegExTextField that only accepts email addresses.
+ *
+ */
+ public EmailTextField()
+ {
+ super("\\b[a-zA-Z0-9._%-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}\\b", "E-Mail");
+ }
+
+}
diff --git a/src/de/fhswf/in/inf/java2/aufgabe03/JavaFxMain.java b/src/de/fhswf/in/inf/java2/aufgabe03/JavaFxMain.java
new file mode 100644
index 0000000..b822b5f
--- /dev/null
+++ b/src/de/fhswf/in/inf/java2/aufgabe03/JavaFxMain.java
@@ -0,0 +1,47 @@
+/*
+ *
+ */
+
+package de.fhswf.in.inf.java2.aufgabe03;
+
+import javafx.application.Application;
+import javafx.scene.Scene;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+
+/**
+ * The loader for a RegExTextField that validates e-mail addresses.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public class JavaFxMain extends Application
+{
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see javafx.application.Application#start(javafx.stage.Stage)
+ */
+ @Override
+ public void start(Stage primaryStage)
+ {
+ RegExTextField regText = new RegExTextField("[a-z]");
+ EmailTextField emaText = new EmailTextField();
+ VBox vbox = new VBox(regText, emaText);
+ Scene scene = new Scene(vbox);
+ primaryStage.setScene(scene);
+ primaryStage.show();
+ }
+
+ /**
+ * Loads the main window of this application.
+ *
+ * @param args
+ * Command line arguments
+ */
+ public static void main(String[] args)
+ {
+ launch(args);
+ }
+}
diff --git a/src/de/fhswf/in/inf/java2/aufgabe03/RegExTextField.java b/src/de/fhswf/in/inf/java2/aufgabe03/RegExTextField.java
new file mode 100644
index 0000000..cc68ff2
--- /dev/null
+++ b/src/de/fhswf/in/inf/java2/aufgabe03/RegExTextField.java
@@ -0,0 +1,89 @@
+/**
+ * File containing the RegExTextField class.
+ */
+
+package de.fhswf.in.inf.java2.aufgabe03;
+
+import javafx.scene.control.ContentDisplay;
+import javafx.scene.control.Label;
+import javafx.scene.control.TextField;
+import javafx.scene.image.Image;
+import javafx.scene.image.ImageView;
+import javafx.scene.layout.HBox;
+
+/**
+ * A class that checks an input against a regex and gives optical feedback.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public class RegExTextField extends HBox
+{
+
+ private Label label;
+
+ private TextField textField;
+
+ private RegExValidator rv;
+
+ /**
+ * Creates an element that checks regexes.
+ *
+ * @param regEx
+ * The regex to check the text field against.
+ */
+ public RegExTextField(String regEx)
+ {
+ this(regEx, "regEx");
+ }
+
+ /**
+ * Creates an element that checks regexes.
+ *
+ * @param regEx
+ * The regex to check the text field against.
+ * @param labelText
+ * An optional label that is shown before the text field.
+ */
+ public RegExTextField(String regEx, String labelText)
+ {
+ if (regEx == null)
+ {
+ throw new IllegalArgumentException("RegEx can't be null.");
+ }
+ if (regEx.isEmpty())
+ {
+ throw new IllegalArgumentException("RegEx can't be empty.");
+ }
+ if (labelText == null)
+ {
+ throw new IllegalArgumentException("labelText can't be null.");
+ }
+ if (labelText.isEmpty())
+ {
+ throw new IllegalArgumentException("labelText can't be empty.");
+ }
+
+ label = new Label(labelText);
+ textField = new TextField();
+
+ label.setContentDisplay(ContentDisplay.RIGHT);
+
+ this.getChildren().addAll(label, textField);
+
+ rv = new RegExValidator(regEx);
+ rv.addStatusListener(e -> {
+ if (!e.isStatus())
+ {
+ label.setGraphic(new ImageView(new Image("img/error.png")));
+ }
+ else
+ {
+ label.setGraphic(null);
+ }
+ });
+
+ textField.textProperty().addListener(rv);
+ }
+
+}
diff --git a/src/de/fhswf/in/inf/java2/aufgabe03/RegExValidator.java b/src/de/fhswf/in/inf/java2/aufgabe03/RegExValidator.java
new file mode 100644
index 0000000..e17b5ca
--- /dev/null
+++ b/src/de/fhswf/in/inf/java2/aufgabe03/RegExValidator.java
@@ -0,0 +1,45 @@
+/**
+ * Java file containing the RegExValidator class.
+ */
+
+package de.fhswf.in.inf.java2.aufgabe03;
+
+import java.util.regex.Pattern;
+
+import de.fhswf.fbin.java2fx.validation.ValidationAdapter;
+
+/**
+ * A class that checks if a given string matches a predefined regex.
+ *
+ * @author $Author: $
+ * @version $Revision: $, $Date: $ UTC
+ */
+public class RegExValidator extends ValidationAdapter<String>
+{
+
+ private Pattern validRegEx;
+
+ /**
+ * A validator that checks a specific regex.
+ *
+ * @param validRegEx
+ * The regex to validate against
+ */
+ public RegExValidator(String validRegEx)
+ {
+ this.validRegEx = Pattern.compile(validRegEx);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * de.fhswf.fbin.java2fx.validation.Validator#isValid(java.lang.Object)
+ */
+ @Override
+ public boolean isValid(String value)
+ {
+ return validRegEx.matcher(value).matches();
+ }
+
+}