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

Reply via email to