Skip to content
Snippets Groups Projects
Commit 7c6a05a4 authored by Simon Barner's avatar Simon Barner
Browse files

Double input format validation: check if the entire string was parsed

* org.conqat.ide.commons.ui.databinding.validate.TextToDoubleValidator
  also accepted inputs where only a prefix was valid (followed by some
  garbage)
* Local version of TextToDoubleValidator checks if the entire input was
  parsed.

Issue-Ref: 3582
Issue-Url: https://af3-developer.fortiss.org/issues/3582



Signed-off-by: default avatarSimon Barner <barner@fortiss.org>
parent d7196a4c
No related branches found
No related tags found
1 merge request!38Double input format validation: check if the entire string was parsed
...@@ -8,7 +8,7 @@ ModelEditorBindingBase.java 4c5ac569c0b6e7678fc8191096b26dfd09fdcb98 GREEN ...@@ -8,7 +8,7 @@ ModelEditorBindingBase.java 4c5ac569c0b6e7678fc8191096b26dfd09fdcb98 GREEN
ModelElementHandlerBase.java 384727748f125c9d43f19d9c0eba4ba1be5a7a26 GREEN ModelElementHandlerBase.java 384727748f125c9d43f19d9c0eba4ba1be5a7a26 GREEN
MultiEObjectActionBase.java 9e237d8ea640c4194e4877af4a9cfce88698e543 GREEN MultiEObjectActionBase.java 9e237d8ea640c4194e4877af4a9cfce88698e543 GREEN
NamedCommentedModelElementHandlerBase.java 681b98b50b362f01abb7a36f108f4f11b9e51829 GREEN NamedCommentedModelElementHandlerBase.java 681b98b50b362f01abb7a36f108f4f11b9e51829 GREEN
PropertySectionBase.java 3601ee8bd77be45ff770a5ee1c7536f100bee6b2 GREEN PropertySectionBase.java c545ad187b8fcff8fc9e592a923b7c0b1522133b YELLOW
TutorialStepUIAtomicBase.java cea2a158158b476de2108d2309afcf47f217b6d9 GREEN TutorialStepUIAtomicBase.java cea2a158158b476de2108d2309afcf47f217b6d9 GREEN
TutorialStepUIAtomicWithWhitelistBase.java a9788ae514f62d27169c737ef59fb583234b5d43 GREEN TutorialStepUIAtomicWithWhitelistBase.java a9788ae514f62d27169c737ef59fb583234b5d43 GREEN
TutorialStepUICompositeBase.java 8225210eacb5b88de47d78280c5819f572f00ffa GREEN TutorialStepUICompositeBase.java 8225210eacb5b88de47d78280c5819f572f00ffa GREEN
......
...@@ -21,17 +21,20 @@ import static org.eclipse.core.databinding.conversion.NumberToStringConverter.fr ...@@ -21,17 +21,20 @@ import static org.eclipse.core.databinding.conversion.NumberToStringConverter.fr
import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toBigDecimal; import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toBigDecimal;
import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toDouble; import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toDouble;
import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toInteger; import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toInteger;
import static org.eclipse.core.databinding.validation.ValidationStatus.cancel;
import static org.eclipse.core.databinding.validation.ValidationStatus.ok;
import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.DECORATION_KEY; import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.DECORATION_KEY;
import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.performComplexTextBinding; import static org.fortiss.tooling.kernel.ui.util.DataBindingUtils.performComplexTextBinding;
import static org.fortiss.tooling.kernel.ui.util.WidgetsFactory.createTextWithUndo; import static org.fortiss.tooling.kernel.ui.util.WidgetsFactory.createTextWithUndo;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.text.ParsePosition;
import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator; import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator;
import org.conqat.ide.commons.ui.databinding.validate.TextToDoubleValidator;
import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator; import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator;
import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.observable.value.IObservableValue;
import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.databinding.validation.IValidator;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.emf.databinding.EMFDataBindingContext; import org.eclipse.emf.databinding.EMFDataBindingContext;
import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.EObject;
import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPart;
...@@ -66,6 +69,35 @@ import com.ibm.icu.text.NumberFormat; ...@@ -66,6 +69,35 @@ import com.ibm.icu.text.NumberFormat;
*/ */
public abstract class PropertySectionBase extends AbstractPropertySection { public abstract class PropertySectionBase extends AbstractPropertySection {
/** Validates if a given input is a valid {@link Number}. */
private static class TextToDoubleValidator implements IValidator {
/** Singleton instance. */
public static final TextToDoubleValidator INSTANCE = new TextToDoubleValidator();
/** The number format used in the current locale. */
private final NumberFormat format = NumberFormat.getNumberInstance();
/** {@inheritDoc} */
@Override
public IStatus validate(Object value) {
assert (value != null);
ParsePosition p = new ParsePosition(0);
String input = value.toString();
format.parse(input, p);
int errorIndex = p.getErrorIndex();
// In case the input as a valid prefix, the error index will not indicate a problem.
// Therefore, check if the entire input was parsed.
if(errorIndex == -1 && p.getIndex() < input.length()) {
errorIndex = p.getIndex();
}
return errorIndex == -1 ? ok() : cancel(
"Double number format validation failed at position " + errorIndex + ".");
}
}
/** Label width. */ /** Label width. */
public static final int PROPERTIES_LABEL_WIDTH = 150; public static final int PROPERTIES_LABEL_WIDTH = 150;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment