Martin Betak has uploaded a new change for review. Change subject: frontend: Support for configuring VM.migration_downtime ......................................................................
frontend: Support for configuring VM.migration_downtime Enable user to configure in the New/Edit-VM dialog the new property representing maximum number of milliseconds a VM can be down during live migration. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1055434 Change-Id: Ib69d4f275561516f143ec8360e7b5b20644794fd Signed-off-by: Martin Betak <mbe...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelCheckBoxOnlyEditor.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/popup/AbstractVmPopupWidget.ui.xml M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/IntegerValidation.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/NotNullIntegerValidation.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/ValidationResult.java 20 files changed, 246 insertions(+), 63 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/35/23435/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index 114c5f7..43a31b4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1624,4 +1624,9 @@ @DefaultStringValue("Import as Template") String importAsTemplate(); + @DefaultStringValue("Use custom migration downtime") + String overrideMigrationDowntimeLabel(); + + @DefaultStringValue("Migration downtime (ms)") + String migrationDowntimeLabel(); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java index abde869..083673b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationMessages.java @@ -144,4 +144,6 @@ @DefaultMessage("{0} or {1}") String or(String a, String b); + @DefaultMessage("Represents maximum number of milliseconds the VM can be down during live migration. Value of 0 means that VDSM default will be used. (Current engine-wide default is {0}ms)") + String migrationDowntimeInfo(Integer milliseconds); } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelCheckBoxOnlyEditor.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelCheckBoxOnlyEditor.java index 9a163ed..5cecc60 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelCheckBoxOnlyEditor.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/editor/generic/EntityModelCheckBoxOnlyEditor.java @@ -3,8 +3,23 @@ import com.google.gwt.dom.client.Style.Display; import com.google.gwt.dom.client.Style.Float; import com.google.gwt.user.client.ui.Widget; +import org.ovirt.engine.ui.common.widget.Align; +import org.ovirt.engine.ui.common.widget.VisibilityRenderer; public class EntityModelCheckBoxOnlyEditor extends EntityModelCheckBoxEditor { + + public EntityModelCheckBoxOnlyEditor() { + super(Align.LEFT); // align not important since label is not shown + } + + public EntityModelCheckBoxOnlyEditor(VisibilityRenderer visibilityRenderer) { + super(Align.LEFT, visibilityRenderer); + } + + public EntityModelCheckBoxOnlyEditor(VisibilityRenderer visibilityRenderer, boolean useFullWidthIfAvailable) { + super(Align.LEFT, visibilityRenderer, useFullWidthIfAvailable); + } + @Override protected void initWidget(Widget wrapperWidget) { super.initWidget(wrapperWidget); 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 91765fa..79878c2 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 @@ -445,6 +445,19 @@ public ListModelListBoxEditor<MigrationSupport> migrationModeEditor; @UiField(provided = true) + @Path(value = "overrideMigrationDowntime.entity") + @WithElementId("overrideMigrationDowntime") + public EntityModelCheckBoxOnlyEditor overrideMigrationDowntimeEditor; + + @UiField(provided = true) + public InfoIcon migrationDowntimeInfoIcon; + + @UiField(provided = true) + @Path(value = "migrationDowntime.entity") + @WithElementId("migrationDowntime") + public IntegerEntityModelTextBoxOnlyEditor migrationDowntimeEditor; + + @UiField(provided = true) @Ignore @WithElementId("specificHost") public RadioButton specificHost; @@ -689,6 +702,8 @@ nonEditableWhileVmNotDownInfo = new InfoIcon(applicationTemplates.italicText(constants.nonEditableMigrationFieldsWhileVmNotDownInfo()), resources); + final Integer defaultMaximumMigrationDowntime = (Integer) AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.DefaultMaximumMigrationDowntime); + migrationDowntimeInfoIcon = new InfoIcon(applicationTemplates.italicText(messages.migrationDowntimeInfo(defaultMaximumMigrationDowntime)), resources); priorityEditor = new EntityModelCellTable<ListModel>( (Resources) GWT.create(ButtonCellTableResources.class)); disksAllocationView = new DisksAllocationView(constants); @@ -930,6 +945,9 @@ migrationModeEditor = new ListModelListBoxEditor<MigrationSupport>(new EnumRenderer(), new ModeSwitchingVisibilityRenderer()); + + overrideMigrationDowntimeEditor = new EntityModelCheckBoxOnlyEditor(new ModeSwitchingVisibilityRenderer(), false); + migrationDowntimeEditor = new IntegerEntityModelTextBoxOnlyEditor(new ModeSwitchingVisibilityRenderer()); // Resource Allocation provisioningThinEditor = @@ -1450,6 +1468,8 @@ specificHost.setTabIndex(nextTabIndex++); defaultHostEditor.setTabIndex(nextTabIndex++); migrationModeEditor.setTabIndex(nextTabIndex++); + overrideMigrationDowntimeEditor.setTabIndex(nextTabIndex++); + migrationDowntimeEditor.setTabIndex(nextTabIndex++); hostCpuEditor.setTabIndex(nextTabIndex++); // ==High Availability Tab== diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml index c636bc9..4342ee2 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractVmPopupWidget.ui.xml @@ -15,36 +15,68 @@ <ui:style type="org.ovirt.engine.ui.common.widget.uicommon.popup.AbstractVmPopupWidget.Style"> - .sectionPanel { - margin-bottom: 20px; - } + .sectionPanel { + margin-bottom: 20px; + } - .sectionPanelTight { - margin-bottom: 6px; - float: left; - width: 100%; - } + .sectionPanelTight { + margin-bottom: 6px; + float: left; + width: 100%; + } - .sectionLabel { - font-weight: bold; - margin-top: 10px; - margin-bottom: 5px; - } + .sectionLabel { + font-weight: bold; + margin-top: 10px; + margin-bottom: 5px; + } - .sectionComment { - margin-top: 10px; - margin-left: 5px; - font-style: italic; - } + .sectionComment { + margin-top: 10px; + margin-left: 5px; + font-style: italic; + } - .horizontallyAlignedCheckBox { - float: left; - padding-right: 15px; - } + .horizontallyAlignedCheckBox { + float: left; + padding-right: 15px; + } - .horizontallyAlignedCheckBoxContent { -<!-- turns off the original styles --> - } + .horizontallyAlignedCheckBoxContent { + } + + .migrationDowntimePanel { + padding-left: 1px; + line-height: 30px; + } + + .overrideMigrationDowntime { + display: inline; + float: left; + width: 20px; + } + + .overrideMigrationDowntime div { + width: 20px; + } + + .migrationDowntimeLabel { + display: inline-block; + float: left; + max-width: 200px; + } + + .migrationDowntimeInfoIcon { + display: inline; + float: left; + } + + .migrationDowntime { + display: inline; + float: right; + padding-right: 9px; + } + <!-- turns off the original styles --> .checkboxWithLongLabel,.checkbox { margin-left: -9px; @@ -495,6 +527,12 @@ <g:VerticalPanel width="100%" addStyleNames="{style.hostRunMigrationOptions}"> <e:ListModelListBoxEditor ui:field="migrationModeEditor" addStyleNames="{style.migrationSelect}"/> <ge:EntityModelCheckBoxEditor ui:field="hostCpuEditor" addStyleNames="{style.checkbox}" /> + <g:FlowPanel addStyleNames="{style.migrationDowntimePanel}"> + <ge:EntityModelCheckBoxOnlyEditor ui:field="overrideMigrationDowntimeEditor" addStyleNames="{style.overrideMigrationDowntime}" /> + <g:Label text="{constants.overrideMigrationDowntimeLabel}" addStyleNames="{style.migrationDowntimeLabel}" /> + <d:InfoIcon ui:field="migrationDowntimeInfoIcon" addStyleNames="{style.migrationDowntimeInfoIcon}" /> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="migrationDowntimeEditor" addStyleNames="{style.migrationDowntime}" /> + </g:FlowPanel> </g:VerticalPanel> </g:FlowPanel> </t:content> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java index c61b43e..5f82adb 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Cloner.java @@ -213,6 +213,7 @@ vm.setClusterArch(instance.getClusterArch()); vm.setOriginalTemplateGuid(instance.getOriginalTemplateGuid()); vm.setOriginalTemplateName(instance.getOriginalTemplateName()); + vm.setMigrationDowntime(instance.getMigrationDowntime()); return vm; } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java index c91c92a..d80a5e1 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/pools/PoolListModel.java @@ -497,6 +497,7 @@ vm.setKernelParams(model.getKernel_parameters().getEntity()); vm.setInitrdUrl(model.getInitrd_path().getEntity()); vm.setMigrationSupport(model.getMigrationMode().getSelectedItem()); + vm.setMigrationDowntime(model.getSelectedMigrationDowntime()); vm.setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem()); EntityModel<DisplayType> displayProtocolSelectedItem = model.getDisplayProtocol().getSelectedItem(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java index 749fae5..ea239d9 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java @@ -461,6 +461,7 @@ template.setVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem()); template.setCreatedByUserId(selectedItem.getCreatedByUserId()); template.setSingleQxlPci(model.getIsSingleQxlEnabled().getEntity()); + template.setMigrationDowntime(model.getSelectedMigrationDowntime()); if (model.getQuota().getIsAvailable() && model.getQuota().getSelectedItem() != null) { template.setQuotaId(model.getQuota().getSelectedItem().getId()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java index d378755..de00a7a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/userportal/UserPortalListModel.java @@ -624,6 +624,7 @@ tempVar.setKernelUrl(vm.getKernelUrl()); tempVar.setKernelParams(vm.getKernelParams()); tempVar.setDefaultVncKeyboardLayout(vm.getDefaultVncKeyboardLayout()); + tempVar.setMigrationDowntime(vm.getMigrationDowntime()); VM newvm = tempVar; EntityModel<DisplayType> displayProtocolSelectedItem = model.getDisplayProtocol().getSelectedItem(); @@ -1069,6 +1070,7 @@ } gettempVm().setCpuPinning(model.getCpuPinning().getEntity()); + gettempVm().setMigrationDowntime(model.getSelectedMigrationDowntime()); VDS defaultHost = model.getDefaultHost().getSelectedItem(); if (model.getIsAutoAssign().getEntity()) diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java index ea081fe..7fb9da8 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java @@ -262,6 +262,8 @@ getModel().getCpuPinning().setEntity(vm.getCpuPinning()); initPriority(vm.getPriority()); + + getModel().setSelectedMigrationDowntime(vm.getMigrationDowntime()); } @Override diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java index 6a34ae9..5f020ed 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java @@ -240,6 +240,7 @@ getModel().getUsbPolicy().setSelectedItem(this.vm.getUsbPolicy()); getModel().getIsSmartcardEnabled().setEntity(this.vm.isSmartcardEnabled()); getModel().getVncKeyboardLayout().setSelectedItem(this.vm.getDefaultVncKeyboardLayout()); + getModel().setSelectedMigrationDowntime(this.vm.getMigrationDowntime()); initPriority(this.vm.getPriority()); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java index 1d5f39c..95d9719 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java @@ -110,6 +110,7 @@ getModel().getIsDeleteProtected().setEntity(template.isDeleteProtected()); getModel().selectSsoMethod(template.getSsoMethod()); + getModel().setSelectedMigrationDowntime(template.getMigrationDowntime()); getModel().getIsStateless().setEntity(template.isStateless()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java index bd6ed5b..0dea2c7 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java @@ -158,6 +158,7 @@ getModel().getUsbPolicy().setSelectedItem(vmBase.getUsbPolicy()); getModel().getVncKeyboardLayout().setSelectedItem(vmBase.getVncKeyboardLayout()); getModel().getIsSmartcardEnabled().setEntity(vmBase.isSmartcardEnabled()); + getModel().setSelectedMigrationDowntime(vmBase.getMigrationDowntime()); // By default, take kernel params from template. getModel().getKernel_path().setEntity(vmBase.getKernelUrl()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java index 03491e8..7c964b9 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java @@ -171,6 +171,7 @@ getModel().selectSsoMethod(this.template.getSsoMethod()); getModel().getIsSmartcardEnabled().setEntity(this.template.isSmartcardEnabled()); getModel().getVncKeyboardLayout().setSelectedItem(this.template.getVncKeyboardLayout()); + getModel().setSelectedMigrationDowntime(this.template.getMigrationDowntime()); getModel().getKernel_parameters().setEntity(this.template.getKernelParams()); getModel().getKernel_path().setEntity(this.template.getKernelUrl()); 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 eb516fa..e77e4ce 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 @@ -51,6 +51,7 @@ import org.ovirt.engine.ui.uicommonweb.validation.NoTrimmingWhitespacesValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyQuotaValidation; import org.ovirt.engine.ui.uicommonweb.validation.NotEmptyValidation; +import org.ovirt.engine.ui.uicommonweb.validation.NotNullIntegerValidation; import org.ovirt.engine.ui.uicommonweb.validation.PoolNameValidation; import org.ovirt.engine.ui.uicommonweb.validation.SpecialAsciiI18NOrNoneValidation; import org.ovirt.engine.ui.uicommonweb.validation.ValidationResult; @@ -989,6 +990,26 @@ migrationMode = value; } + private NotChangableForVmInPoolEntityModel<Boolean> overrideMigrationDowntime; + + public EntityModel<Boolean> getOverrideMigrationDowntime() { + return overrideMigrationDowntime; + } + + private void setOverrideMigrationDowntime(NotChangableForVmInPoolEntityModel<Boolean> value) { + overrideMigrationDowntime = value; + } + + private NotChangableForVmInPoolEntityModel<Integer> migrationDowntime; + + public EntityModel<Integer> getMigrationDowntime() { + return migrationDowntime; + } + + private void setMigrationDowntime(NotChangableForVmInPoolEntityModel<Integer> value) { + migrationDowntime = value; + } + private NotChangableForVmInPoolEntityModel<Boolean> privateIsTemplatePublic; public EntityModel<Boolean> getIsTemplatePublic() @@ -1276,6 +1297,12 @@ setMigrationMode(new NotChangableForVmInPoolListModel<MigrationSupport>()); getMigrationMode().getSelectedItemChangedEvent().addListener(this); + setOverrideMigrationDowntime(new NotChangableForVmInPoolEntityModel<Boolean>()); + getOverrideMigrationDowntime().getEntityChangedEvent().addListener(this); + + setMigrationDowntime(new NotChangableForVmInPoolEntityModel<Integer>()); + getMigrationDowntime().getEntityChangedEvent().addListener(this); + setHostCpu(new NotChangableForVmInPoolEntityModel<Boolean>()); getHostCpu().getEntityChangedEvent().addListener(this); @@ -1506,7 +1533,10 @@ WatchdogModel_EntityChanged(sender, args); } else if (sender == getIsHighlyAvailable()) { behavior.updateMigrationAvailability(); + } else if (sender == getOverrideMigrationDowntime()) { + overrideMigrationDowntimeChanged(); } + } } @@ -1546,25 +1576,23 @@ protected void initNumOfMonitors() { AsyncDataProvider.getNumOfMonitorList(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { - UnitVmModel model = (UnitVmModel) target; - Integer oldNumOfMonitors = null; - if (model.getNumOfMonitors().getSelectedItem() != null) - { - oldNumOfMonitors = model.getNumOfMonitors().getSelectedItem(); - } - ArrayList<Integer> numOfMonitors = (ArrayList<Integer>) returnValue; - model.getNumOfMonitors().setItems(numOfMonitors); - if (oldNumOfMonitors != null) - { - model.getNumOfMonitors().setSelectedItem(oldNumOfMonitors); - } + UnitVmModel model = (UnitVmModel) target; + Integer oldNumOfMonitors = null; + if (model.getNumOfMonitors().getSelectedItem() != null) { + oldNumOfMonitors = model.getNumOfMonitors().getSelectedItem(); + } + ArrayList<Integer> numOfMonitors = (ArrayList<Integer>) returnValue; + model.getNumOfMonitors().setItems(numOfMonitors); + if (oldNumOfMonitors != null) { + model.getNumOfMonitors().setSelectedItem(oldNumOfMonitors); + } - } - }, getHash())); + } + }, getHash())); } @@ -1622,29 +1650,29 @@ private void initMinimalVmMemSize() { AsyncDataProvider.getMinimalVmMemSize(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { - UnitVmModel vmModel = (UnitVmModel) target; - vmModel.set_MinMemSize((Integer) returnValue); + UnitVmModel vmModel = (UnitVmModel) target; + vmModel.set_MinMemSize((Integer) returnValue); - } - }, getHash())); + } + }, getHash())); } private void initMaximalVmMemSize32OS() { AsyncDataProvider.getMaximalVmMemSize32OS(new AsyncQuery(this, - new INewAsyncCallback() { - @Override - public void onSuccess(Object target, Object returnValue) { + new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { - UnitVmModel vmModel = (UnitVmModel) target; - vmModel.set_MaxMemSize32((Integer) returnValue); + UnitVmModel vmModel = (UnitVmModel) target; + vmModel.set_MaxMemSize32((Integer) returnValue); - } - }, getHash())); + } + }, getHash())); } private void updateMaximalVmMemSize() @@ -1833,7 +1861,7 @@ } }; AsyncDataProvider.getVmWatchdogTypes(osType, - cluster.getcompatibility_version(), asyncQuery); + cluster.getcompatibility_version(), asyncQuery); } } @@ -1879,6 +1907,11 @@ private void provisioning_SelectedItemChanged(Object sender, EventArgs args) { behavior.provisioning_SelectedItemChanged(); + } + + private void overrideMigrationDowntimeChanged() { + Boolean entity = getOverrideMigrationDowntime().getEntity(); + getMigrationDowntime().setIsChangable(Boolean.TRUE.equals(entity)); } private DisplayType getDisplayType() { @@ -2252,6 +2285,8 @@ getCdImage().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); } + getMigrationDowntime().validateEntity(new IValidation[] { new NotNullIntegerValidation(0, Integer.MAX_VALUE) }); + if (getIsLinuxOS()) { getKernel_path().validateEntity(new IValidation[] { new NoTrimmingWhitespacesValidation() }); getInitrd_path().validateEntity(new IValidation[] { new NoTrimmingWhitespacesValidation() }); @@ -2298,7 +2333,7 @@ setIsFirstRunTabValid(getDomain().getIsValid() && getTimeZone().getIsValid()); setIsDisplayTabValid(getUsbPolicy().getIsValid() && getNumOfMonitors().getIsValid() && getSpiceProxy().getIsValid()); - setIsHostTabValid(getDefaultHost().getIsValid()); + setIsHostTabValid(getDefaultHost().getIsValid() && getMigrationDowntime().getIsValid()); setIsAllocationTabValid(getDisksAllocationModel().getIsValid() && getMinAllocatedMemory().getIsValid() && getCpuSharesAmount().getIsValid()); setIsBootSequenceTabValid(getCdImage().getIsValid() && getKernel_path().getIsValid()); @@ -2314,7 +2349,8 @@ && getKernel_parameters().getIsValid() && getCpuSharesAmount().getIsValid() && behaviorValid - && customPropertySheetValid && getQuota().getIsValid(); + && customPropertySheetValid && getQuota().getIsValid() + && getMigrationDowntime().getIsValid(); } @@ -2547,4 +2583,17 @@ return value; } } + + public Integer getSelectedMigrationDowntime() { + if (Boolean.TRUE.equals(getOverrideMigrationDowntime().getEntity())) { + return getMigrationDowntime().getEntity(); + } else { + return null; + } + } + + public void setSelectedMigrationDowntime(Integer value) { + getOverrideMigrationDowntime().setEntity(value != null); + getMigrationDowntime().setEntity(value); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index ec6d5ca..38371b9 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -1326,6 +1326,7 @@ tempVar.setDedicatedVmForVds(vm.getDedicatedVmForVds()); tempVar.setMigrationSupport(vm.getMigrationSupport()); tempVar.setDefaultVncKeyboardLayout(vm.getDefaultVncKeyboardLayout()); + tempVar.setMigrationDowntime(vm.getMigrationDowntime()); VM newvm = tempVar; @@ -1938,6 +1939,7 @@ } getcurrentVm().setMigrationSupport(model.getMigrationMode().getSelectedItem()); + getcurrentVm().setMigrationDowntime(model.getSelectedMigrationDowntime()); getcurrentVm().setUseHostCpuFlags(model.getHostCpu().getEntity()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java index 789e9c4..b361a41 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmSnapshotListModel.java @@ -650,6 +650,8 @@ getcurrentVm().setDefaultVncKeyboardLayout(model.getVncKeyboardLayout().getSelectedItem()); + getcurrentVm().setMigrationDowntime(model.getSelectedMigrationDowntime()); + EntityModel<DisplayType> displayProtocolSelectedItem = model.getDisplayProtocol().getSelectedItem(); getcurrentVm().setDefaultDisplayType(displayProtocolSelectedItem.getEntity()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/IntegerValidation.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/IntegerValidation.java index 972a7c9..3b57776 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/IntegerValidation.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/IntegerValidation.java @@ -46,9 +46,9 @@ { ValidationResult result = new ValidationResult(); - if (value != null && value instanceof String && !((String) value).equals("")) //$NON-NLS-1$ + if (value != null && ((value instanceof String && !((String) value).equals("")) || value instanceof Integer)) //$NON-NLS-1$ { - Integer intValue = IntegerCompat.tryParse((String) value); + Integer intValue = value instanceof String ? IntegerCompat.tryParse((String) value) : (Integer) value; String msg = ""; //$NON-NLS-1$ String prefixMsg = ConstantsManager.getInstance().getConstants().thisFieldMustContainIntegerNumberInvalidReason(); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/NotNullIntegerValidation.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/NotNullIntegerValidation.java new file mode 100644 index 0000000..63ba2d0 --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/NotNullIntegerValidation.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.ui.uicommonweb.validation; + +import org.ovirt.engine.ui.uicompat.ConstantsManager; + +/** + * Validation for Integer value that cannot be null - for example to validate results of + * {@link org.ovirt.engine.ui.common.widget.parser.generic.ToIntEntityModelParser} + */ +public class NotNullIntegerValidation extends IntegerValidation { + public NotNullIntegerValidation() { + } + + public NotNullIntegerValidation(int min, int max) { + super(min, max); + } + + @Override + public ValidationResult validate(Object value) { + if (value == null) { + final String reason = ConstantsManager.getInstance().getConstants().thisFieldMustContainIntegerNumberInvalidReason(); + return ValidationResult.fail(reason); + } else { + return super.validate(value); + } + } +} diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/ValidationResult.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/ValidationResult.java index 570ec06..99ded31 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/ValidationResult.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/validation/ValidationResult.java @@ -1,6 +1,7 @@ package org.ovirt.engine.ui.uicommonweb.validation; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; @SuppressWarnings("unused") @@ -32,7 +33,19 @@ public ValidationResult() { - setSuccess(true); - setReasons(new ArrayList<String>()); + this(true, new ArrayList<String>()); + } + + public ValidationResult(boolean success, List<String> reasons) { + setSuccess(success); + setReasons(reasons); + } + + public static ValidationResult ok() { + return new ValidationResult(); + } + + public static ValidationResult fail(String... reasons) { + return new ValidationResult(false, Arrays.asList(reasons)); } } -- To view, visit http://gerrit.ovirt.org/23435 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib69d4f275561516f143ec8360e7b5b20644794fd Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Martin Betak <mbe...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches