Tomas Jelinek has uploaded a new change for review.

Change subject: frontend: made the blan template editable
......................................................................

frontend: made the blan template editable

Feature Page: www.ovirt.org/Features/Blank_to_Defaults

Bug-Url: https://bugzilla.redhat.com/1130174

Change-Id: I400401b8e110b4cd10404f6df7c8f8ea4cd56093
Signed-off-by: Tomas Jelinek <[email protected]>
---
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/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java
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/builders/vm/CoreVmBaseToUnitBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.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/vms/NewVmModelBehavior.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/VmModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java
R 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java
M 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java
M 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java
M 
frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java
21 files changed, 372 insertions(+), 158 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/05/37905/1

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 40d907d..5f2a013 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
@@ -811,6 +811,9 @@
     @WithElementId("cdAttached")
     public EntityModelCheckBoxEditor cdAttachedEditor;
 
+    @UiField
+    public HorizontalPanel attachCdPanel;
+
     @UiField(provided = true)
     @Path("bootMenuEnabled.entity")
     @WithElementId("bootMenuEnabled")
@@ -964,8 +967,6 @@
         applyStyles();
 
         localize(constants);
-
-        super.initializeModeSwitching(generalTab);
 
         generateIds();
 
@@ -1522,6 +1523,8 @@
     public void edit(UnitVmModel model) {
         super.edit(model);
         unitVmModel = model;
+
+        super.initializeModeSwitching(generalTab);
 
         priorityEditor.setRowData(new ArrayList<EntityModel>());
         priorityEditor.asEditor().edit(model.getPriority());
@@ -2234,4 +2237,8 @@
     public UiCommandButton getNumaSupportButton() {
         return numaSupportButton;
     }
+
+    public UnitVmModel getModel() {
+        return unitVmModel;
+    }
 }
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 c6c8901..87b1c80 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
@@ -740,7 +740,7 @@
                             <g:Label addStyleNames="{style.sectionLabel}" 
text="{constants.bootSequenceVmPopup}" />
                             <e:ListModelListBoxEditor 
ui:field="firstBootDeviceEditor" />
                             <e:ListModelListBoxEditor 
ui:field="secondBootDeviceEditor" />
-                            <g:HorizontalPanel 
addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE">
+                            <g:HorizontalPanel ui:field="attachCdPanel" 
addStyleNames="{style.attachCdPanel}" verticalAlignment="ALIGN_MIDDLE">
                                 <ge:EntityModelCheckBoxEditor 
label="{constants.attachCdVmPopup}" ui:field="cdAttachedEditor" />
                                 <e:ListModelListBoxEditor 
ui:field="cdImageEditor" addStyleNames="avmpw_cdImageEditor_pfly_fix" />
                                 <g:PushButton ui:field="refreshButton" 
addStyleNames="{style.refreshButton} avmpw_refreshButton_pfly_fix">
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java
index 52f2890..0d4783a 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/template/TemplateEditPopupWidget.java
@@ -16,6 +16,7 @@
 import com.google.gwt.core.client.GWT;
 import com.google.gwt.event.shared.EventBus;
 import com.google.gwt.user.client.ui.Widget;
