Alexander Wels has uploaded a new change for review. Change subject: userportal, webadmin: Number field reporting wrong error ......................................................................
userportal, webadmin: Number field reporting wrong error - All EntityModelTextBoxEditors that are Integer/Long/Double were reporting the wrong error message when entering a non number in the field. Because of a parsing error during conversion it would return a null instead of the correct type and the non null model validation would report cannot be empty instead of not a number. - This patch fixes that so that the editor immediately reports the correct error message without sending the value to the model for validation. Change-Id: I3702cb370528a0baf6a176fa89cd736596a10ff2 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1168315 Signed-off-by: Alexander Wels <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/UiCommonEditorVisitor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractModelBoundPopupPresenterWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidgetWithLabel.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EditorStateUpdate.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/DoubleEntityModelLabelEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBoxEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelLabelEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxOnlyEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/LongEntityModelTextBoxEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelLabelEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxEditor.java A frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxOnlyEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/ShortEntityModelTextBoxOnlyEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/parser/generic/ToIntEntityModelParser.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 17 files changed, 241 insertions(+), 29 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/37244/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/UiCommonEditorVisitor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/UiCommonEditorVisitor.java index 8316d00..4144e42 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/UiCommonEditorVisitor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/editor/UiCommonEditorVisitor.java @@ -7,6 +7,7 @@ import org.ovirt.engine.ui.common.widget.HasEnabledWithHints; import org.ovirt.engine.ui.common.widget.HasValidation; import org.ovirt.engine.ui.common.widget.editor.TakesConstrainedValueEditor; +import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBox; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.Model; @@ -64,7 +65,13 @@ public void onValueChange(ValueChangeEvent<T> event) { // Set value in model if (ctx.canSetInModel()) { - ctx.setInModel(event.getValue()); + boolean editorValid = true; + if (event.getSource() instanceof EntityModelTextBox) { + editorValid = ((EntityModelTextBox<?>)event.getSource()).isStateValid(); + } + if (editorValid) { + ctx.setInModel(event.getValue()); + } } } }); @@ -86,7 +93,13 @@ if (KeyCodes.KEY_ENTER == event.getNativeEvent().getKeyCode()) { // Set value in model if (ctx.canSetInModel()) { - ctx.setInModel(editor.getValue()); + boolean editorValid = true; + if (editor instanceof EntityModelTextBox) { + editorValid = ((EntityModelTextBox<?>)editor).isStateValid(); + } + if (editorValid) { + ctx.setInModel(editor.getValue()); + } } } } @@ -214,7 +227,12 @@ if (model.getIsValid()) { editor.markAsValid(); } else { - editor.markAsInvalid(model.getInvalidityReasons()); + //The validator will set the entities to be valid before running checks + //So there is no possibility to go from one error to another without this + //updating the error message. + if (editor.isValid()) { + editor.markAsInvalid(model.getInvalidityReasons()); + } } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractModelBoundPopupPresenterWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractModelBoundPopupPresenterWidget.java index 3c745c6..16d9df3 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractModelBoundPopupPresenterWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/presenter/AbstractModelBoundPopupPresenterWidget.java @@ -301,7 +301,7 @@ } } - void addFooterButtons(T model) { + void addFooterButtons(final T model) { for (int i = model.getCommands().size() - 1; i >= 0; i--) { UICommand command = model.getCommands().get(i); final HasUiCommandClickHandlers button = getView().addFooterButton( @@ -312,14 +312,18 @@ registerHandler(button.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { - getView().flush(); - beforeCommandExecuted(button.getCommand()); - button.getCommand().execute(); + handleCommandExecution(button.getCommand(), model); } })); } } + private void handleCommandExecution(UICommand command, T model) { + getView().flush(); + beforeCommandExecuted(command); + command.execute(); + } + /** * Shows the popup progress indicator. */ diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidgetWithLabel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidgetWithLabel.java index 4b2faf2..f25db76 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidgetWithLabel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidgetWithLabel.java @@ -3,6 +3,7 @@ import org.ovirt.engine.ui.common.idhandler.HasElementId; import org.ovirt.engine.ui.common.utils.PatternflyConstants; import org.ovirt.engine.ui.common.view.popup.FocusableComponentsContainer; +import org.ovirt.engine.ui.common.widget.editor.EditorStateUpdateEvent; import org.ovirt.engine.ui.common.widget.editor.EditorWidget; import com.google.gwt.core.client.GWT; @@ -55,6 +56,11 @@ String contentWidget(); } + //We need to store the valid state of the editor so that when the model validator + //runs and the editor is not valid (due to a parsing error). The editor doesn't get + //reset by the model. + private boolean editorStateValid = true; + private final W contentWidget; @UiField @@ -88,10 +94,12 @@ this.renderer = renderer; initWidget(WidgetUiBinder.uiBinder.createAndBindUi(this)); + addStateUpdateHandler(); } public AbstractValidatedWidgetWithLabel(W contentWidget) { this(contentWidget, new VisibilityRenderer.SimpleVisibilityRenderer()); + addStateUpdateHandler(); } @Override @@ -336,4 +344,31 @@ public void setRenderer(VisibilityRenderer renderer) { this.renderer = renderer; } + + protected void handleInvalidState() { + editorStateValid = false; + } + + @Override + public void markAsValid() { + if (editorStateValid) { + super.markAsValid(); + } + } + + private void addStateUpdateHandler() { + ((Widget) this.getContentWidget()).addHandler(new EditorStateUpdateEvent.EditorStateUpdateHandler() { + @Override + public void onEditorStateUpdate(EditorStateUpdateEvent event) { + if (event.isValid()) { + //Mark the editor as valid. + editorStateValid = true; + markAsValid(); + } else { + //Mark the editor as invalid. + handleInvalidState(); + } + } + }, EditorStateUpdateEvent.getType()); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EditorStateUpdate.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EditorStateUpdate.java new file mode 100644 index 0000000..3fc8842 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EditorStateUpdate.java @@ -0,0 +1,8 @@ +package org.ovirt.engine.ui.common.widget.editor; + +import com.gwtplatform.dispatch.annotation.GenEvent; + +@GenEvent +public class EditorStateUpdate { + boolean valid; +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/DoubleEntityModelLabelEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/DoubleEntityModelLabelEditor.java index 12c6866..789bb85 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/DoubleEntityModelLabelEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/DoubleEntityModelLabelEditor.java @@ -3,7 +3,7 @@ import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; -public class DoubleEntityModelLabelEditor extends EntityModelLabelEditor<Double> { +public class DoubleEntityModelLabelEditor extends NumberEntityModelLabelEditor<Double> { public DoubleEntityModelLabelEditor(Renderer<Double> renderer, Parser<Double> parser) { super(renderer, parser); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java index 005cd66..005ce22 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBox.java @@ -1,15 +1,20 @@ package org.ovirt.engine.ui.common.widget.editor.generic; +import java.text.ParseException; + import com.google.gwt.dom.client.Document; import com.google.gwt.editor.ui.client.adapters.ValueBoxEditor; import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; import com.google.gwt.user.client.ui.ValueBox; + +import org.ovirt.engine.ui.common.widget.editor.EditorStateUpdateEvent; import org.ovirt.engine.ui.common.widget.editor.EditorWidget; public class EntityModelTextBox<T> extends ValueBox<T> implements EditorWidget<T, ValueBoxEditor<T>> { private ObservableValueBoxEditor<T> editor; + private boolean isValid = true; public EntityModelTextBox(Renderer<T> renderer, Parser<T> parser) { super(Document.get().createTextInputElement(), renderer, parser); @@ -23,4 +28,27 @@ return editor; } + /** + * Return the parsed value, or null if the field is empty or parsing fails. If the parsing fails + * fire a parsing failed event, so interested parties can handle it. + */ + @Override + public T getValue() { + T value = null; + boolean originalValidState = isValid; + try { + value = getValueOrThrow(); + isValid = true; + } catch (ParseException e) { + isValid = false; + } + if (originalValidState != isValid) { + fireEvent(new EditorStateUpdateEvent(isValid)); + } + return value; + } + + public boolean isStateValid() { + return isValid; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBoxEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBoxEditor.java index 7a0a3b5..714ab14 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBoxEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelTextBoxEditor.java @@ -2,6 +2,7 @@ import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; + import org.ovirt.engine.ui.common.widget.VisibilityRenderer; import org.ovirt.engine.ui.common.widget.editor.AbstractValueBoxWithLabelEditor; @@ -21,4 +22,5 @@ public EntityModelTextBoxEditor(Renderer<T> renderer, Parser<T> parser, VisibilityRenderer visibilityRenderer) { super(new EntityModelTextBox<T>(renderer, parser), visibilityRenderer); } + } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelLabelEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelLabelEditor.java index f93b914..23b0561 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelLabelEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelLabelEditor.java @@ -3,7 +3,7 @@ import com.google.gwt.text.shared.Parser; import com.google.gwt.text.shared.Renderer; -public class IntegerEntityModelLabelEditor extends EntityModelLabelEditor<Integer> { +public class IntegerEntityModelLabelEditor extends NumberEntityModelLabelEditor<Integer> { public IntegerEntityModelLabelEditor(Renderer<Integer> renderer, Parser<Integer> parser) { super(renderer, parser); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxEditor.java index 400bdbe..d5a54f9 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxEditor.java @@ -1,24 +1,28 @@ package org.ovirt.engine.ui.common.widget.editor.generic; +import java.util.Arrays; + import org.ovirt.engine.ui.common.widget.VisibilityRenderer; import org.ovirt.engine.ui.common.widget.parser.generic.ToIntEntityModelParser; +import org.ovirt.engine.ui.uicompat.ConstantsManager; /** * Composite Editor that uses {@link org.ovirt.engine.ui.common.widget.editor.generic.EntityModelTextBox}. */ -public class IntegerEntityModelTextBoxEditor extends EntityModelTextBoxEditor<Integer> { +public class IntegerEntityModelTextBoxEditor extends NumberEntityModelTextBoxEditor<Integer> { public IntegerEntityModelTextBoxEditor(VisibilityRenderer visibilityRenderer) { - super(new EntityModelTextBox<Integer>( - new ToStringEntityModelRenderer<Integer>(), - new ToIntEntityModelParser()), - visibilityRenderer); + super(new EntityModelTextBox<Integer>(new ToStringEntityModelRenderer<Integer>(), new ToIntEntityModelParser()), visibilityRenderer); } public IntegerEntityModelTextBoxEditor() { - super(new ToStringEntityModelRenderer<Integer>(), - new ToIntEntityModelParser() - ); + super(new ToStringEntityModelRenderer<Integer>(), new ToIntEntityModelParser()); } + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants().thisFieldMustContainIntegerNumberInvalidReason())); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxOnlyEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxOnlyEditor.java index d20b8f2..d575016 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxOnlyEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/IntegerEntityModelTextBoxOnlyEditor.java @@ -1,21 +1,29 @@ package org.ovirt.engine.ui.common.widget.editor.generic; +import java.util.Arrays; + import org.ovirt.engine.ui.common.widget.VisibilityRenderer; import org.ovirt.engine.ui.common.widget.parser.generic.ToIntEntityModelParser; +import org.ovirt.engine.ui.uicompat.ConstantsManager; -public class IntegerEntityModelTextBoxOnlyEditor extends EntityModelTextBoxOnlyEditor<Integer> { +public class IntegerEntityModelTextBoxOnlyEditor extends NumberEntityModelTextBoxOnlyEditor<Integer> { public IntegerEntityModelTextBoxOnlyEditor(VisibilityRenderer visibilityRenderer) { - super(new EntityModelTextBox<Integer>( - new ToStringEntityModelRenderer<Integer>(), - new ToIntEntityModelParser()), + super(new EntityModelTextBox<Integer>(new ToStringEntityModelRenderer<Integer>(), new ToIntEntityModelParser()), visibilityRenderer); } public IntegerEntityModelTextBoxOnlyEditor() { - super(new EntityModelTextBox<Integer>( - new ToStringEntityModelRenderer<Integer>(), - new ToIntEntityModelParser()), - new VisibilityRenderer.SimpleVisibilityRenderer()); + super(new EntityModelTextBox<Integer>(new ToStringEntityModelRenderer<Integer>(), + new ToIntEntityModelParser()), new VisibilityRenderer.SimpleVisibilityRenderer()); } + + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants() + .thisFieldMustContainIntegerNumberInvalidReason())); + } + } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/LongEntityModelTextBoxEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/LongEntityModelTextBoxEditor.java index 8e4771c..3a938db 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/LongEntityModelTextBoxEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/LongEntityModelTextBoxEditor.java @@ -1,10 +1,21 @@ package org.ovirt.engine.ui.common.widget.editor.generic; -import org.ovirt.engine.ui.common.widget.parser.generic.ToLongEntityParser; +import java.util.Arrays; -public class LongEntityModelTextBoxEditor extends EntityModelTextBoxEditor<Long> { +import org.ovirt.engine.ui.common.widget.parser.generic.ToLongEntityParser; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +public class LongEntityModelTextBoxEditor extends NumberEntityModelTextBoxEditor<Long> { public LongEntityModelTextBoxEditor() { super(new ToStringEntityModelRenderer<Long>(), new ToLongEntityParser()); } + + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + //Even though this is a long, the validator will return the integer message, so that is the one we are using here. + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants().thisFieldMustContainIntegerNumberInvalidReason())); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelLabelEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelLabelEditor.java new file mode 100644 index 0000000..3f4e156 --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelLabelEditor.java @@ -0,0 +1,30 @@ +package org.ovirt.engine.ui.common.widget.editor.generic; + +import java.util.Arrays; + +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; + +public class NumberEntityModelLabelEditor<T extends Number> extends EntityModelLabelEditor<T> { + + public NumberEntityModelLabelEditor(Renderer<T> renderer) { + super(renderer); + } + + public NumberEntityModelLabelEditor(Renderer<T> renderer, Parser<T> parser) { + super(renderer, parser); + } + + public NumberEntityModelLabelEditor(EntityModelLabel<T> widget) { + super(widget); + } + + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants().thisFieldMustContainNumberInvalidReason())); + } +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxEditor.java new file mode 100644 index 0000000..61eb97d --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxEditor.java @@ -0,0 +1,31 @@ +package org.ovirt.engine.ui.common.widget.editor.generic; + +import java.util.Arrays; + +import org.ovirt.engine.ui.common.widget.VisibilityRenderer; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; + +public class NumberEntityModelTextBoxEditor<T extends Number> extends EntityModelTextBoxEditor<T> { + public NumberEntityModelTextBoxEditor(EntityModelTextBox<T> contentWidget, VisibilityRenderer visibilityRenderer) { + super(contentWidget, visibilityRenderer); + } + + public NumberEntityModelTextBoxEditor(Renderer<T> renderer, Parser<T> parser) { + super(renderer, parser); + } + + public NumberEntityModelTextBoxEditor(Renderer<T> renderer, Parser<T> parser, VisibilityRenderer visibilityRenderer) { + super(renderer, parser, visibilityRenderer); + } + + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants().thisFieldMustContainNumberInvalidReason())); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxOnlyEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxOnlyEditor.java new file mode 100644 index 0000000..fd5af0c --- /dev/null +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/NumberEntityModelTextBoxOnlyEditor.java @@ -0,0 +1,28 @@ +package org.ovirt.engine.ui.common.widget.editor.generic; + +import java.util.Arrays; + +import org.ovirt.engine.ui.common.widget.VisibilityRenderer; +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +import com.google.gwt.text.shared.Parser; +import com.google.gwt.text.shared.Renderer; + +public class NumberEntityModelTextBoxOnlyEditor<T extends Number> extends EntityModelTextBoxOnlyEditor<T> { + + public NumberEntityModelTextBoxOnlyEditor(EntityModelTextBox<T> textBox, VisibilityRenderer visibilityRenderer) { + super(textBox, visibilityRenderer); + } + + public NumberEntityModelTextBoxOnlyEditor(Renderer<T> renderer, Parser<T> parser) { + super(renderer, parser); + } + + @Override + protected void handleInvalidState() { + //Be sure to call super.handleInvalidstate to make sure the editor valid state is properly updated. + super.handleInvalidState(); + markAsInvalid(Arrays.asList(ConstantsManager.getInstance().getConstants().thisFieldMustContainNumberInvalidReason())); + } + +} diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/ShortEntityModelTextBoxOnlyEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/ShortEntityModelTextBoxOnlyEditor.java index 6ee088d..056732b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/ShortEntityModelTextBoxOnlyEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/ShortEntityModelTextBoxOnlyEditor.java @@ -2,7 +2,7 @@ import org.ovirt.engine.ui.common.widget.parser.generic.ToShortEntityModelParser; -public class ShortEntityModelTextBoxOnlyEditor extends EntityModelTextBoxOnlyEditor<Short> { +public class ShortEntityModelTextBoxOnlyEditor extends NumberEntityModelTextBoxOnlyEditor<Short> { public ShortEntityModelTextBoxOnlyEditor() { super(new ToStringEntityModelRenderer<Short>(), new ToShortEntityModelParser()); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/parser/generic/ToIntEntityModelParser.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/parser/generic/ToIntEntityModelParser.java index fa5a78e..585de37 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/parser/generic/ToIntEntityModelParser.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/parser/generic/ToIntEntityModelParser.java @@ -14,7 +14,9 @@ Integer ret = null; try { ret = Integer.parseInt(text.toString()); - } catch (NumberFormatException e) {} + } catch (NumberFormatException e) { + throw new ParseException("Unable to parse String to Integer", 0); //$NON-NLS-1$ + } return ret; } diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index 6cc150e..5658962 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -1130,6 +1130,9 @@ @DefaultStringValue("This field must contain integer number") String thisFieldMustContainIntegerNumberInvalidReason(); + @DefaultStringValue("This field must contain a number") + String thisFieldMustContainNumberInvalidReason(); + @DefaultStringValue("This field must contain positive integer number") String thisFieldMustContainNonNegativeIntegerNumberInvalidReason(); -- To view, visit http://gerrit.ovirt.org/37244 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I3702cb370528a0baf6a176fa89cd736596a10ff2 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alexander Wels <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
