From b785e675926d94535f804f9b762bb08842bf1507 Mon Sep 17 00:00:00 2001 From: Simon Barner <barner@fortiss.org> Date: Thu, 29 Nov 2018 09:51:28 +0100 Subject: [PATCH] Update and use kernel.databinding's input validators * No longer depend on org.conqat.ide.commons.ui.databinding.validate.* * Improve NumberFormat validation * Do not accept if input contains a valid prefix * Provide more precise error message * Do not accept (1000er) grouping separator (in order to avoid confusion with decimal separator * PropertySectionBase * Use updated validators * For BigDecimals, avoid introducing grouping separators during value -> String conversion Issue-Ref: 3582 Issue-Url: https://af3-developer.fortiss.org/issues/3582 Signed-off-by: Simon Barner <barner@fortiss.org> --- .../tooling/kernel/ui/databinding/.ratings | 10 ++-- .../kernel/ui/databinding/FloatValidator.java | 31 +++++------ .../kernel/ui/databinding/IntValidator.java | 31 +++++------ .../databinding/NumberPositiveValidator.java | 44 ++++++++++++++++ .../NumberPositiveZeroValidator.java | 26 +++++----- .../ui/databinding/NumberValidator.java | 48 +++++++++++------ .../databinding/NumberValueValidatorBase.java | 52 +++++++++++++++++++ .../tooling/kernel/ui/extension/base/.ratings | 2 +- .../extension/base/PropertySectionBase.java | 47 ++++++++++------- 9 files changed, 199 insertions(+), 92 deletions(-) create mode 100644 org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveValidator.java create mode 100644 org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValueValidatorBase.java diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/.ratings index 6cd0fe6ea..86f933737 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/.ratings @@ -2,7 +2,9 @@ AbstractDecoratedStyledTextCellDatabindingEditingSupport.java a0b06a9bd98ce28da3 AbstractDecoratedTextCellDatabindingEditingSupport.java d82943c0d4000b164beb45b00c64665cdcab2352 GREEN AbstractStyledTextCellDatabindingEditingSupport.java 6ddea6d5cb18847f202043d9bb2bd8a55ae27a12 GREEN AbstractTextCellDatabindingEditingSupport.java 8728e78f399a63c11f020fa447c002f42d735771 YELLOW -FloatValidator.java 7a32cb83604838ae17d3da751ce003731a055b05 GREEN -IntValidator.java de2d93012a863ab26118453413ca09e7764124a8 GREEN -NumberPositiveZeroValidator.java 4f555462dc532a2e88f2842701a48e3991f7ef9d GREEN -NumberValidator.java 28871dc5823ad14466273995599d3cd74fe69512 YELLOW +FloatValidator.java 3173a438f0dc773331be9c7d57478984e1fd52b6 YELLOW +IntValidator.java 934eee306191839be6d319432a1a238ff38c3f66 YELLOW +NumberPositiveValidator.java c45d4433c260e1e7bd4117954221dacb6d2df225 YELLOW +NumberPositiveZeroValidator.java 8ba0dfdcc8b8ad2154f2fb3e6217ff585e59d6e5 YELLOW +NumberValidator.java 04c8ca1abee5fb1f7d7b8d7c61076dde8df76930 YELLOW +NumberValueValidatorBase.java a8cda58d8bba6fdc05c6ac3249dbf1b53fcb0c2b YELLOW diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/FloatValidator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/FloatValidator.java index 7a32cb836..3173a438f 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/FloatValidator.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/FloatValidator.java @@ -15,33 +15,26 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.databinding; -import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; -import static org.eclipse.core.runtime.Status.OK_STATUS; - -import org.eclipse.core.databinding.validation.IValidator; -import org.eclipse.core.runtime.IStatus; +import java.text.NumberFormat; /** - * Validator for String to Float conversion. + * Validator to check if a number is an floating point number. * - * @author hoelzl + * @author hoelzl, barner */ -public class FloatValidator implements IValidator { +public class FloatValidator extends NumberValidator { - /** Singleton instance. */ + /** {@link FloatValidator} singleton instance. */ public static final FloatValidator FLOAT_VALIDATOR = new FloatValidator(); + /** Constructor. */ + private FloatValidator() { + super(NumberFormat.getNumberInstance()); + } + /** {@inheritDoc} */ @Override - public IStatus validate(Object value) { - if(value instanceof String) { - try { - Float.valueOf((String)value); - return OK_STATUS; - } catch(NumberFormatException nfex) { - // ignore - } - } - return cancel("Illegal float value!"); + protected String getFormatName() { + return "Floating point"; } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/IntValidator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/IntValidator.java index de2d93012..934eee306 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/IntValidator.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/IntValidator.java @@ -15,33 +15,26 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.databinding; -import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; -import static org.eclipse.core.runtime.Status.OK_STATUS; - -import org.eclipse.core.databinding.validation.IValidator; -import org.eclipse.core.runtime.IStatus; +import java.text.NumberFormat; /** - * Validator for String to Int conversion. + * Validator to check if a number is an integer. * - * @author hoelzl + * @author hoelzl, barner */ -public class IntValidator implements IValidator { +public class IntValidator extends NumberValidator { - /** Singleton instance. */ + /** {@link IntValidator} singleton instance. */ public static final IntValidator INT_VALIDATOR = new IntValidator(); + /** Constructor. */ + private IntValidator() { + super(NumberFormat.getIntegerInstance()); + } + /** {@inheritDoc} */ @Override - public IStatus validate(Object value) { - if(value instanceof String) { - try { - Integer.valueOf((String)value); - return OK_STATUS; - } catch(NumberFormatException nfex) { - // ignore - } - } - return cancel("Illegal int value!"); + protected String getFormatName() { + return "Integer"; } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveValidator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveValidator.java new file mode 100644 index 000000000..c45d4433c --- /dev/null +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveValidator.java @@ -0,0 +1,44 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.kernel.ui.databinding; + +import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; +import static org.eclipse.core.databinding.validation.ValidationStatus.ok; + +import org.eclipse.core.databinding.validation.IValidator; +import org.eclipse.core.runtime.IStatus; + +/** + * {@link IValidator} for checking that a numeric value is positive. + * + * @author barner + */ +public class NumberPositiveValidator extends NumberValueValidatorBase { + + /** Singleton instance. */ + public static final NumberPositiveValidator NUMBER_POSITIVE_VALIDATOR = + new NumberPositiveValidator(); + + /** {@inheritDoc} */ + @Override + protected IStatus doValidate(Number number) { + if(number.doubleValue() <= 0) { + return cancel("Value must be > 0"); + } + + return ok(); + } +} diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveZeroValidator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveZeroValidator.java index 4f555462d..8ba0dfdcc 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveZeroValidator.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberPositiveZeroValidator.java @@ -1,5 +1,5 @@ /*-------------------------------------------------------------------------+ -| Copyright 2011 fortiss GmbH | +| Copyright 2018 fortiss GmbH | | | | Licensed under the Apache License, Version 2.0 (the "License"); | | you may not use this file except in compliance with the License. | @@ -15,30 +15,30 @@ +--------------------------------------------------------------------------*/ package org.fortiss.tooling.kernel.ui.databinding; +import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; +import static org.eclipse.core.databinding.validation.ValidationStatus.ok; + import org.eclipse.core.databinding.validation.IValidator; -import org.eclipse.core.databinding.validation.ValidationStatus; import org.eclipse.core.runtime.IStatus; /** * {@link IValidator} for checking that a numeric value is positive or zero. * - * @author hattendorf + * @author barner */ -public class NumberPositiveZeroValidator implements IValidator { +public class NumberPositiveZeroValidator extends NumberValueValidatorBase { /** Singleton instance. */ - public static final NumberPositiveZeroValidator INSTANCE = new NumberPositiveZeroValidator(); + public static final NumberPositiveZeroValidator NUMBER_POSITIVE_ZERO_VALIDATOR = + new NumberPositiveZeroValidator(); /** {@inheritDoc} */ @Override - public IStatus validate(Object value) { - if(!(value instanceof Number)) { - return ValidationStatus - .cancel("Internal: Expected a Number, but had a " + value.getClass()); - } - if(((Number)value).doubleValue() < 0) { - return ValidationStatus.cancel("Value must be positive or zero!"); + protected IStatus doValidate(Number number) { + if(number.doubleValue() < 0) { + return cancel("Value must be >= 0"); } - return ValidationStatus.ok(); + + return ok(); } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValidator.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValidator.java index 28871dc58..04c8ca1ab 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValidator.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValidator.java @@ -18,6 +18,7 @@ package org.fortiss.tooling.kernel.ui.databinding; import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; import static org.eclipse.core.databinding.validation.ValidationStatus.ok; +import java.text.DecimalFormat; import java.text.NumberFormat; import java.text.ParsePosition; @@ -25,38 +26,53 @@ import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.core.runtime.IStatus; /** Validates if a given input is a valid {@link Number}. */ -public class NumberValidator implements IValidator { - - /** Singleton instance. */ - public static final NumberValidator NUMBER_VALIDATOR = new NumberValidator(); +public abstract class NumberValidator implements IValidator { /** The number format used in the current locale. */ private final NumberFormat format; + /** Character used to separate blocks of large numbers. */ + private Character groupingSeparator; + /** Constructor. */ - protected NumberValidator() { - format = NumberFormat.getNumberInstance(); - format.setGroupingUsed(false); + protected NumberValidator(NumberFormat format) { + this.format = format; + if(format instanceof DecimalFormat) { + DecimalFormat df = (DecimalFormat)format; + groupingSeparator = df.getDecimalFormatSymbols().getGroupingSeparator(); + } } + /** Returns the format name. */ + protected abstract String getFormatName(); + /** {@inheritDoc} */ @Override public IStatus validate(Object value) { - String input = value != null ? value.toString().trim() : ""; - if(input.isEmpty()) { + String input = value != null ? value.toString() : ""; + String trimmedInput = input.trim(); + if(trimmedInput.isEmpty()) { return ok(); } + if(groupingSeparator != null && trimmedInput.indexOf(groupingSeparator) != -1) { + return cancel("Grouping separator \'" + groupingSeparator + "\' not allowed"); + } ParsePosition p = new ParsePosition(0); - format.parse(input, p); + format.parse(trimmedInput, 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(); + + if(errorIndex == -1) { + // 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(p.getIndex() < trimmedInput.length()) { + errorIndex = p.getIndex(); + } else { + return ok(); + } } - return errorIndex == -1 ? ok() - : cancel("Double number format validation failed at position " + errorIndex + "."); + int n = input.indexOf(trimmedInput) + errorIndex; + return cancel(getFormatName() + " format validation failed at position " + n); } } diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValueValidatorBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValueValidatorBase.java new file mode 100644 index 000000000..a8cda58d8 --- /dev/null +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/databinding/NumberValueValidatorBase.java @@ -0,0 +1,52 @@ +/*-------------------------------------------------------------------------+ +| Copyright 2018 fortiss GmbH | +| | +| Licensed under the Apache License, Version 2.0 (the "License"); | +| you may not use this file except in compliance with the License. | +| You may obtain a copy of the License at | +| | +| http://www.apache.org/licenses/LICENSE-2.0 | +| | +| Unless required by applicable law or agreed to in writing, software | +| distributed under the License is distributed on an "AS IS" BASIS, | +| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | +| See the License for the specific language governing permissions and | +| limitations under the License. | ++--------------------------------------------------------------------------*/ +package org.fortiss.tooling.kernel.ui.databinding; + +import static org.eclipse.core.databinding.validation.ValidationStatus.cancel; +import static org.eclipse.core.databinding.validation.ValidationStatus.ok; +import static org.fortiss.tooling.kernel.utils.LoggingUtils.error; + +import org.eclipse.core.databinding.validation.IValidator; +import org.eclipse.core.runtime.IStatus; +import org.fortiss.tooling.kernel.ToolingKernelActivator; + +/** + * Base class for {@link IValidator}s to check the value of {@link Number}s. + * + * @author barner + */ +public abstract class NumberValueValidatorBase implements IValidator { + + /** {@inheritDoc} */ + @Override + public final IStatus validate(Object value) { + if(value == null) { + return ok(); + } + + if(!(value instanceof Number)) { + String typeName = value.getClass().getSimpleName(); + error(ToolingKernelActivator.getDefault(), "Value \"" + value.toString() + + "\" is not a number but of type " + typeName + "."); + return cancel("Value is not a number"); + } + + return doValidate((Number)value); + } + + /** Checks the value of the provided {@link Number}. */ + protected abstract IStatus doValidate(Number number); +} diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings index 63e04390a..13fa428e5 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/.ratings @@ -8,7 +8,7 @@ ModelEditorBindingBase.java 4c5ac569c0b6e7678fc8191096b26dfd09fdcb98 GREEN ModelElementHandlerBase.java 384727748f125c9d43f19d9c0eba4ba1be5a7a26 GREEN MultiEObjectActionBase.java 9e237d8ea640c4194e4877af4a9cfce88698e543 GREEN NamedCommentedModelElementHandlerBase.java 681b98b50b362f01abb7a36f108f4f11b9e51829 GREEN -PropertySectionBase.java 2744f0668de50938d3015a0efbf2b1be229e30ae YELLOW +PropertySectionBase.java f9b9f559d678b355ca0854a26972967639a95564 YELLOW TutorialStepUIAtomicBase.java cea2a158158b476de2108d2309afcf47f217b6d9 GREEN TutorialStepUIAtomicWithWhitelistBase.java a9788ae514f62d27169c737ef59fb583234b5d43 GREEN TutorialStepUICompositeBase.java 8225210eacb5b88de47d78280c5819f572f00ffa GREEN diff --git a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/PropertySectionBase.java b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/PropertySectionBase.java index 2744f0668..f9b9f559d 100644 --- a/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/PropertySectionBase.java +++ b/org.fortiss.tooling.kernel.ui/src/org/fortiss/tooling/kernel/ui/extension/base/PropertySectionBase.java @@ -21,15 +21,15 @@ 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.toDouble; import static org.eclipse.core.databinding.conversion.StringToNumberConverter.toInteger; -import static org.fortiss.tooling.kernel.ui.databinding.NumberValidator.NUMBER_VALIDATOR; +import static org.fortiss.tooling.kernel.ui.databinding.FloatValidator.FLOAT_VALIDATOR; +import static org.fortiss.tooling.kernel.ui.databinding.IntValidator.INT_VALIDATOR; +import static org.fortiss.tooling.kernel.ui.databinding.NumberPositiveValidator.NUMBER_POSITIVE_VALIDATOR; 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.WidgetsFactory.createTextWithUndo; import java.math.BigDecimal; -import org.conqat.ide.commons.ui.databinding.validate.NumberPositiveValidator; -import org.conqat.ide.commons.ui.databinding.validate.TextToIntegerValidator; import org.eclipse.core.databinding.observable.value.IObservableValue; import org.eclipse.core.databinding.validation.IValidator; import org.eclipse.emf.databinding.EMFDataBindingContext; @@ -304,7 +304,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { * fraction digits to be used in the String representation. */ protected void bindPositiveBigDecimalValue(Control text, IObservableValue<?> observedValue) { - bindBigDecimalValue(text, observedValue, NumberPositiveValidator.INSTANCE); + bindBigDecimalValue(text, observedValue, NUMBER_POSITIVE_VALIDATOR); } /** @@ -313,8 +313,19 @@ public abstract class PropertySectionBase extends AbstractPropertySection { */ protected void bindPositiveBigDecimalValue(Control text, IObservableValue<?> observedValue, int maxFractionDigits) { - bindBigDecimalValue(text, observedValue, NumberPositiveValidator.INSTANCE, - maxFractionDigits); + bindBigDecimalValue(text, observedValue, NUMBER_POSITIVE_VALIDATOR, maxFractionDigits); + } + + /** + * Binds a {@link BigDecimal} value with the default number of a maximum of three fraction + * digits to be used in the String representation. + */ + private void bindBigDecimalValue(Control text, IObservableValue<?> observedValue, + IValidator numberValidator, NumberFormat nf) { + + nf.setGroupingUsed(false); + performComplexTextBinding(dbc, text, observedValue, fromBigDecimal(nf), toBigDecimal(nf), + FLOAT_VALIDATOR, numberValidator); } /** @@ -323,10 +334,9 @@ public abstract class PropertySectionBase extends AbstractPropertySection { */ protected void bindBigDecimalValue(Control text, IObservableValue<?> observedValue, IValidator numberValidator) { - // DoubleValidator checks format of fractional numbers and is hence also suitable for - // BigDecimals - performComplexTextBinding(dbc, text, observedValue, fromBigDecimal(), toBigDecimal(), - NUMBER_VALIDATOR, numberValidator); + + NumberFormat nf = NumberFormat.getNumberInstance(); + bindBigDecimalValue(text, observedValue, numberValidator, nf); } /** @@ -338,10 +348,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(maxFractionDigits); - // DoubleValidator checks format of fractional numbers and is hence also suitable for - // BigDecimals - performComplexTextBinding(dbc, text, observedValue, fromBigDecimal(nf), toBigDecimal(nf), - NUMBER_VALIDATOR, numberValidator); + bindBigDecimalValue(text, observedValue, numberValidator, nf); } /** @@ -349,7 +356,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { * to be used in the String representation. */ protected void bindPositiveDoubleValue(Control text, IObservableValue<?> observedValue) { - bindDoubleValue(text, observedValue, NumberPositiveValidator.INSTANCE); + bindDoubleValue(text, observedValue, NUMBER_POSITIVE_VALIDATOR); } /** @@ -358,7 +365,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { */ protected void bindPositiveDoubleValue(Control text, IObservableValue<?> observedValue, int maxFractionDigits) { - bindDoubleValue(text, observedValue, NumberPositiveValidator.INSTANCE, maxFractionDigits); + bindDoubleValue(text, observedValue, NUMBER_POSITIVE_VALIDATOR, maxFractionDigits); } /** @@ -368,7 +375,7 @@ public abstract class PropertySectionBase extends AbstractPropertySection { protected void bindDoubleValue(Control text, IObservableValue<?> observedValue, IValidator numberValidator) { performComplexTextBinding(dbc, text, observedValue, fromDouble(false), toDouble(false), - NUMBER_VALIDATOR, numberValidator); + FLOAT_VALIDATOR, numberValidator); } /** @@ -381,18 +388,18 @@ public abstract class PropertySectionBase extends AbstractPropertySection { NumberFormat nf = NumberFormat.getNumberInstance(); nf.setMaximumFractionDigits(maxFractionDigits); performComplexTextBinding(dbc, text, observedValue, fromDouble(nf, false), - toDouble(nf, false), NUMBER_VALIDATOR, numberValidator); + toDouble(nf, false), FLOAT_VALIDATOR, numberValidator); } /** Binds a positive integer value. */ protected void bindPositiveIntegerValue(Control text, IObservableValue<?> observedValue) { - bindIntegerValue(text, observedValue, NumberPositiveValidator.INSTANCE); + bindIntegerValue(text, observedValue, NUMBER_POSITIVE_VALIDATOR); } /** Binds a integer value. */ protected void bindIntegerValue(Control text, IObservableValue<?> observedValue, IValidator numberValidator) { performComplexTextBinding(dbc, text, observedValue, fromInteger(false), toInteger(false), - TextToIntegerValidator.INSTANCE, numberValidator); + INT_VALIDATOR, numberValidator); } } -- GitLab