From 7f9ae871813946a3ffaf0774bb94ec6863cf1ccd Mon Sep 17 00:00:00 2001
From: Robert Goldmann <deadlocker@gmx.de>
Date: Sun, 17 Sep 2017 12:07:56 +0200
Subject: [PATCH] #96 - implemented max length warning for tag input field

---
 .../budgetmaster/logic/utils/Strings.java     |  1 +
 .../resources/languages/_de.properties        |  1 +
 .../resources/languages/_en.properties        |  1 +
 .../ui/controller/NewPaymentController.java   |  7 +++++-
 .../budgetmaster/ui/tagField/TagField.java    | 23 ++++++++++++++++---
 5 files changed, 29 insertions(+), 4 deletions(-)

diff --git a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
index bcfac99f5..ff0d0d00b 100644
--- a/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
+++ b/src/de/deadlocker8/budgetmaster/logic/utils/Strings.java
@@ -160,6 +160,7 @@ public class Strings
     public static final String WARNING_NAME_CHARACTER_LIMIT_REACHED_45 = "warning.name.character.limit.reached.45";
     public static final String WARNING_NAME_CHARACTER_LIMIT_REACHED_150 = "warning.name.character.limit.reached.150";
     public static final String WARNING_DESCRIPTION_CHARACTER_LIMIT_REACHED_150 = "warning.description.character.limit.reached.150";
+    public static final String WARNING_TAG_CHARACTER_LIMIT_REACHED_45 = "warning.tag.character.limit.reached.45";
     public static final String WARNING_PAYMENT_AMOUNT = "warning.payment.amount";
     public static final String WARNING_EMPTY_PAYMENT_DATE = "warning.empty.payment.date";
     public static final String WARNING_PAYMENT_REPEATING = "warning.payment.repeating";    
diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
index b2d1f24ad..47e6bcb32 100644
--- a/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
+++ b/src/de/deadlocker8/budgetmaster/resources/languages/_de.properties
@@ -157,6 +157,7 @@ warning.empty.payment.name=Das Feld f
 warning.name.character.limit.reached.45=Der Name darf maximal 45 Zeichen lang sein.
 warning.name.character.limit.reached.150=Der Name darf maximal 150 Zeichen lang sein.
 warning.description.character.limit.reached.150=Die Notiz darf maximal 150 Zeichen lang sein.
+warning.tag.character.limit.reached.45=Der Name eines Tags darf maximal 45 Zeichen lang sein.
 warning.payment.amount=Gib eine g�ltige Zahl f�r den Betrag ein.
 warning.empty.payment.date=Bitte w�hle ein Datum aus.
 warning.payment.repeating=Wenn Wiederholung aktiviert ist d�rfen nicht beide Eingabefelder 0 sein.\n(Zur Deaktivierung der Wiederholung einfach die Checkbox abw�hlen)
diff --git a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
index 1a3ae5228..c8cb26959 100644
--- a/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
+++ b/src/de/deadlocker8/budgetmaster/resources/languages/_en.properties
@@ -157,6 +157,7 @@ warning.empty.payment.name=The field for the name can not be empty.
 warning.name.character.limit.reached.45=The name must not exceed 45 characters in length.
 warning.name.character.limit.reached.150=The name must not exceed 150 characters in length.
 warning.description.character.limit.reached.150=The description must not exceed 150 characters in length.
+warning.tag.character.limit.reached.45=A tag name must not exceed 45 characters in length.
 warning.payment.amount=Please enter a valid number in the amount field.
 warning.empty.payment.date=Please select a date.
 warning.payment.repeating=If repeating is activated, both input fields may not be 0.\n(To deactivate the repeat, simply deselect the checkbox).
diff --git a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
index cea51ffa0..ab8d183db 100644
--- a/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
+++ b/src/de/deadlocker8/budgetmaster/ui/controller/NewPaymentController.java
@@ -121,7 +121,7 @@ public class NewPaymentController extends BaseController implements Styleable
 		
 		applyStyle();		
 		
-		tagField = new TagField(new ArrayList<Tag>(), new ArrayList<Tag>());
+		tagField = new TagField(new ArrayList<Tag>(), new ArrayList<Tag>(), this);
 		hboxTags.getChildren().add(tagField);
 		tagField.maxWidthProperty().bind(hboxTags.widthProperty());
 		HBox.setHgrow(tagField, Priority.ALWAYS);
@@ -169,6 +169,11 @@ public class NewPaymentController extends BaseController implements Styleable
 		datePicker.setEditable(false);
 	}
 	
+	public Controller getController()
+	{
+		return controller;
+	}
+	
 	private void initComboBoxCategory()
 	{
 		buttonCategoryCell = new ButtonCategoryCell(Color.WHITE);
diff --git a/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java b/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java
index 439460fa7..fbd61105c 100644
--- a/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java
+++ b/src/de/deadlocker8/budgetmaster/ui/tagField/TagField.java
@@ -10,9 +10,11 @@ import de.deadlocker8.budgetmaster.logic.tag.Tag;
 import de.deadlocker8.budgetmaster.logic.utils.Colors;
 import de.deadlocker8.budgetmaster.logic.utils.Helpers;
 import de.deadlocker8.budgetmaster.logic.utils.Strings;
+import de.deadlocker8.budgetmaster.ui.controller.NewPaymentController;
 import fontAwesome.FontIconType;
 import javafx.geometry.Insets;
 import javafx.geometry.Pos;
+import javafx.scene.control.Alert.AlertType;
 import javafx.scene.control.Button;
 import javafx.scene.control.Label;
 import javafx.scene.control.TextField;
@@ -21,6 +23,7 @@ import javafx.scene.layout.FlowPane;
 import javafx.scene.layout.HBox;
 import javafx.scene.layout.VBox;
 import javafx.util.Callback;
+import tools.AlertGenerator;
 import tools.ConvertTo;
 import tools.Localization;
 
@@ -30,11 +33,13 @@ public class TagField extends VBox
 	private ArrayList<Tag> allTags;
 	private FlowPane flowPane;
 	private TextField textField;
+	private NewPaymentController parentController; 
 	
-	public TagField(ArrayList<Tag> tags, ArrayList<Tag> allAvailableTags)
+	public TagField(ArrayList<Tag> tags, ArrayList<Tag> allAvailableTags, NewPaymentController parentController)
 	{
 		this.tags = tags;
 		this.allTags = allAvailableTags;
+		this.parentController = parentController;
 		
 		this.flowPane = initFlowPane();	
 		this.getChildren().add(flowPane);
@@ -128,8 +133,7 @@ public class TagField extends VBox
 	}
 
 	public void addTag(String tagName)
-	{
-		//TODO max length = 45 chars
+	{		
 		if(tagName.equals(""))
 		{
 			return;
@@ -143,6 +147,19 @@ public class TagField extends VBox
 			}
 		}
 		
+		if(tagName.length() > 45) 
+		{
+			AlertGenerator.showAlert(AlertType.WARNING, 
+									Localization.getString(Strings.TITLE_WARNING), 
+									"", 
+									Localization.getString(Strings.WARNING_TAG_CHARACTER_LIMIT_REACHED_45), 
+									parentController.getController().getIcon(), 
+									parentController.getStage(), 
+									null, 
+									false);
+			return;
+		}
+		
 		tags.add(new Tag(-1, tagName));
 		refresh(true);
 	}
-- 
GitLab