+import org.ovirt.engine.ui.uicommonweb.models.templates.BlankTemplateModel;
 
 public class TemplateEditPopupWidget extends AbstractVmPopupWidget {
 
@@ -38,12 +39,21 @@
 
     @Override
     protected PopupWidgetConfigMap createWidgetConfiguration() {
-        return super.createWidgetConfiguration().
+        PopupWidgetConfigMap popupWidgetConfigMap = 
super.createWidgetConfiguration().
                 putOne(logicalNetworksEditorPanel, hiddenField()).
                 putAll(poolSpecificFields(), hiddenField()).
                 putOne(instanceTypesEditor, hiddenField()).
                 putOne(templateWithVersionEditor, hiddenField()).
                 putAll(resourceAllocationTemplateHiddenFields(), 
hiddenField());
+
+        if (getModel() instanceof BlankTemplateModel) {
+            popupWidgetConfigMap = popupWidgetConfigMap.
+                putOne(dataCenterWithClusterEditor, hiddenField()).
+                putOne(startRunningOnPanel, hiddenField()).
+                putOne(attachCdPanel, hiddenField());
+        }
+
+        return popupWidgetConfigMap;
     }
 
     protected List<Widget> resourceAllocationTemplateHiddenFields() {
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 a08a737..34a86cf 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
@@ -20,7 +20,7 @@
         super.build(model, vm);
         
vm.setAllowConsoleReconnect(model.getAllowConsoleReconnect().getEntity());
         vm.setVmType(model.getVmType().getSelectedItem());
-        vm.setVdsGroupId(model.getSelectedCluster().getId());
+        vm.setVdsGroupId(model.getSelectedCluster() != null ? 
model.getSelectedCluster().getId() : null);
         vm.setTimeZone(model.getTimeZone().getIsAvailable() && 
model.getTimeZone().getSelectedItem() != null ? model.getTimeZone()
                 .getSelectedItem().getTimeZoneKey() : ""); //$NON-NLS-1$
         vm.setIsoPath(model.getCdImage().getIsChangable() ? 
model.getCdImage().getSelectedItem() : ""); //$NON-NLS-1$
@@ -36,4 +36,6 @@
         
vm.setMigrateCompressed(model.getMigrateCompressed().getSelectedItem());
         vm.setCustomProperties(model.getCustomPropertySheet().serialize());
     }
+
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java
index 8410bd8..bffe2d0 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/CoreVmBaseToUnitBuilder.java
@@ -1,7 +1,9 @@
 package org.ovirt.engine.ui.uicommonweb.builders.vm;
 
 import org.ovirt.engine.core.common.businessentities.VmBase;
+import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.ui.uicommonweb.builders.CompositeBuilder;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 
 public class CoreVmBaseToUnitBuilder extends CompositeBuilder<VmBase, 
UnitVmModel> {
@@ -14,13 +16,37 @@
 
     @Override
     protected void postBuild(VmBase vm, UnitVmModel model) {
-        model.getBootMenuEnabled().setEntity(vm.isBootMenuEnabled());
+        if (supported(ConfigurationValues.BootMenuSupported, model)) {
+            model.getBootMenuEnabled().setEntity(vm.isBootMenuEnabled());
+        }
+
         
model.getVncKeyboardLayout().setSelectedItem(vm.getVncKeyboardLayout());
         model.getIsDeleteProtected().setEntity(vm.isDeleteProtected());
         model.selectSsoMethod(vm.getSsoMethod());
-        
model.getSpiceFileTransferEnabled().setEntity(vm.isSpiceFileTransferEnabled());
-        
model.getSpiceCopyPasteEnabled().setEntity(vm.isSpiceCopyPasteEnabled());
-        model.getAutoConverge().setSelectedItem(vm.getAutoConverge());
-        
model.getMigrateCompressed().setSelectedItem(vm.getMigrateCompressed());
+
+        if (supported(ConfigurationValues.SpiceFileTransferToggleSupported, 
model)) {
+            
model.getSpiceFileTransferEnabled().setEntity(vm.isSpiceFileTransferEnabled());
+        }
+
+        if (supported(ConfigurationValues.SpiceCopyPasteToggleSupported, 
model)) {
+            
model.getSpiceCopyPasteEnabled().setEntity(vm.isSpiceCopyPasteEnabled());
+        }
+
+        if (supported(ConfigurationValues.AutoConvergenceSupported, model)) {
+            model.getAutoConverge().setSelectedItem(vm.getAutoConverge());
+        }
+
+        if (supported(ConfigurationValues.MigrationCompressionSupported, 
model)) {
+            
model.getMigrateCompressed().setSelectedItem(vm.getMigrateCompressed());
+        }
+    }
+
+    protected boolean supported(ConfigurationValues feature, UnitVmModel 
model) {
+        if (model.getSelectedCluster() == null || 
model.getSelectedCluster().getCompatibilityVersion() == null) {
+            return false;
+        }
+
+        String version = 
model.getSelectedCluster().getCompatibilityVersion().getValue();
+        return (Boolean) 
AsyncDataProvider.getInstance().getConfigValuePreConverted(feature, version);
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java
index 3c59c93..f767a6b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/vm/SerialNumberPolicyVmBaseToUnitBuilder.java
@@ -2,11 +2,21 @@
 
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 
 public class SerialNumberPolicyVmBaseToUnitBuilder extends 
BaseSyncBuilder<VmBase, UnitVmModel> {
     @Override
     protected void build(VmBase vm, UnitVmModel model) {
+        if (model.getSelectedCluster() == null || 
model.getSelectedCluster().getCompatibilityVersion() == null) {
+            return;
+        }
+
+        String version = 
model.getSelectedCluster().getCompatibilityVersion().getValue();
+        boolean enabled = 
AsyncDataProvider.getInstance().isSerialNumberPolicySupported(version);
+        if (!enabled) {
+            return;
+        }
         
model.getSerialNumberPolicy().setSelectedSerialNumberPolicy(vm.getSerialNumberPolicy());
         
model.getSerialNumberPolicy().getCustomSerialNumber().setEntity(vm.getCustomSerialNumber());
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
index c1a9415..d340853 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/configure/instancetypes/InstanceTypeListModel.java
@@ -44,7 +44,7 @@
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModelNetworkAsyncCallback;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.VmBasedWidgetSwitchModeCommand;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase;
-import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingInstanceTypeModelBehavior;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingNonClusterModelBehavior;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeInterfaceCreatingManager;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.NewInstanceTypeModelBehavior;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
@@ -117,7 +117,7 @@
 
     private void editInstanceType() {
         createWindow(
-                new ExistingInstanceTypeModelBehavior((InstanceType) 
getSelectedItem()),
+                new ExistingNonClusterModelBehavior((VmTemplate) 
getSelectedItem()),
                 "edit_instance_type", //$NON-NLS-1$
                 "OnEditInstanceType", //$NON-NLS-1$
                 false,
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java
new file mode 100644
index 0000000..65507c3
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/BlankTemplateModel.java
@@ -0,0 +1,20 @@
+package org.ovirt.engine.ui.uicommonweb.models.templates;
+
+import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase;
+
+public class BlankTemplateModel extends UnitVmModel {
+
+    public BlankTemplateModel(VmModelBehaviorBase behavior) {
+        super(behavior);
+    }
+
+    @Override
+    protected void doDisplayTypeChanged() {
+        // typically the Other OS
+        Integer osType = getOSType().getSelectedItem();
+
+        displayTypeSelectedItemChanged(osType, Version.getLast());
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java
new file mode 100644
index 0000000..9c40e86
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/ExistingBlankTemplateModelBehavior.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.ui.uicommonweb.models.templates;
+
+import org.ovirt.engine.core.common.businessentities.VmBase;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.compat.Version;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
+import org.ovirt.engine.ui.uicommonweb.builders.vm.CommentVmBaseToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.builders.vm.CommonVmBaseToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.ExistingNonClusterModelBehavior;
+
+public class ExistingBlankTemplateModelBehavior extends 
ExistingNonClusterModelBehavior {
+
+    private VmTemplate template;
+
+    public ExistingBlankTemplateModelBehavior(VmTemplate template) {
+        super(template);
+        this.template = template;
+    }
+
+    @Override
+    public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
+        super.initialize(systemTreeSelectedItem);
+
+        getModel().getBaseTemplate().setIsAvailable(false);
+        getModel().getTemplateVersionName().setIsAvailable(false);
+        getModel().getVmType().setIsChangable(true);
+        getModel().getEmulatedMachine().setIsAvailable(false);
+        getModel().getCustomCpu().setIsAvailable(false);
+        getModel().getOSType().setIsAvailable(false);
+        updateCustomPropertySheet(latestCluster());
+        
getModel().getCustomPropertySheet().deserialize(template.getCustomProperties());
+        updateTimeZone(template.getTimeZone());
+        getModel().getVmInitEnabled().setEntity(template.getVmInit() != null);
+        getModel().getVmInitModel().init(template);
+    }
+
+    @Override
+    protected Version getClusterCompatibilityVersion() {
+        return latestCluster();
+    }
+
+    @Override
+    protected void buildModel(VmBase vm) {
+        BuilderExecutor.build(vm, getModel(),
+                new NameAndDescriptionVmBaseToUnitBuilder(),
+                new CommentVmBaseToUnitBuilder(),
+                new CommonVmBaseToUnitBuilder());
+    }
+
+    public VmTemplate getVmTemplate() {
+        return template;
+    }
+}
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 851f913..b5b53c5 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
@@ -47,6 +47,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.vms.TemplateVmModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.VmBasedWidgetSwitchModeCommand;
+import org.ovirt.engine.ui.uicommonweb.models.vms.VmModelBehaviorBase;
 import org.ovirt.engine.ui.uicommonweb.place.WebAdminApplicationPlaces;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult;
@@ -466,7 +467,7 @@
     }
 
     private void vmInitLoaded(VmTemplate template) {
-        UnitVmModel model = new UnitVmModel(createBehavior(template));
+        UnitVmModel model = createModel(createBehavior(template));
         
model.setIsAdvancedModeLocalStorageKey(getEditTemplateAdvancedModelKey());
         setWindow(model);
         
model.setTitle(ConstantsManager.getInstance().getConstants().editTemplateTitle());
@@ -493,8 +494,20 @@
         return "wa_template_dialog"; //$NON-NLS-1$
     }
 
-    protected TemplateVmModelBehavior createBehavior(VmTemplate template) {
-        return new TemplateVmModelBehavior(template);
+    private UnitVmModel createModel(VmModelBehaviorBase behavior) {
+        if (behavior instanceof ExistingBlankTemplateModelBehavior) {
+            return new BlankTemplateModel(behavior);
+        }
+
+        return new UnitVmModel(behavior);
+    }
+
+    protected VmModelBehaviorBase createBehavior(VmTemplate template) {
+        if (!template.isBlank()) {
+            return new TemplateVmModelBehavior(template);
+        }
+
+        return new ExistingBlankTemplateModelBehavior(template);
     }
 
     private void remove()
@@ -570,8 +583,15 @@
 
         String name = model.getName().getEntity();
 
-        if (((TemplateVmModelBehavior) 
model.getBehavior()).getVmTemplate().isBaseTemplate()) {
+        boolean isBaseTemplate = false;
 
+        if (model.getBehavior() instanceof TemplateVmModelBehavior) {
+            isBaseTemplate = ((TemplateVmModelBehavior) 
model.getBehavior()).getVmTemplate().isBaseTemplate();
+        } else if (model.getBehavior() instanceof 
ExistingBlankTemplateModelBehavior) {
+            isBaseTemplate = true;
+        }
+
+        if (isBaseTemplate) {
             AsyncDataProvider.getInstance().isTemplateNameUnique(new 
AsyncQuery(this,
                     new INewAsyncCallback() {
                         @Override
@@ -597,7 +617,14 @@
             return;
         }
 
-        VmTemplate selectedItem = ((TemplateVmModelBehavior) 
model.getBehavior()).getVmTemplate();
+
+        VmTemplate selectedItem;
+        if (model.getBehavior() instanceof TemplateVmModelBehavior) {
+            selectedItem = ((TemplateVmModelBehavior) 
model.getBehavior()).getVmTemplate();
+        } else {
+            selectedItem = ((ExistingBlankTemplateModelBehavior) 
model.getBehavior()).getVmTemplate();
+        }
+
         final VmTemplate template = (VmTemplate) Cloner.clone(selectedItem);
 
         String name = model.getName().getEntity();
@@ -739,13 +766,6 @@
 
         getEditCommand().setIsExecutionAllowed(items.size() == 1 && item != 
null
                 && item.getStatus() != VmTemplateStatus.Locked);
-        if (getEditCommand().getIsExecutionAllowed() && blankSelected)
-        {
-            
getEditCommand().getExecuteProhibitionReasons().add(ConstantsManager.getInstance()
-                    .getConstants()
-                    .blankTemplateCannotBeEdited());
-            getEditCommand().setIsExecutionAllowed(false);
-        }
 
         getRemoveCommand().setIsExecutionAllowed(items.size() > 0
                 && VdcActionUtils.canExecute(items, VmTemplate.class, 
VdcActionType.RemoveVmTemplate));
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 23a75f7..5423227 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
@@ -99,6 +99,7 @@
         doChangeDefautlHost(template.getDedicatedVmForVds());
 
         getModel().getIsStateless().setEntity(template.isStateless());
+        getModel().getIsRunAndPause().setEntity(template.isRunAndPause());
 
         boolean hasCd = !StringHelper.isNullOrEmpty(template.getIsoPath());
 
@@ -115,11 +116,8 @@
             getModel().getStorageDomain().setIsChangable(true);
             getModel().getProvisioning().setIsChangable(true);
 
-            getModel().getVmType().setSelectedItem(template.getVmType());
             getModel().getCopyPermissions().setIsAvailable(true);
-            
getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect());
             initDisks();
-            updateRngDevice(template.getId());
         }
         else
         {
@@ -131,6 +129,10 @@
             getModel().setDisks(null);
         }
 
+        
getModel().getAllowConsoleReconnect().setEntity(template.isAllowConsoleReconnect());
+        getModel().getVmType().setSelectedItem(template.getVmType());
+        updateRngDevice(template.getId());
+
         initStorageDomains();
 
         InstanceType selectedInstanceType = 
getModel().getInstanceTypes().getSelectedItem();
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 d1cef78..2ebc350 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
@@ -60,6 +60,7 @@
 import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.NumaSupportModel;
 import org.ovirt.engine.ui.uicommonweb.models.hosts.numa.VmNumaSupportModel;
 import org.ovirt.engine.ui.uicommonweb.models.storage.DisksAllocationModel;
+import 
org.ovirt.engine.ui.uicommonweb.models.templates.ExistingBlankTemplateModelBehavior;
 import org.ovirt.engine.ui.uicommonweb.models.templates.TemplateWithVersion;
 import 
org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes.InstanceTypeManager;
 import org.ovirt.engine.ui.uicommonweb.models.vms.key_value.KeyValueModel;
@@ -2313,6 +2314,10 @@
             return;
         }
 
+        doDisplayTypeChanged();
+    }
+
+    protected void doDisplayTypeChanged() {
         VDSGroup cluster = getSelectedCluster();
         Integer osType = getOSType().getSelectedItem();
 
@@ -2320,8 +2325,13 @@
             return;
         }
 
+        displayTypeSelectedItemChanged(osType, 
cluster.getCompatibilityVersion());
+    }
+
+    protected void displayTypeSelectedItemChanged(int osType, Version 
compatibilityVersion) {
         Set<GraphicsTypes> graphicsTypes = new LinkedHashSet<>();
-        List<Pair<GraphicsType, DisplayType>> graphicsAndDisplays = 
AsyncDataProvider.getInstance().getGraphicsAndDisplays(osType, 
cluster.getCompatibilityVersion());
+        List<Pair<GraphicsType, DisplayType>> graphicsAndDisplays = 
AsyncDataProvider.getInstance().getGraphicsAndDisplays(osType, 
compatibilityVersion);
+
         for (Pair<GraphicsType, DisplayType> graphicsAndDisplay : 
graphicsAndDisplays) {
             if (graphicsAndDisplay.getSecond() == 
getDisplayType().getSelectedItem()) {
                 
graphicsTypes.add(GraphicsTypes.fromGraphicsType(graphicsAndDisplay.getFirst()));
@@ -2692,9 +2702,11 @@
         }
 
 
-        setValidTab(TabName.GENERAL_TAB, isValidTab(TabName.GENERAL_TAB)
-                && getDataCenterWithClustersList().getIsValid()
-                && getTemplateWithVersion().getIsValid());
+        if (!(getBehavior() instanceof ExistingBlankTemplateModelBehavior)) {
+            setValidTab(TabName.GENERAL_TAB, isValidTab(TabName.GENERAL_TAB)
+                    && getDataCenterWithClustersList().getIsValid()
+                    && getTemplateWithVersion().getIsValid());
+        }
 
         setValidTab(TabName.INITIAL_RUN_TAB, getTimeZone().getIsValid());
 
@@ -2767,7 +2779,9 @@
 
         // Minimum 'Physical Memory Guaranteed' is 1MB
         validateMemorySize(getMemSize(), Integer.MAX_VALUE, 1);
-        if (!(getBehavior() instanceof TemplateVmModelBehavior) && 
getMemSize().getIsValid()) {
+        boolean isTemplateBehavior = (getBehavior() instanceof 
TemplateVmModelBehavior) ||
+                (getBehavior() instanceof ExistingBlankTemplateModelBehavior);
+        if (!isTemplateBehavior && getMemSize().getIsValid()) {
             validateMemorySize(getMinAllocatedMemory(), 
getMemSize().getEntity(), 1);
         }
         setValidTab(TabName.RESOURCE_ALLOCATION_TAB, 
getMinAllocatedMemory().getIsValid());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index f3a94de..e38e80b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -1218,6 +1218,10 @@
     }
 
     protected void updateRngDevice(Guid templateId) {
+        if (!getModel().getIsRngEnabled().getIsChangable()) {
+            return;
+        }
+
         Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new 
IdQueryParameters(templateId), new AsyncQuery(this,
                 new INewAsyncCallback() {
                     @Override
@@ -1264,6 +1268,12 @@
         return cluster.getCompatibilityVersion();
     }
 
+    protected Version latestCluster() {
+        // instance type and blank template always exposes all the features of 
the latest cluster and if some is not applicable
+        // than that particular feature will not be applicable on the instance 
creation
+        return Version.getLast();
+    }
+
     protected boolean basedOnCustomInstanceType() {
         InstanceType selectedInstanceType = 
getModel().getInstanceTypes().getSelectedItem();
         return selectedInstanceType == null || selectedInstanceType instanceof 
CustomInstanceType;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
index 3c9611c..121db25 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehavior.java
@@ -1,91 +1,31 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes;
 
-import java.util.HashSet;
-import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
-import org.ovirt.engine.core.common.businessentities.GraphicsType;
-import org.ovirt.engine.core.common.businessentities.InstanceType;
-import org.ovirt.engine.core.common.businessentities.UsbPolicy;
-import org.ovirt.engine.core.common.businessentities.VmBase;
-import org.ovirt.engine.core.common.businessentities.VmDevice;
-import org.ovirt.engine.core.common.businessentities.VmRngDevice;
-import org.ovirt.engine.core.common.businessentities.VmWatchdog;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
-import org.ovirt.engine.core.common.queries.IdQueryParameters;
-import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
-import org.ovirt.engine.core.common.queries.VdcQueryType;
-import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
-import org.ovirt.engine.ui.frontend.Frontend;
 import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.Linq;
-import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
-import org.ovirt.engine.ui.uicommonweb.builders.vm.HwOnlyVmBaseToUnitBuilder;
-import 
org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
-import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
 import org.ovirt.engine.ui.uicommonweb.models.vms.VnicInstanceType;
 
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.List;
 
-public class ExistingInstanceTypeModelBehavior extends 
InstanceTypeModelBehaviorBase {
+public class ExistingInstanceTypeModelBehavior extends 
ExistingNonClusterModelBehavior {
 
-    private InstanceType instanceType;
+    private VmTemplate instanceType;
 
-    public ExistingInstanceTypeModelBehavior(InstanceType instanceType) {
+    public ExistingInstanceTypeModelBehavior(VmTemplate instanceType) {
+        super(instanceType);
         this.instanceType = instanceType;
     }
 
     @Override
     public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
         super.initialize(systemTreeSelectedItem);
-        updateNumOfSockets();
-        getModel().getUsbPolicy().setItems(Arrays.asList(UsbPolicy.values()));
-
-        getModel().getIsSoundcardEnabled().setIsChangable(true);
-
-        Frontend.getInstance().runQuery(VdcQueryType.GetGraphicsDevices, new 
IdQueryParameters(instanceType.getId()), new AsyncQuery(
-            this,
-            new INewAsyncCallback() {
-                @Override
-                public void onSuccess(Object model, Object returnValue) {
-                    List<GraphicsDevice> graphicsDevices = 
((VdcQueryReturnValue) returnValue).getReturnValue();
-                    Collection<GraphicsType> graphicsTypesCollection = new 
HashSet<GraphicsType>();
-
-                    for (GraphicsDevice graphicsDevice : graphicsDevices) {
-                        
graphicsTypesCollection.add(graphicsDevice.getGraphicsType());
-                    }
-
-                    initDisplayTypes(instanceType.getDefaultDisplayType(), 
UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection));
-                }
-            }
-        ));
-
-        initSoundCard(instanceType.getId());
-        updateConsoleDevice(instanceType.getId());
-        initPriority(instanceType.getPriority());
-
-        buildModel((VmBase) instanceType);
-
-        Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new 
IdQueryParameters(instanceType.getId()), new AsyncQuery(this,
-                new INewAsyncCallback() {
-                    @Override
-                    public void onSuccess(Object model, Object returnValue) {
-                        
getModel().getMemoryBalloonDeviceEnabled().setEntity((Boolean) 
((VdcQueryReturnValue) returnValue).getReturnValue());
-                    }
-                }
-        ));
-
-        AsyncDataProvider.getInstance().isVirtioScsiEnabledForVm(new 
AsyncQuery(getModel(), new INewAsyncCallback() {
-            @Override
-            public void onSuccess(Object model, Object returnValue) {
-                getModel().getIsVirtioScsiEnabled().setEntity((Boolean) 
returnValue);
-            }
-        }), instanceType.getId());
 
         AsyncQuery getVmNicsQuery = new AsyncQuery();
         getVmNicsQuery.asyncCallback = new INewAsyncCallback() {
@@ -107,54 +47,5 @@
             }
         };
         AsyncDataProvider.getInstance().getTemplateNicList(getVmNicsQuery, 
instanceType.getId());
-
-        AsyncDataProvider.getInstance().getWatchdogByVmId(new 
AsyncQuery(this.getModel(), new INewAsyncCallback() {
-            @Override
-            public void onSuccess(Object target, Object returnValue) {
-                UnitVmModel model = (UnitVmModel) target;
-                @SuppressWarnings("unchecked")
-                Collection<VmWatchdog> watchdogs =
-                        ((VdcQueryReturnValue) returnValue).getReturnValue();
-                for (VmWatchdog watchdog : watchdogs) {
-                    
model.getWatchdogAction().setSelectedItem(watchdog.getAction());
-                    
model.getWatchdogModel().setSelectedItem(watchdog.getModel());
-                }
-            }
-        }), instanceType.getId());
-
-       Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new 
IdQueryParameters(instanceType.getId()), new AsyncQuery(
-               this,
-               new INewAsyncCallback() {
-                   @Override
-                   public void onSuccess(Object model, Object returnValue) {
-                       List<VmDevice> rngDevices = ((VdcQueryReturnValue) 
returnValue).getReturnValue();
-                       
getModel().getIsRngEnabled().setEntity(!rngDevices.isEmpty());
-                       if (!rngDevices.isEmpty()) {
-                           VmRngDevice rngDevice = new 
VmRngDevice(rngDevices.get(0));
-                           getModel().setRngDevice(rngDevice);
-                       }
-                   }
-               }
-       ));
-        
getModel().getEmulatedMachine().setSelectedItem(instanceType.getCustomEmulatedMachine());
-        
getModel().getCustomCpu().setSelectedItem(instanceType.getCustomCpuName());
-        
getModel().getMigrationMode().setSelectedItem(instanceType.getMigrationSupport());
-    }
-
-    @Override
-    protected void buildModel(VmBase vm) {
-        BuilderExecutor.build(vm, getModel(),
-                              new NameAndDescriptionVmBaseToUnitBuilder(),
-                              new HwOnlyVmBaseToUnitBuilder());
-    }
-
-    protected void initSoundCard(Guid id) {
-        AsyncDataProvider.getInstance().isSoundcardEnabled(new 
AsyncQuery(getModel(), new INewAsyncCallback() {
-
-            @Override
-            public void onSuccess(Object model, Object returnValue) {
-                getModel().getIsSoundcardEnabled().setEntity((Boolean) 
returnValue);
-            }
-        }), id);
     }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java
new file mode 100644
index 0000000..82cd63a
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingNonClusterModelBehavior.java
@@ -0,0 +1,135 @@
+package org.ovirt.engine.ui.uicommonweb.models.vms.instancetypes;
+
+import java.util.HashSet;
+import org.ovirt.engine.core.common.businessentities.GraphicsDevice;
+import org.ovirt.engine.core.common.businessentities.GraphicsType;
+import org.ovirt.engine.core.common.businessentities.UsbPolicy;
+import org.ovirt.engine.core.common.businessentities.VmBase;
+import org.ovirt.engine.core.common.businessentities.VmDevice;
+import org.ovirt.engine.core.common.businessentities.VmRngDevice;
+import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.businessentities.VmWatchdog;
+import org.ovirt.engine.core.common.queries.IdQueryParameters;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.Frontend;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
+import org.ovirt.engine.ui.uicommonweb.builders.vm.HwOnlyVmBaseToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.vm.NameAndDescriptionVmBaseToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.List;
+
+public class ExistingNonClusterModelBehavior extends 
NonClusterModelBehaviorBase {
+
+    private VmTemplate entity;
+
+    public ExistingNonClusterModelBehavior(VmTemplate entity) {
+        this.entity = entity;
+    }
+
+    @Override
+    public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
+        super.initialize(systemTreeSelectedItem);
+        updateNumOfSockets();
+        getModel().getUsbPolicy().setItems(Arrays.asList(UsbPolicy.values()));
+
+        getModel().getIsSoundcardEnabled().setIsChangable(true);
+
+        Frontend.getInstance().runQuery(VdcQueryType.GetGraphicsDevices, new 
IdQueryParameters(entity.getId()), new AsyncQuery(
+            this,
+            new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object returnValue) {
+                    List<GraphicsDevice> graphicsDevices = 
((VdcQueryReturnValue) returnValue).getReturnValue();
+                    Collection<GraphicsType> graphicsTypesCollection = new 
HashSet<GraphicsType>();
+
+                    for (GraphicsDevice graphicsDevice : graphicsDevices) {
+                        
graphicsTypesCollection.add(graphicsDevice.getGraphicsType());
+                    }
+
+                    initDisplayTypes(entity.getDefaultDisplayType(), 
UnitVmModel.GraphicsTypes.fromGraphicsTypes(graphicsTypesCollection));
+                }
+            }
+        ));
+
+        initSoundCard(entity.getId());
+        updateConsoleDevice(entity.getId());
+        initPriority(entity.getPriority());
+
+        buildModel((VmBase) entity);
+
+        Frontend.getInstance().runQuery(VdcQueryType.IsBalloonEnabled, new 
IdQueryParameters(entity.getId()), new AsyncQuery(this,
+                new INewAsyncCallback() {
+                    @Override
+                    public void onSuccess(Object model, Object returnValue) {
+                        
getModel().getMemoryBalloonDeviceEnabled().setEntity((Boolean) 
((VdcQueryReturnValue) returnValue).getReturnValue());
+                    }
+                }
+        ));
+
+        AsyncDataProvider.getInstance().isVirtioScsiEnabledForVm(new 
AsyncQuery(getModel(), new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object model, Object returnValue) {
+                getModel().getIsVirtioScsiEnabled().setEntity((Boolean) 
returnValue);
+            }
+        }), entity.getId());
+
+
+        AsyncDataProvider.getInstance().getWatchdogByVmId(new 
AsyncQuery(this.getModel(), new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object target, Object returnValue) {
+                UnitVmModel model = (UnitVmModel) target;
+                @SuppressWarnings("unchecked")
+                Collection<VmWatchdog> watchdogs =
+                        ((VdcQueryReturnValue) returnValue).getReturnValue();
+                for (VmWatchdog watchdog : watchdogs) {
+                    
model.getWatchdogAction().setSelectedItem(watchdog.getAction());
+                    
model.getWatchdogModel().setSelectedItem(watchdog.getModel());
+                }
+            }
+        }), entity.getId());
+
+       Frontend.getInstance().runQuery(VdcQueryType.GetRngDevice, new 
IdQueryParameters(entity.getId()), new AsyncQuery(
+               this,
+               new INewAsyncCallback() {
+                   @Override
+                   public void onSuccess(Object model, Object returnValue) {
+                       List<VmDevice> rngDevices = ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                       
getModel().getIsRngEnabled().setEntity(!rngDevices.isEmpty());
+                       if (!rngDevices.isEmpty()) {
+                           VmRngDevice rngDevice = new 
VmRngDevice(rngDevices.get(0));
+                           getModel().setRngDevice(rngDevice);
+                       }
+                   }
+               }
+       ));
+        
getModel().getEmulatedMachine().setSelectedItem(entity.getCustomEmulatedMachine());
+        getModel().getCustomCpu().setSelectedItem(entity.getCustomCpuName());
+        
getModel().getMigrationMode().setSelectedItem(entity.getMigrationSupport());
+    }
+
+    @Override
+    protected void buildModel(VmBase vm) {
+        BuilderExecutor.build(vm, getModel(),
+                              new NameAndDescriptionVmBaseToUnitBuilder(),
+                              new HwOnlyVmBaseToUnitBuilder());
+    }
+
+    protected void initSoundCard(Guid id) {
+        AsyncDataProvider.getInstance().isSoundcardEnabled(new 
AsyncQuery(getModel(), new INewAsyncCallback() {
+
+            @Override
+            public void onSuccess(Object model, Object returnValue) {
+                getModel().getIsSoundcardEnabled().setEntity((Boolean) 
returnValue);
+            }
+        }), id);
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java
index f96a93a..27014b3 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NewInstanceTypeModelBehavior.java
@@ -10,7 +10,7 @@
 import java.util.ArrayList;
 import java.util.Arrays;
 
-public class NewInstanceTypeModelBehavior extends 
InstanceTypeModelBehaviorBase {
+public class NewInstanceTypeModelBehavior extends NonClusterModelBehaviorBase {
 
     @Override
     public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java
similarity index 90%
rename from 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java
rename to 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java
index 5b8fb76..715d42b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/InstanceTypeModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/NonClusterModelBehaviorBase.java
@@ -17,7 +17,7 @@
 import java.util.Arrays;
 import java.util.HashSet;
 
-public class InstanceTypeModelBehaviorBase extends 
VmModelBehaviorBase<UnitVmModel> {
+public class NonClusterModelBehaviorBase extends 
VmModelBehaviorBase<UnitVmModel> {
 
     @Override
     public void initialize(SystemTreeItemModel systemTreeSelectedItem) {
@@ -73,12 +73,6 @@
     @Override
     protected Version getClusterCompatibilityVersion() {
         return latestCluster();
-    }
-
-    protected Version latestCluster() {
-        // instance type always exposes all the features of the latest cluster 
and if some is not applicable
-        // than that particular feature will not be applicable on the instance 
creation
-        return Version.ALL.get(Version.ALL.size() - 1);
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java
index bfeded4..3061ae4 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmModelBehaviorTest.java
@@ -9,7 +9,6 @@
 import org.ovirt.engine.core.common.businessentities.SsoMethod;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VmBase;
-import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 
 public abstract class BaseVmModelBehaviorTest extends BaseVmTest {
@@ -69,7 +68,7 @@
 
     protected UnitVmModel createModel(VmModelBehaviorBase behavior) {
         final VDSGroup cluster = new VDSGroup();
-        cluster.setCompatibilityVersion(Version.v3_5);
+        cluster.setCompatibilityVersion(CLUSTER_VERSION);
 
         UnitVmModel model = new UnitVmModel(behavior) {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java
index 472c3e8..850763f 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/BaseVmTest.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.core.common.businessentities.VmType;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.junit.UiCommonSetup;
 
@@ -61,6 +62,7 @@
     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 Version CLUSTER_VERSION = Version.v3_5;
 
     @ClassRule
     public static UiCommonSetup setup = new UiCommonSetup();
@@ -68,7 +70,16 @@
     @BeforeClass
     public static void mockAsyncDataProvider() {
         AsyncDataProvider adp = setup.getMocks().asyncDataProvider();
+
         
when(adp.getConfigValuePreConverted(ConfigurationValues.VncKeyboardLayoutValidValues)).thenReturn(Collections.emptyList());
+
+        
when(adp.getConfigValuePreConverted(ConfigurationValues.BootMenuSupported, 
CLUSTER_VERSION.getValue())).thenReturn(true);
+        
when(adp.getConfigValuePreConverted(ConfigurationValues.SpiceFileTransferToggleSupported,
 CLUSTER_VERSION.getValue())).thenReturn(true);
+        
when(adp.getConfigValuePreConverted(ConfigurationValues.SpiceCopyPasteToggleSupported,
 CLUSTER_VERSION.getValue())).thenReturn(true);
+        
when(adp.getConfigValuePreConverted(ConfigurationValues.AutoConvergenceSupported,
 CLUSTER_VERSION.getValue())).thenReturn(true);
+        
when(adp.getConfigValuePreConverted(ConfigurationValues.MigrationCompressionSupported,
 CLUSTER_VERSION.getValue())).thenReturn(true);
+        
when(adp.isSerialNumberPolicySupported(CLUSTER_VERSION.getValue())).thenReturn(true);
+
         when(adp.osNameExists(OS_TYPE)).thenReturn(true);
         when(adp.getMaxVmNameLengthWin()).thenReturn(15);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java
index 9936a7e..e64f575 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBaseTest.java
@@ -27,7 +27,15 @@
 
     @Override
     protected UnitVmModel createModel(VmModelBehaviorBase behavior) {
-        return new PoolModel(behavior);
+        final VDSGroup cluster = new VDSGroup();
+        cluster.setCompatibilityVersion(CLUSTER_VERSION);
+
+        return new PoolModel(behavior) {
+            @Override
+            public VDSGroup getSelectedCluster() {
+                return cluster;
+            }
+        };
     }
 
     @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java
 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java
index 236901f..79421a1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/test/java/org/ovirt/engine/ui/uicommonweb/models/vms/instancetypes/ExistingInstanceTypeModelBehaviorTest.java
@@ -17,7 +17,7 @@
 
     @Override
     protected VmModelBehaviorBase getBehavior() {
-        return new ExistingInstanceTypeModelBehavior(instance);
+        return new ExistingNonClusterModelBehavior(instance);
     }
 
     @Override


-- 
To view, visit http://gerrit.ovirt.org/37905
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I400401b8e110b4cd10404f6df7c8f8ea4cd56093
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Tomas Jelinek <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to