Tomas Jelinek has uploaded a new change for review. Change subject: userportal,webadmin: show advanced options on validation error ......................................................................
userportal,webadmin: show advanced options on validation error When there was a validation error in the new/edit VM dialog while only the basic mode was visible, it was not obvious what the problem is. The new behavior is this: - if there is a validation error and the invalid widget is visible in the current screen, do not show the advanced options - if there is a validation error and the invalid widget is not visible, turn on the advanced options so the widget will be visible To support this, the following changes had to be made: - added the method isValid to HasValidation - implemented this method in the needed widgets - added the support of HasValidation also to the EntityModelWidgetWithInfo and DetachableWidget - added a method getInvalidWidgets to DialogTab to find all the invalid widgets Beside this also some small fixes has been done, namely: - added the proper validation of the initial run tab - fixed the validation of the system tab - extracted and cleaned up the resetting of the tab validity Change-Id: I1b419b560fe1e0bc0c8114d2a34f0bc930756aa0 Bug-Url: https://bugzilla.redhat.com/1085380 Signed-off-by: Tomas Jelinek <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelWidgetWithInfo.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HasValidation.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/tab/DialogTab.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnumRadioEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/WidgetWithLabelEditor.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/BaseEntityModelDetachableWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidgetWithLabel.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractSanStorageView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportFcpStorageView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiStorageView.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java 17 files changed, 253 insertions(+), 35 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/66/30666/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java index 144c77f..d124362 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/view/popup/AbstractVmPopupView.java @@ -2,6 +2,7 @@ import org.ovirt.engine.ui.common.CommonApplicationResources; import org.ovirt.engine.ui.common.widget.AbstractUiCommandButton; +import org.ovirt.engine.ui.common.widget.HasValidation; import org.ovirt.engine.ui.common.widget.LeftAlignedUiCommandButton; import org.ovirt.engine.ui.common.widget.popup.AbstractVmBasedPopupPresenterWidget; import org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget; @@ -10,6 +11,9 @@ import com.google.gwt.event.shared.EventBus; import com.google.inject.Inject; + +import java.util.Collections; +import java.util.List; public abstract class AbstractVmPopupView extends AbstractModelBoundWidgetPopupView<UnitVmModel> implements AbstractVmBasedPopupPresenterWidget.ViewDef { @@ -61,4 +65,13 @@ return super.createCommandButton(label, uniqueId); } + + @Override + public List<HasValidation> getInvalidWidgets() { + if (getContentWidget() instanceof AbstractVmPopupWidget) { + return ((AbstractVmPopupWidget) getContentWidget()).getInvalidWidgets(); + } + + return Collections.EMPTY_LIST; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidget.java index ac97944..83e62e7 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/AbstractValidatedWidget.java @@ -13,6 +13,8 @@ */ public abstract class AbstractValidatedWidget extends Composite implements HasValidation { + private boolean valid = true; + @Override protected void initWidget(Widget widget) { super.initWidget(widget); @@ -22,6 +24,7 @@ @Override public void markAsValid() { + valid = true; applyCommonValidationStyles(); getValidatedWidgetStyle().setBorderColor("gray"); //$NON-NLS-1$ getValidatedWidget().setTitle(null); @@ -29,6 +32,7 @@ @Override public void markAsInvalid(List<String> validationHints) { + valid = false; applyCommonValidationStyles(); getValidatedWidgetStyle().setBorderColor("red"); //$NON-NLS-1$ getValidatedWidget().setTitle(getValidationTitle(validationHints)); @@ -49,4 +53,8 @@ protected abstract Widget getValidatedWidget(); + @Override + public boolean isValid() { + return valid; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelWidgetWithInfo.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelWidgetWithInfo.java index cca2744..78350d4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelWidgetWithInfo.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/EntityModelWidgetWithInfo.java @@ -13,7 +13,9 @@ import com.google.gwt.user.client.ui.Widget; import com.google.inject.Inject; -public class EntityModelWidgetWithInfo<T> extends Composite { +import java.util.List; + +public class EntityModelWidgetWithInfo<T> extends Composite implements HasValidation { interface WidgetUiBinder extends UiBinder<Widget, EntityModelWidgetWithInfo> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); @@ -43,4 +45,26 @@ infoIcon.setText(text); } + @Override + public void markAsValid() { + if (contentWidget instanceof HasValidation) { + ((HasValidation) contentWidget).markAsValid(); + } + } + + @Override + public void markAsInvalid(List<String> validationHints) { + if (contentWidget instanceof HasValidation) { + ((HasValidation) contentWidget).markAsInvalid(validationHints); + } + } + + @Override + public boolean isValid() { + if (contentWidget instanceof HasValidation) { + return ((HasValidation) contentWidget).isValid(); + } + + return true; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HasValidation.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HasValidation.java index 25c72ad..2b5624a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HasValidation.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/HasValidation.java @@ -20,4 +20,8 @@ */ void markAsInvalid(List<String> validationHints); + /** + * Returns true/false according to the markAsValid/markAsInvalid + */ + boolean isValid(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/tab/DialogTab.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/tab/DialogTab.java index d3e0106..b1e472a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/tab/DialogTab.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/dialog/tab/DialogTab.java @@ -21,6 +21,10 @@ import com.google.gwt.user.client.ui.IndexedPanel; import com.google.gwt.user.client.ui.InlineLabel; import com.google.gwt.user.client.ui.Widget; +import org.ovirt.engine.ui.common.widget.HasValidation; + +import java.util.ArrayList; +import java.util.List; public class DialogTab extends AbstractValidatedWidget implements HasClickHandlers, HasLabel, HasElementId, HasKeyUpHandlers, FocusableComponentsContainer { @@ -131,6 +135,23 @@ } } + public List<HasValidation> getInvalidWidgets() { + return getInvalidWidgets(getContent()); + } + + private List<HasValidation> getInvalidWidgets(Widget content) { + List<HasValidation> hasValidations = new ArrayList<HasValidation>(); + if (content instanceof IndexedPanel) { + for (int i = 0; i < ((IndexedPanel) content).getWidgetCount(); i++) { + hasValidations.addAll(getInvalidWidgets(((IndexedPanel) content).getWidget(i))); + } + } else if (content instanceof HasValidation && !((HasValidation) content).isValid()) { + hasValidations.add((HasValidation) content); + } + + return hasValidations; + } + @Override public int setTabIndexes(int nextTabIndex) { tabContainer.setTabIndex(nextTabIndex++); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnumRadioEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnumRadioEditor.java index fa368fe..3938b30 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnumRadioEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/EnumRadioEditor.java @@ -352,4 +352,9 @@ public void markAsInvalid(List<String> validationHints) { // not implemented } + + @Override + public boolean isValid() { + return true; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/WidgetWithLabelEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/WidgetWithLabelEditor.java index fcc7756..acb64f5 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/WidgetWithLabelEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/WidgetWithLabelEditor.java @@ -65,6 +65,11 @@ } @Override + public boolean isValid() { + return widgetWithLabel.isValid(); + } + + @Override public void setEnabled(boolean enabled) { widgetWithLabel.setEnabled(enabled); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/BaseEntityModelDetachableWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/BaseEntityModelDetachableWidget.java index 1e7acd3..50f074a 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/BaseEntityModelDetachableWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/BaseEntityModelDetachableWidget.java @@ -66,6 +66,4 @@ attachedSeparatedImage.setResource(attached ? resource.joinedIcon() : resource.separatedIcon()); attachedSeparatedImage.setTitle(attached ? constants.attachedToInstanceType() : constants.detachedFromInstanceType()); } - - } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidget.java index 89c3d4d..6d0b988 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidget.java @@ -12,12 +12,16 @@ import com.google.gwt.user.client.ui.Widget; import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel; import org.ovirt.engine.ui.common.widget.Align; +import org.ovirt.engine.ui.common.widget.HasValidation; + +import java.util.List; + import static com.google.gwt.dom.client.Style.Unit; /** * Takes a AbstractValidatedWidgetWithLabel, decorates it with the detachable icon but does not render it's label */ -public class EntityModelDetachableWidget extends BaseEntityModelDetachableWidget implements HasEnabled { +public class EntityModelDetachableWidget extends BaseEntityModelDetachableWidget implements HasEnabled, HasValidation { interface WidgetUiBinder extends UiBinder<Widget, EntityModelDetachableWidget> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); @@ -77,4 +81,19 @@ public void addContentWrapperStypeName(String styleName) { contentWrapper.addStyleName(styleName); } + + @Override + public void markAsValid() { + decorated.markAsValid(); + } + + @Override + public void markAsInvalid(List<String> validationHints) { + decorated.markAsInvalid(validationHints); + } + + @Override + public boolean isValid() { + return decorated.isValid(); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidgetWithLabel.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidgetWithLabel.java index f9cc0d4..e2cc2d1 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidgetWithLabel.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelDetachableWidgetWithLabel.java @@ -11,11 +11,14 @@ import com.google.gwt.user.client.ui.Widget; import org.ovirt.engine.ui.common.widget.AbstractValidatedWidgetWithLabel; import org.ovirt.engine.ui.common.widget.HasLabel; +import org.ovirt.engine.ui.common.widget.HasValidation; + +import java.util.List; /** * Takes an AbstractValidatedWidgetWithLabel and decorates it with a detachable icon */ -public class EntityModelDetachableWidgetWithLabel extends BaseEntityModelDetachableWidget implements HasLabel, HasEnabled { +public class EntityModelDetachableWidgetWithLabel extends BaseEntityModelDetachableWidget implements HasLabel, HasEnabled, HasValidation { interface WidgetUiBinder extends UiBinder<Widget, EntityModelDetachableWidgetWithLabel> { WidgetUiBinder uiBinder = GWT.create(WidgetUiBinder.class); @@ -83,4 +86,19 @@ public void addContentWrapperStypeName(String styleName) { contentWrapper.addStyleName(styleName); } + + @Override + public void markAsValid() { + decorated.markAsValid(); + } + + @Override + public void markAsInvalid(List<String> validationHints) { + decorated.markAsInvalid(validationHints); + } + + @Override + public boolean isValid() { + return decorated.isValid(); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java index 5dd2b9e..a1627fd 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/popup/AbstractVmBasedPopupPresenterWidget.java @@ -1,13 +1,18 @@ package org.ovirt.engine.ui.common.widget.popup; +import com.google.gwt.event.logical.shared.HasAttachHandlers; import com.google.gwt.event.shared.EventBus; +import com.google.gwt.user.client.ui.HasVisibility; import com.google.inject.Inject; import org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget; import org.ovirt.engine.ui.common.system.ClientStorage; +import org.ovirt.engine.ui.common.widget.HasValidation; import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.EventArgs; import org.ovirt.engine.ui.uicompat.IEventListener; + +import java.util.List; public class AbstractVmBasedPopupPresenterWidget<V extends AbstractVmBasedPopupPresenterWidget.ViewDef> extends AbstractModelBoundPopupPresenterWidget<UnitVmModel, V> { @@ -19,6 +24,8 @@ void setSpiceProxyOverrideExplanation(String explanation); void switchAttachToInstanceType(boolean isAttached); + + List<HasValidation> getInvalidWidgets(); } private ClientStorage clientStorage; @@ -67,6 +74,35 @@ swithAttachToInstanceType(model); } }); + + model.getValid().getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + switchToAdvancedIfNeeded(model); + } + + }); + } + + private void switchToAdvancedIfNeeded(final UnitVmModel model) { + if (model.getAdvancedMode().getEntity() || model.getValid().getEntity()) { + return; + } + + List<HasValidation> invalidWidgets = getView().getInvalidWidgets(); + + if (invalidWidgets.size() == 0) { + return; + } + + for (HasValidation invalidWidget : invalidWidgets) { + boolean isVisible = invalidWidget instanceof HasVisibility && ((HasVisibility) invalidWidget).isVisible(); + boolean isAttached = invalidWidget instanceof HasAttachHandlers && ((HasAttachHandlers) invalidWidget).isAttached(); + if (!isVisible || !isAttached) { + model.getAdvancedMode().setEntity(true); + break; + } + } } private void swithAttachToInstanceType(final UnitVmModel model) { diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java index 9704a00..2eb8efe 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.java @@ -37,6 +37,7 @@ import org.ovirt.engine.ui.common.widget.EntityModelDetachableWidgetWithInfo; import org.ovirt.engine.ui.common.widget.EntityModelWidgetWithInfo; import org.ovirt.engine.ui.common.widget.HasDetachable; +import org.ovirt.engine.ui.common.widget.HasValidation; import org.ovirt.engine.ui.common.widget.dialog.AdvancedParametersExpander; import org.ovirt.engine.ui.common.widget.dialog.InfoIcon; import org.ovirt.engine.ui.common.widget.dialog.tab.DialogTab; @@ -1584,6 +1585,12 @@ } else { systemTab.markAsInvalid(null); } + } else if ("IsFirstRunTabValid".equals(propName)) { //$NON-NLS-1$ + if (vm.getIsFirstRunTabValid()) { + initialRunTab.markAsValid(); + } else { + initialRunTab.markAsInvalid(null); + } } else if ("IsDisplayTabValid".equals(propName)) { //$NON-NLS-1$ if (vm.getIsDisplayTabValid()) { consoleTab.markAsValid(); @@ -2008,17 +2015,10 @@ } protected void disableAllTabs() { - generalTab.disableContent(); - poolTab.disableContent(); - initialRunTab.disableContent(); - consoleTab.disableContent(); - hostTab.disableContent(); - highAvailabilityTab.disableContent(); - resourceAllocationTab.disableContent(); - bootOptionsTab.disableContent(); - customPropertiesTab.disableContent(); - systemTab.disableContent(); - rngDeviceTab.disableContent(); + for (DialogTab dialogTab : allDialogTabs()) { + dialogTab.disableContent(); + } + oSTypeEditor.setEnabled(false); quotaEditor.setEnabled(false); dataCenterWithClusterEditor.setEnabled(false); @@ -2026,6 +2026,22 @@ baseTemplateEditor.setEnabled(false); vmTypeEditor.setEnabled(false); instanceTypesEditor.setEnabled(false); + } + + private List<DialogTab> allDialogTabs() { + return Arrays.asList( + generalTab, + poolTab, + initialRunTab, + consoleTab, + hostTab, + highAvailabilityTab, + resourceAllocationTab, + bootOptionsTab, + customPropertiesTab, + systemTab, + rngDeviceTab + ); } protected void updateOrAddToWidgetConfiguration(PopupWidgetConfigMap configuration, List<Widget> widgets, WidgetConfigurationUpdater updater) { @@ -2084,4 +2100,13 @@ adminOnlyField.setVisible(false); } } + + public List<HasValidation> getInvalidWidgets() { + List<HasValidation> hasValidations = new ArrayList<HasValidation>(); + for (DialogTab dialogTab : allDialogTabs()) { + hasValidations.addAll(dialogTab.getInvalidWidgets()); + } + + return hasValidations; + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractSanStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractSanStorageView.java index 03a2ff2..f3b774f 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractSanStorageView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/AbstractSanStorageView.java @@ -93,6 +93,11 @@ } @Override + public boolean isValid() { + return contentPanel.isValid(); + } + + @Override public SanStorageModelBase flush() { return driver.flush(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportFcpStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportFcpStorageView.java index efd19fd..5ca203c 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportFcpStorageView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportFcpStorageView.java @@ -115,6 +115,11 @@ } @Override + public boolean isValid() { + return storageDomainsPanel.isValid(); + } + + @Override public ImportFcpStorageModel flush() { return driver.flush(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java index b765006..e8037a2 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/ImportIscsiStorageView.java @@ -239,6 +239,11 @@ } @Override + public boolean isValid() { + return storageDomainsPanel.isValid(); + } + + @Override public boolean isSubViewFocused() { return iscsiDiscoverTargetsView.isDiscoverPanelFocused(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiStorageView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiStorageView.java index ac027e9..fbebc17 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiStorageView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/IscsiStorageView.java @@ -213,6 +213,11 @@ } @Override + public boolean isValid() { + return lunsListPanel.isValid() && targetsToLunsPanel.isValid(); + } + + @Override public boolean isSubViewFocused() { return iscsiTargetToLunView.isDiscoverPanelFocused(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java index b352c30..2a1ac3f 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java @@ -76,6 +76,16 @@ private boolean privateIsNew; + private EntityModel<Boolean> valid; + + public EntityModel<Boolean> getValid() { + return valid; + } + + public void setValid(EntityModel<Boolean> valid) { + this.valid = valid; + } + /** * All dialogs which want to have the previous advanced/basic mode remembered in local storage need to have * a key to local storage set. @@ -1425,6 +1435,7 @@ setNicsWithLogicalNetworks(new VnicInstancesModel()); setAdvancedMode(new EntityModel<Boolean>(false)); + setValid(new EntityModel<Boolean>(true)); setAttachedToInstanceType(new EntityModel<Boolean>(true)); setStorageDomain(new NotChangableForVmInPoolListModel<StorageDomain>()); setName(new NotChangableForVmInPoolEntityModel<String>()); @@ -1590,16 +1601,9 @@ setIsTemplatePublic(new NotChangableForVmInPoolEntityModel<Boolean>()); getIsTemplatePublic().getEntityChangedEvent().addListener(this); - - setIsHostTabValid(true); setIsCustomPropertiesTabAvailable(true); - setRngTabValid(true); - setIsCustomPropertiesTabValid(getIsHostTabValid()); - setIsBootSequenceTabValid(getIsCustomPropertiesTabValid()); - setIsAllocationTabValid(getIsBootSequenceTabValid()); - setIsDisplayTabValid(getIsAllocationTabValid()); - setIsFirstRunTabValid(getIsDisplayTabValid()); - setIsGeneralTabValid(getIsFirstRunTabValid()); + + resetTabsValidity(); // NOTE: This is because currently the auto generated view code tries to register events of // pooltype for @@ -2594,7 +2598,6 @@ getInstanceTypes().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); getDataCenterWithClustersList().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); - setIsSystemTabValid(true); getOSType().validateSelectedItem(new NotEmptyValidation[] { new NotEmptyValidation() }); @@ -2675,8 +2678,9 @@ setIsAllocationTabValid(getIsAllocationTabValid() && getCpuSharesAmount().getIsValid()); setIsBootSequenceTabValid(getCdImage().getIsValid() && getKernel_path().getIsValid()); boolean vmInitIsValid = getVmInitModel().validate(); + setIsFirstRunTabValid(vmInitIsValid); - return hwPartValid && vmInitIsValid && getDataCenterWithClustersList().getIsValid() + boolean isValid = hwPartValid && vmInitIsValid && getDataCenterWithClustersList().getIsValid() && getDisksAllocationModel().getIsValid() && getTemplate().getIsValid() && getComment().getIsValid() && getDefaultHost().getIsValid() && getTimeZone().getIsValid() && getOSType().getIsValid() && getCdImage().getIsValid() @@ -2685,9 +2689,14 @@ && getKernel_parameters().getIsValid() && getCpuSharesAmount().getIsValid() && getQuota().getIsValid(); + + getValid().setEntity(isValid); + return isValid; } public boolean validateHwPart() { + resetTabsValidity(); + getName().validateEntity(new IValidation[] {new NotEmptyValidation()}); getMigrationDowntime().validateEntity(new IValidation[] { new NotNullIntegerValidation(0, Integer.MAX_VALUE) }); @@ -2716,12 +2725,6 @@ getSerialNumberPolicy().getCustomSerialNumber().setIsValid(true); } - setIsBootSequenceTabValid(true); - setIsAllocationTabValid(getIsBootSequenceTabValid()); - setIsDisplayTabValid(getIsAllocationTabValid()); - setIsFirstRunTabValid(getIsDisplayTabValid()); - setIsGeneralTabValid(getIsFirstRunTabValid()); - boolean behaviorValid = behavior.validate(); setIsGeneralTabValid(getName().getIsValid() && getDescription().getIsValid() && getComment().getIsValid() && getMinAllocatedMemory().getIsValid()); @@ -2746,12 +2749,31 @@ validateMemorySize(getMinAllocatedMemory(), getMemSize().getEntity(), 1); } - return behaviorValid && customPropertySheetValid && getName().getIsValid() && getDescription().getIsValid() + + + boolean isValid = behaviorValid && customPropertySheetValid && getName().getIsValid() && getDescription().getIsValid() && getMinAllocatedMemory().getIsValid() && getNumOfMonitors().getIsValid() && getUsbPolicy().getIsValid() && getMigrationDowntime().getIsValid() && getRngBytes().getIsValid() - && getRngPeriod().getIsValid(); + && getRngPeriod().getIsValid() + && getTotalCPUCores().getIsValid(); + + getValid().setEntity(isValid); + return isValid; + } + + private void resetTabsValidity() { + setIsGeneralTabValid(true); + setIsSystemTabValid(true); + setIsFirstRunTabValid(true); + setIsDisplayTabValid(true); + setIsHostTabValid(true); + setIsAllocationTabValid(true); + setIsBootSequenceTabValid(true); + setRngTabValid(true); + setIsCustomPropertiesTabValid(true); + getValid().setEntity(true); } private class RngDevValidation implements IValidation { -- To view, visit http://gerrit.ovirt.org/30666 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1b419b560fe1e0bc0c8114d2a34f0bc930756aa0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Tomas Jelinek <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
