From e30f145f533c87b5c784e44ee101cc7fbcd2538f Mon Sep 17 00:00:00 2001 From: Reino Ruusu Date: Mon, 9 Mar 2020 13:51:55 +0200 Subject: [PATCH] Add checks for invalid numerical values in ComponentSelectionDialog gitlab #105 Also add a validation message to the user Change-Id: I93a6843faf2c76fbed1ef3c32dc06c24a7a28358 --- .../dialog/ComponentSelectionDialog.java | 46 ++++++++++++++++--- 1 file changed, 40 insertions(+), 6 deletions(-) diff --git a/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java b/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java index c0851fd2..da764775 100644 --- a/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java +++ b/org.simantics.plant3d/src/org/simantics/plant3d/dialog/ComponentSelectionDialog.java @@ -94,6 +94,9 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange private Text diameterText; private Text thicknessText; private Text turnRadiusText; + + // Validation message label + private Label validationLabel; // Position selection private Button startButton; @@ -312,6 +315,9 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange label = new Label(composite, SWT.NONE); label.setText("Turn radius"); turnRadiusText = new Text(composite, SWT.SINGLE | SWT.BORDER); + + validationLabel = new Label(composite, SWT.NONE); + validationLabel.setText(""); lengthText.setEnabled(false); angleText.setEnabled(false); @@ -407,6 +413,8 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange horizFillData.applyTo(diameterText); horizFillData.applyTo(thicknessText); horizFillData.applyTo(turnRadiusText); + + GridDataFactory.fillDefaults().span(2, 1).align(SWT.END, SWT.END).grab(true, false).applyTo(validationLabel); if (!allowed.contains(PositionType.NEXT) && !allowed.contains(PositionType.PREVIOUS)) { turnViewer.getList().setEnabled(false); @@ -454,6 +462,18 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange filterAllowed.clear(); Set filterAllowed = new HashSet(); boolean ok = true; + String msg = null; + + if (name.isEmpty() || usedNames.contains(name)) { + ok = false; + if (msg == null) { + if (name.isEmpty()) + msg = "Please provide a valid name"; + else + msg = "Name \"" + name + "\" is already in use"; + } + } + if (selected == null) { ok = false; } else if (selected.isCode()) {// TODO : instead of disabling the button, we should filter the content. @@ -528,13 +548,15 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange angleText.setEnabled(false); rotationAngleText.setEnabled(selected.isRotated()); ok = false; - + if (msg == null) msg = "Cannot split a straight pipe with a straight pipe"; } else { lengthText.setEnabled(true); angleText.setEnabled(false); rotationAngleText.setEnabled(selected.isRotated()); - if (length == null) + if (length == null || length <= 0.0) { ok = false; + if (msg == null) msg = "Please provide a valid length"; + } } } else if (selected.getType() == Type.TURN) { filterAllowed.add(PositionType.NEXT); @@ -542,8 +564,10 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange lengthText.setEnabled(false); angleText.setEnabled(true); rotationAngleText.setEnabled(true); - if (angle == null) + if (angle == null) { ok = false; + if (msg == null) msg = "Please provide a rotation angle"; + } } else { // this should not happen, since end components should not have variable, or // modifiable flag. @@ -562,8 +586,18 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange turnRadiusText.setEnabled(true); diameterText.setEnabled(true); thicknessText.setEnabled(true); - if (diameter == null || turnRadius == null || thickness == null) + if (diameter == null || diameter <= 0.0) { + ok = false; + if (msg == null) msg = "Please provide a valid diameter"; + } + if (turnRadius == null || diameter != null && turnRadius < diameter / 2) { ok = false; + if (msg == null) msg = "Please provide a valid turn radius"; + } + if (thickness == null || thickness < 0.0 || diameter != null && thickness >= diameter / 2) { + ok = false; + if (msg == null) msg = "Please provide a valid wall thickness"; + } } else { turnRadiusText.setEnabled(false); diameterText.setEnabled(false); @@ -593,8 +627,8 @@ public class ComponentSelectionDialog extends Dialog implements ISelectionChange this.filterAllowed.add(t); } - if (name.isEmpty() || usedNames.contains(name)) - ok = false; + validationLabel.setText(msg != null ? msg : ""); + validationLabel.requestLayout(); getButton(OK).setEnabled(ok); } -- 2.45.2