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

Reply via email to