Martin Betak has uploaded a new change for review. Change subject: frontend: Add VM power-down options to new/edit VM dialog ......................................................................
frontend: Add VM power-down options to new/edit VM dialog Added VM power-down options: - isPowerDownForced - gracefulTimeout - userDelay Enabling user to configure the shutdown/reboot behavior of the VM. Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=751854 Change-Id: I2863263c3a872eb2da1b49ce2405712e174cacae Signed-off-by: Martin Betak <[email protected]> --- 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/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/builders/vm/CoreUnitToVmBaseBuilder.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/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/test/java/org/ovirt/engine/ui/uicommonweb/models/pools/BaseVmListModelTest.java 11 files changed, 244 insertions(+), 10 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/48/27048/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 556908a..aca1c15 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 @@ -1761,4 +1761,17 @@ "For Windows OS this should correspond to the time zone set in the guest (during installation or afterwards). " + "Most default Linux installations expect hardware clock to be GMT+00:00.") String timeZoneInfo(); + + @DefaultStringValue("Power-down policy") + String powerDownPolicyVmPopup(); + + @DefaultStringValue("Forced power-down fallback") + String forcePowerDownVmPopup(); + + @DefaultStringValue("Override default timeout") + String overrideGracefulTimeoutVmPopup(); + + @DefaultStringValue("Override default user delay") + String overrideUserDelayVmPopup(); + } 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 5f262f8..c6864d6 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 @@ -153,4 +153,10 @@ @DefaultMessage("Policy of assigning serial numbers to running VMs. Can be Host''s UUID, Vm''s UUID or any custom value.") String serialNumberInfo(); + + @DefaultMessage("Expected number of seconds required for graceful system shutdown. Default {0} seconds.") + String gracefulTimeoutInfo(int defaultGracefulTimeout); + + @DefaultMessage("Number of seconds to wait for user to save his work before powering down. Default {0} seconds.") + String userDelayInfo(int defaultUserDelay); } 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 54b40ce..b9c9561 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 @@ -24,6 +24,7 @@ import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.compat.StringFormat; import org.ovirt.engine.core.compat.StringHelper; +import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.CommonApplicationMessages; import org.ovirt.engine.ui.common.CommonApplicationResources; @@ -379,6 +380,40 @@ @UiField(provided = true) @Ignore public EntityModelWidgetWithInfo<String> timeZoneEditorWithInfo; + + @UiField + public FlowPanel powerDownPolicyPanel; + + @UiField(provided = true) + @Path(value = "isPowerdownForced.entity") + @WithElementId("isPowerdownForced") + public EntityModelCheckBoxEditor isPowerdownForcedEditor; + + @UiField(provided = true) + @Path("overrideGracefulTimeout.entity") + @WithElementId("overrideGracefulTimeout") + public EntityModelCheckBoxOnlyEditor overrideGracefulTimeoutEditor; + + @UiField(provided = true) + public InfoIcon gracefulTimeoutInfoIcon; + + @UiField + @Path(value = "gracefulTimeout.entity") + @WithElementId("gracefulTimeout") + public IntegerEntityModelTextBoxOnlyEditor gracefulTimeoutEditor; + + @UiField(provided = true) + @Path("overrideUserDelay.entity") + @WithElementId("overrideUserDelay") + public EntityModelCheckBoxOnlyEditor overrideUserDelayEditor; + + @UiField(provided = true) + public InfoIcon userDelayInfoIcon; + + @UiField + @Path(value = "userDelay.entity") + @WithElementId("userDelay") + public IntegerEntityModelTextBoxOnlyEditor userDelayEditor; // ==Initial run Tab== @UiField @@ -740,6 +775,17 @@ nonEditableWhileVmNotDownInfo = new InfoIcon(applicationTemplates.italicText(constants.nonEditableMigrationFieldsWhileVmNotDownInfo()), resources); + + isPowerdownForcedEditor = new EntityModelCheckBoxEditor(Align.RIGHT, new ModeSwitchingVisibilityRenderer()); + + final int defaultGracefulTimeout = (Integer) AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.VmGracefulShutdownTimeout); + gracefulTimeoutInfoIcon = new InfoIcon(applicationTemplates.italicText(messages.gracefulTimeoutInfo(defaultGracefulTimeout)), resources); + overrideGracefulTimeoutEditor = new EntityModelCheckBoxOnlyEditor(new ModeSwitchingVisibilityRenderer(), false); + + final int defaultUserDelay = (Integer) AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.VmGracefulShutdownUserDelay); + userDelayInfoIcon = new InfoIcon(applicationTemplates.italicText(messages.userDelayInfo(defaultUserDelay)), resources); + overrideUserDelayEditor = new EntityModelCheckBoxOnlyEditor(new ModeSwitchingVisibilityRenderer(), false); + final Integer defaultMaximumMigrationDowntime = (Integer) AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.DefaultMaximumMigrationDowntime); migrationDowntimeInfoIcon = new InfoIcon(applicationTemplates.italicText(messages.migrationDowntimeInfo(defaultMaximumMigrationDowntime)), resources); priorityEditor = new EntityModelCellTable<ListModel>( @@ -1136,6 +1182,9 @@ watchdogActionEditor.setLabel(constants.watchdogAction()); watchdogModelEditor.setLabel(constants.watchdogModel()); + // power-down policy + isPowerdownForcedEditor.setLabel(constants.forcePowerDownVmPopup()); + // Resource Allocation Tab provisioningEditor.setLabel(constants.templateProvisVmPopup()); provisioningThinEditor.setLabel(constants.thinVmPopup()); @@ -1319,6 +1368,24 @@ } } }); + + object.getDataCenterWithClustersList().getPropertyChangedEvent().addListener(new IEventListener() { + @Override + public void eventRaised(Event ev, Object sender, EventArgs args) { + updatePowerDownPolicyPanelVisibility(object); + } + }); + } + + private void updatePowerDownPolicyPanelVisibility(UnitVmModel object) { + VDSGroup vdsGroup = object.getSelectedCluster(); + if (vdsGroup != null && vdsGroup.getcompatibility_version() != null) { + final Version version = vdsGroup.getcompatibility_version(); + final boolean supported = (Boolean) AsyncDataProvider.getConfigValuePreConverted(ConfigurationValues.PowerDownOptionsSupported, version.getValue()); + changeApplicationLevelVisibility(powerDownPolicyPanel, supported); + } else { + changeApplicationLevelVisibility(powerDownPolicyPanel, false); + } } /** @@ -1596,6 +1663,12 @@ watchdogModelEditor.setTabIndex(nextTabIndex++); watchdogActionEditor.setTabIndex(nextTabIndex++); + isPowerdownForcedEditor.setTabIndex(nextTabIndex++); + overrideGracefulTimeoutEditor.setTabIndex(nextTabIndex++); + gracefulTimeoutEditor.setTabIndex(nextTabIndex++); + overrideUserDelayEditor.setTabIndex(nextTabIndex++); + userDelayEditor.setTabIndex(nextTabIndex++); + // ==Resource Allocation Tab== nextTabIndex = resourceAllocationTab.setTabIndexes(nextTabIndex); minAllocatedMemoryEditor.setTabIndex(nextTabIndex++); 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 1c8fb39..0da79c14 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 @@ -51,31 +51,39 @@ line-height: 30px; } - .overrideMigrationDowntime { + .overrideEditorCheckBox { display: inline; float: left; width: 20px; } - .overrideMigrationDowntime div { + .overrideEditorCheckBox div { width: 20px; } - .migrationDowntimeLabel { + .overrideEditorLabel { display: inline-block; float: left; max-width: 200px; + line-height: 30px; } - .migrationDowntimeInfoIcon { + .overrideEditorInfoIcon { display: inline; float: left; } - .migrationDowntime { + .overrideEditor, .migrationDowntime { display: inline; float: right; + } + + .migrationDowntime { padding-right: 9px; + } + + .overrideEditorPanel { + clear: both; } <!-- turns off the original styles --> @@ -453,7 +461,25 @@ <g:Label addStyleNames="{style.sectionLabel}" text="{constants.initialRunGeneral}" /> <w:EntityModelWidgetWithInfo ui:field="timeZoneEditorWithInfo" /> <vm:SerialNumberPolicyWidget ui:field="serialNumberPolicyEditor" /> - </g:FlowPanel> + <g:FlowPanel addStyleNames="{style.sectionPanel}" ui:field="powerDownPolicyPanel"> + <g:Label addStyleNames="{style.sectionLabel}" text="{constants.powerDownPolicyVmPopup}" /> + <ge:EntityModelCheckBoxEditor ui:field="isPowerdownForcedEditor" addStyleNames="{style.checkbox}" /> + + <g:FlowPanel> + <ge:EntityModelCheckBoxOnlyEditor ui:field="overrideGracefulTimeoutEditor" addStyleNames="{style.overrideEditorCheckBox}" /> + <g:Label text="{constants.overrideGracefulTimeoutVmPopup}" addStyleNames="{style.overrideEditorLabel}" /> + <d:InfoIcon ui:field="gracefulTimeoutInfoIcon" addStyleNames="{style.overrideEditorInfoIcon}" /> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="gracefulTimeoutEditor" addStyleNames="{style.overrideEditor}" /> + </g:FlowPanel> + + <g:FlowPanel addStyleNames="{style.overrideEditorPanel}"> + <ge:EntityModelCheckBoxOnlyEditor ui:field="overrideUserDelayEditor" addStyleNames="{style.overrideEditorCheckBox}" /> + <g:Label text="{constants.overrideUserDelayVmPopup}" addStyleNames="{style.overrideEditorLabel}" /> + <d:InfoIcon ui:field="userDelayInfoIcon" addStyleNames="{style.overrideEditorInfoIcon}" /> + <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="userDelayEditor" addStyleNames="{style.overrideEditor}" /> + </g:FlowPanel> + </g:FlowPanel> + </g:FlowPanel> </t:content> </t:DialogTab> </t:tab> @@ -533,9 +559,9 @@ <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:EntityModelCheckBoxOnlyEditor ui:field="overrideMigrationDowntimeEditor" addStyleNames="{style.overrideEditorCheckBox}" /> + <g:Label text="{constants.overrideMigrationDowntimeLabel}" addStyleNames="{style.overrideEditorLabel}" /> + <d:InfoIcon ui:field="migrationDowntimeInfoIcon" addStyleNames="{style.overrideEditorInfoIcon}" /> <ge:IntegerEntityModelTextBoxOnlyEditor ui:field="migrationDowntimeEditor" addStyleNames="{style.migrationDowntime}" /> </g:FlowPanel> </g:VerticalPanel> diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java index 7fca6ef..5b5cd79 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreUnitToVmBaseBuilder.java @@ -36,5 +36,8 @@ vm.setSerialNumberPolicy(model.getSerialNumberPolicy().getSelectedSerialNumberPolicy()); vm.setCustomSerialNumber(model.getSerialNumberPolicy().getCustomSerialNumber().getEntity()); vm.setBootMenuEnabled(model.getBootMenuEnabled().getEntity()); + vm.setPowerDownForced(model.getIsPowerdownForced().getEntity()); + vm.setGracefulTimeout(model.getSelectedGracefulTimeout()); + vm.setUserDelay(model.getSelectedUserDelay()); } } 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 1622980..f758d84 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 @@ -296,6 +296,9 @@ BuilderExecutor.build(vm.getStaticData(), getModel(), new SerialNumberPolicyVmBaseToUnitBuilder()); getModel().getBootMenuEnabled().setEntity(vm.isBootMenuEnabled()); + getModel().getIsPowerdownForced().setEntity(vm.isPowerDownForced()); + getModel().setSelectedGracefulTimeout(vm.getGracefulTimeout()); + getModel().setSelectedUserDelay(vm.getUserDelay()); } private int calculateHostCpus() { 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 407fa04..afc3d1e 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 @@ -346,6 +346,9 @@ BuilderExecutor.build(vm.getStaticData(), getModel(), new SerialNumberPolicyVmBaseToUnitBuilder()); getModel().getBootMenuEnabled().setEntity(vm.isBootMenuEnabled()); + getModel().getIsPowerdownForced().setEntity(vm.isPowerDownForced()); + getModel().setSelectedGracefulTimeout(vm.getGracefulTimeout()); + getModel().setSelectedUserDelay(vm.getUserDelay()); } @Override 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 2f0cc6d..300f1d4 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 @@ -186,6 +186,9 @@ BuilderExecutor.build(template, getModel(), new SerialNumberPolicyVmBaseToUnitBuilder()); getModel().getBootMenuEnabled().setEntity(template.isBootMenuEnabled()); + getModel().getIsPowerdownForced().setEntity(template.isPowerDownForced()); + getModel().setSelectedGracefulTimeout(template.getGracefulTimeout()); + getModel().setSelectedUserDelay(template.getUserDelay()); } } 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 1a81923..767e621 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 @@ -221,6 +221,10 @@ initPriority(template.getPriority()); BuilderExecutor.build(template, getModel(), new SerialNumberPolicyVmBaseToUnitBuilder()); + + getModel().getIsPowerdownForced().setEntity(template.isPowerDownForced()); + getModel().setSelectedGracefulTimeout(template.getGracefulTimeout()); + getModel().setSelectedUserDelay(template.getUserDelay()); } private void initCdImage() 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 7aff0d8..b22502b 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 @@ -1252,6 +1252,56 @@ this.bootMenuEnabled = bootMenuEnabled; } + private NotChangableForVmInPoolEntityModel<Boolean> isPowerdownForced; + + public EntityModel<Boolean> getIsPowerdownForced() { + return isPowerdownForced; + } + + private void setIsPowerdownForced(NotChangableForVmInPoolEntityModel<Boolean> value) { + isPowerdownForced = value; + } + + private NotChangableForVmInPoolEntityModel<Boolean> overrideGracefulTimeout; + + public EntityModel<Boolean> getOverrideGracefulTimeout() { + return overrideGracefulTimeout; + } + + private void setOverrideGracefulTimeout(NotChangableForVmInPoolEntityModel<Boolean> value) { + overrideGracefulTimeout = value; + } + + private NotChangableForVmInPoolEntityModel<Integer> gracefulTimeout; + + public EntityModel<Integer> getGracefulTimeout() { + return gracefulTimeout; + } + + private void setGracefulTimeout(NotChangableForVmInPoolEntityModel<Integer> value) { + gracefulTimeout = value; + } + + private NotChangableForVmInPoolEntityModel<Boolean> overrideUserDelay; + + public EntityModel<Boolean> getOverrideUserDelay() { + return overrideUserDelay; + } + + private void setOverrideUserDelay(NotChangableForVmInPoolEntityModel<Boolean> value) { + overrideUserDelay = value; + } + + private NotChangableForVmInPoolEntityModel<Integer> userDelay; + + public EntityModel<Integer> getUserDelay() { + return userDelay; + } + + private void setUserDelay(NotChangableForVmInPoolEntityModel<Integer> value) { + userDelay = value; + } + public UnitVmModel(VmModelBehaviorBase behavior) { Frontend.getInstance().getQueryStartedEvent().addListener(this); Frontend.getInstance().getQueryCompleteEvent().addListener(this); @@ -1495,6 +1545,14 @@ setEditingEnabled(new EntityModel<Boolean>()); getEditingEnabled().setEntity(true); + + setIsPowerdownForced(new NotChangableForVmInPoolEntityModel<Boolean>()); + setOverrideGracefulTimeout(new NotChangableForVmInPoolEntityModel<Boolean>()); + getOverrideGracefulTimeout().getEntityChangedEvent().addListener(this); + setGracefulTimeout(new NotChangableForVmInPoolEntityModel<Integer>()); + setOverrideUserDelay(new NotChangableForVmInPoolEntityModel<Boolean>()); + getOverrideUserDelay().getEntityChangedEvent().addListener(this); + setUserDelay(new NotChangableForVmInPoolEntityModel<Integer>()); } public void initialize(SystemTreeItemModel SystemTreeSelectedItem) @@ -1647,6 +1705,12 @@ } else if (sender == getIsSubTemplate()) { behavior.isSubTemplateEntityChanged(); + } else if (sender == getOverrideGracefulTimeout()) { + Boolean entity = getOverrideGracefulTimeout().getEntity(); + getGracefulTimeout().setIsChangable(entity == null || entity); + } else if (sender == getOverrideUserDelay()) { + Boolean entity = getOverrideUserDelay().getEntity(); + getUserDelay().setIsChangable(entity == null || entity); } } @@ -2374,6 +2438,9 @@ getMigrationDowntime().validateEntity(new IValidation[] { new NotNullIntegerValidation(0, Integer.MAX_VALUE) }); + getGracefulTimeout().validateEntity(new IValidation[] { new NotNullIntegerValidation(0, Integer.MAX_VALUE) }); + getUserDelay().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() }); @@ -2434,7 +2501,9 @@ setIsSystemTabValid(getMemSize().getIsValid() && getTotalCPUCores().getIsValid() && - getSerialNumberPolicy().getCustomSerialNumber().getIsValid()); + getSerialNumberPolicy().getCustomSerialNumber().getIsValid() && + getGracefulTimeout().getIsValid() && + getUserDelay().getIsValid()); boolean vmInitIsValid = getVmInitModel().validate(); @@ -2704,4 +2773,30 @@ getOverrideMigrationDowntime().setEntity(value != null); getMigrationDowntime().setEntity(value); } + + public Integer getSelectedGracefulTimeout() { + if (Boolean.TRUE.equals(getOverrideGracefulTimeout().getEntity())) { + return getGracefulTimeout().getEntity(); + } else { + return null; + } + } + + public void setSelectedGracefulTimeout(Integer value) { + getOverrideGracefulTimeout().setEntity(value != null); + getGracefulTimeout().setEntity(value); + } + + public Integer getSelectedUserDelay() { + if (Boolean.TRUE.equals(getOverrideUserDelay().getEntity())) { + return getUserDelay().getEntity(); + } else { + return null; + } + } + + public void setSelectedUserDelay(Integer value) { + getOverrideUserDelay().setEntity(value != null); + getUserDelay().setEntity(value); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/pools/BaseVmListModelTest.java b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/pools/BaseVmListModelTest.java index 429cea6..412dcab 100644 --- a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/pools/BaseVmListModelTest.java +++ b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/pools/BaseVmListModelTest.java @@ -64,6 +64,8 @@ protected static final Integer MIGRATION_DOWNTIME_2 = 750; protected static final SerialNumberPolicy SERIAL_NUMBER_POLICY = SerialNumberPolicy.CUSTOM; protected static final String CUSTOM_SERIAL_NUMBER = "my custom number"; //$NON-NLS-1$ + protected static final int GRACEFUL_TIMEOUT = 42; + protected static final int USER_DELAY = 90; protected void setUpUnitVmModelExpectations(UnitVmModel model) { when(model.getVmType().getSelectedItem()).thenReturn(VM_TYPE); @@ -114,6 +116,9 @@ when(model.getMigrationMode().getSelectedItem()).thenReturn(MIGRATION_SUPPORT); when(model.getSelectedMigrationDowntime()).thenReturn(MIGRATION_DOWNTIME); when(model.getBootMenuEnabled().getEntity()).thenReturn(true); + when(model.getIsPowerdownForced().getEntity()).thenReturn(true); + when(model.getSelectedGracefulTimeout()).thenReturn(GRACEFUL_TIMEOUT); + when(model.getSelectedUserDelay()).thenReturn(USER_DELAY); } protected void setUpOrigVm(VM origVm) { -- To view, visit http://gerrit.ovirt.org/27048 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I2863263c3a872eb2da1b49ce2405712e174cacae Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Martin Betak <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
