Tomas Jelinek has uploaded a new change for review.

Change subject: new image popup
......................................................................

new image popup

Change-Id: Id1932f8dfe9f52fcbdcdf83fc4b879f570d95108
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/vm/ImagePopupWidget.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/BootOptionsVmToUnitBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/ClusterVmToUnitBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/CustomPropertiesUnitToVmBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/DiskListVmToUnitBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/GeneralVmToUnitBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/QuotaVmToUnitBuilder.java
A 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/StorageDomainVmToUnitBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/unit/DataCenterToUnitBuilder.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewImageModelBehavior.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/VmListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
16 files changed, 619 insertions(+), 66 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/12443/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 14d03cd..32f79ba 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
@@ -360,10 +360,16 @@
     protected FlowPanel storageAllocationPanel;
 
     @UiField
+    protected Panel diskAllocationLabelPanel;
+
+    @UiField
     protected HorizontalPanel provisionSelectionPanel;
 
     @UiField
     protected FlowPanel disksAllocationPanel;
+
+    @UiField
+    protected FlowPanel memoryAllocationPanel;
 
     @UiField
     @Ignore
@@ -919,11 +925,12 @@
      */
     protected void updateUsbNativeMessageVisibility(final UnitVmModel object) {
         VDSGroup vdsGroup = (VDSGroup) object.getCluster().getSelectedItem();
-        changeApplicationLevelVisibility(nativeUsbWarningMessage, 
object.getUsbPolicy().getSelectedItem() == UsbPolicy.ENABLED_NATIVE
-                && vdsGroup != null
-                && vdsGroup.getcompatibility_version() != null
-                && !(Boolean) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.MigrationSupportForNativeUsb,
-                        vdsGroup.getcompatibility_version().getValue()));
+        changeApplicationLevelVisibility(nativeUsbWarningMessage,
+                object.getUsbPolicy().getSelectedItem() == 
UsbPolicy.ENABLED_NATIVE
+                        && vdsGroup != null
+                        && vdsGroup.getcompatibility_version() != null
+                        && !(Boolean) 
AsyncDataProvider.GetConfigValuePreConverted(ConfigurationValues.MigrationSupportForNativeUsb,
+                                
vdsGroup.getcompatibility_version().getValue()));
     }
 
     private void addDiskAllocation(UnitVmModel model) {
@@ -961,7 +968,8 @@
                         resourceAllocationTab.markAsInvalid(null);
                     }
                 } else if ("IsHighlyAvailable".equals(propName)) { 
//$NON-NLS-1$
-                    changeApplicationLevelVisibility(highAvailabilityTab, 
(Boolean) vm.getIsHighlyAvailable().getEntity());
+                    changeApplicationLevelVisibility(highAvailabilityTab, 
(Boolean) vm.getIsHighlyAvailable()
+                            .getEntity());
                 } else if ("IsBootSequenceTabValid".equals(propName)) { 
//$NON-NLS-1$
                     if ((Boolean) vm.getIsHighlyAvailable().getEntity()) {
                         bootOptionsTab.markAsValid();
@@ -980,7 +988,8 @@
                     changeApplicationLevelVisibility(disksAllocationPanel, 
isDisksAvailable);
 
                     boolean isProvisioningAvailable = 
vm.getProvisioning().getIsAvailable();
-                    changeApplicationLevelVisibility(storageAllocationPanel, 
isProvisioningAvailable || isDisksAvailable);
+                    changeApplicationLevelVisibility(storageAllocationPanel, 
isProvisioningAvailable
+                            || isDisksAvailable);
 
                     if (isDisksAvailable) {
                         // Update warning message by disks status
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 6050b08..85bd793 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
@@ -365,12 +365,12 @@
                        <t:DialogTab ui:field="resourceAllocationTab">
                                <t:content>
                                        <g:FlowPanel>
-                                               <g:FlowPanel 
addStyleNames="{style.sectionPanel}">
+                                               <g:FlowPanel 
ui:field="memoryAllocationPanel" addStyleNames="{style.sectionPanel}">
                                                        <g:Label 
addStyleNames="{style.sectionLabel}" text="{constants.memAllocVmPopup}" />
                                                        
<e:EntityModelTextBoxEditor ui:field="minAllocatedMemoryEditor" />
                                                </g:FlowPanel>
                                                <g:FlowPanel 
ui:field="storageAllocationPanel" addStyleNames="{style.sectionPanel}">
-                                                       <g:HorizontalPanel>
+                                                       <g:HorizontalPanel 
ui:field="diskAllocationLabelPanel">
                                                                <g:Label 
addStyleNames="{style.sectionLabel}" text="{constants.storageAllocVmPopup}" />
                                                                <g:Label 
addStyleNames="{style.sectionComment}" 
text="{constants.availOnlyTemplSelectedVmPopup}" />
                                                        </g:HorizontalPanel>
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ImagePopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ImagePopupWidget.java
index dd281b1..e09c47f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ImagePopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/ImagePopupWidget.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
 
 import static 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupWidgetConfig.hiddenField;
+import static 
org.ovirt.engine.ui.common.widget.uicommon.popup.vm.VmPopupWidgetConfig.simpleField;
 
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
 import org.ovirt.engine.ui.common.CommonApplicationMessages;
@@ -24,7 +25,6 @@
         config.put(poolTab, hiddenField());
         config.put(initialRunTab, hiddenField());
         config.put(templateEditor, hiddenField());
-        config.put(resourceAllocationTab, hiddenField());
         config.put(consoleTab, hiddenField());
         config.put(isStatelessEditor, hiddenField());
         config.put(isDeleteProtectedEditor, hiddenField());
@@ -32,6 +32,11 @@
         config.put(totalvCPUsEditor, hiddenField());
         config.put(memSizeEditor, hiddenField());
         config.put(templateEditor, hiddenField());
+        config.put(provisionSelectionPanel, hiddenField());
+        config.put(diskAllocationLabelPanel, hiddenField());
+        config.put(storageAllocationPanel, simpleField());
+        config.put(disksAllocationPanel, simpleField());
+        config.put(memoryAllocationPanel, hiddenField());
 
         return config;
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java
index ece462d..8389f7b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/Builder.java
@@ -21,4 +21,16 @@
     public static class VoidSource {
 
     }
+
+    /**
+     * If the builder faces some problem (e.g. null somewhere and is not sure 
how to handle it), calls this interface
+     *
+     * @param <T>
+     *            data the builder wants to pass (e.g. warning message)
+     * @return true to continue, false to terminate the builder - e.g. do not 
continue AND do not call the rest of the
+     *         builder chain
+     */
+    public static interface ProblemOccurredCallback<T> {
+        boolean onProblemOccurred(T data);
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/BootOptionsVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/BootOptionsVmToUnitBuilder.java
new file mode 100644
index 0000000..1d293eb
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/BootOptionsVmToUnitBuilder.java
@@ -0,0 +1,55 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
+import org.ovirt.engine.core.compat.StringHelper;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+// TODO replace this code in the behavior classes by calling this builder
+@SuppressWarnings("deprecation")
+public class BootOptionsVmToUnitBuilder implements Builder<VM, UnitVmModel> {
+
+    @Override
+    public void build(final VM source, final UnitVmModel destination, final 
BuilderList<VM, UnitVmModel> rest) {
+        destination.setBootSequence(source.getDefaultBootSequence());
+
+        boolean hasCd = !StringHelper.isNullOrEmpty(source.getIsoPath());
+        destination.getCdImage().setIsChangable(hasCd);
+        destination.getCdAttached().setEntity(hasCd);
+
+        storage_pool dataCenter = (storage_pool) 
destination.getDataCenter().getSelectedItem();
+        if (dataCenter == null) {
+            return;
+        }
+
+        AsyncDataProvider.GetIrsImageList(new AsyncQuery(destination,
+                new INewAsyncCallback() {
+                    @SuppressWarnings("unchecked")
+                    @Override
+                    public void OnSuccess(Object target, Object returnValue) {
+                        UnitVmModel model = (UnitVmModel) target;
+                        List<String> images = (List<String>) returnValue;
+                        setImagesToModel(model, images);
+
+                        rest.head().build(source, destination, rest.tail());
+                    }
+                }, destination.getHash()),
+                dataCenter.getId());
+    }
+
+    protected void setImagesToModel(UnitVmModel model, List<String> images) {
+        String oldCdImage = (String) model.getCdImage().getSelectedItem();
+        model.getCdImage().setItems(images);
+        model.getCdImage().setSelectedItem((oldCdImage != null) ? oldCdImage
+                : Linq.FirstOrDefault(images));
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/ClusterVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/ClusterVmToUnitBuilder.java
new file mode 100644
index 0000000..ef77221
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/ClusterVmToUnitBuilder.java
@@ -0,0 +1,40 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+public class ClusterVmToUnitBuilder implements Builder<VM, UnitVmModel> {
+
+    @Override
+    public void build(final VM source, final UnitVmModel destination, final 
BuilderList<VM, UnitVmModel> rest) {
+
+        storage_pool dataCenter = (storage_pool) 
destination.getDataCenter().getSelectedItem();
+        destination.setIsHostAvailable(dataCenter.getstorage_pool_type() != 
StorageType.LOCALFS);
+
+        AsyncDataProvider.GetClusterList(new AsyncQuery(new Object[] { this, 
destination },
+                new INewAsyncCallback() {
+                    @Override
+                    public void OnSuccess(Object target, Object returnValue) {
+
+                        Object[] array = (Object[]) target;
+                        UnitVmModel model = (UnitVmModel) array[1];
+                        ArrayList<VDSGroup> clusters = (ArrayList<VDSGroup>) 
returnValue;
+                        model.SetClusters(model, clusters, 
source.getVdsGroupId().getValue());
+
+                        rest.head().build(source, destination, rest.tail());
+
+                    }
+                }, destination.getHash()), dataCenter.getId());
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/CustomPropertiesUnitToVmBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/CustomPropertiesUnitToVmBuilder.java
new file mode 100644
index 0000000..73bd6ef
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/CustomPropertiesUnitToVmBuilder.java
@@ -0,0 +1,13 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+public class CustomPropertiesUnitToVmBuilder extends BaseSyncBuilder<VM, 
UnitVmModel> {
+
+    @Override
+    protected void build(VM source, UnitVmModel destination) {
+        
destination.getCustomProperties().setEntity(source.getCustomProperties());
+    }
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/DiskListVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/DiskListVmToUnitBuilder.java
new file mode 100644
index 0000000..8e57bf5
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/DiskListVmToUnitBuilder.java
@@ -0,0 +1,107 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicommonweb.models.ListModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.external.StringUtils;
+
+public class DiskListVmToUnitBuilder implements Builder<VM, UnitVmModel> {
+
+    @Override
+    public void build(final VM source, final UnitVmModel destination, final 
BuilderList<VM, UnitVmModel> rest) {
+        AsyncDataProvider.GetVmDiskList(new AsyncQuery(this,
+                new INewAsyncCallback() {
+                    @Override
+                    public void OnSuccess(Object target, Object returnValue) {
+
+                        ArrayList<Disk> disks = new ArrayList<Disk>();
+                        List<Disk> nonExportableDisks = new ArrayList<Disk>();
+                        Iterable<Disk> disksEnumerable = (Iterable<Disk>) 
returnValue;
+                        Iterator<Disk> disksIterator = 
disksEnumerable.iterator();
+
+                        while (disksIterator.hasNext())
+                        {
+                            Disk disk = (Disk) disksIterator.next();
+
+                            if (disk.getDiskStorageType() == 
DiskStorageType.IMAGE && !disk.isShareable()) {
+                                disks.add(disk);
+                            } else if (!disk.isAllowSnapshot()) {
+                                nonExportableDisks.add(disk);
+                            }
+                        }
+
+                        InitDisks(disks, destination);
+                        sendWarningForNonExportableDisks(nonExportableDisks, 
destination);
+
+                        rest.head().build(source, destination, rest.tail());
+                    }
+                }, destination.getHash()),
+                source.getId(),
+                true);
+    }
+
+    private void sendWarningForNonExportableDisks(List<Disk> 
nonExportableDisks, UnitVmModel destination) {
+        if (!nonExportableDisks.isEmpty()) {
+            final List<String> list = new ArrayList<String>();
+            for (Disk disk : nonExportableDisks) {
+                list.add(disk.getDiskAlias());
+            }
+
+            final String s = StringUtils.join(list, ", "); //$NON-NLS-1$
+
+            // append warning message
+            destination.setMessage(ConstantsManager.getInstance()
+                    .getMessages()
+                    .disksWillNotBePartOfTheExportedVMTemplate(s));
+        }
+    }
+
+    private void InitDisks(ArrayList<Disk> disks, UnitVmModel destination)
+    {
+        Collections.sort(disks, new Linq.DiskByAliasComparer());
+        ArrayList<DiskModel> list = new ArrayList<DiskModel>();
+
+        for (Disk disk : disks)
+        {
+            DiskModel diskModel = new DiskModel();
+            diskModel.setIsNew(true);
+
+            if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
+                DiskImage diskImage = (DiskImage) disk;
+                EntityModel size = new EntityModel();
+                size.setEntity(diskImage.getSizeInGigabytes());
+                diskModel.setSize(size);
+                ListModel volumes = new ListModel();
+                volumes.setItems((diskImage.getVolumeType() == 
VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new 
VolumeType[] { VolumeType.Preallocated }))
+                        : AsyncDataProvider.GetVolumeTypeList()));
+                volumes.setSelectedItem(diskImage.getVolumeType());
+                diskModel.setVolumeType(volumes);
+                diskModel.getAlias().setEntity(diskImage.getDiskAlias());
+            }
+
+            diskModel.setDisk(disk);
+            list.add(diskModel);
+        }
+        destination.setDisks(list);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/GeneralVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/GeneralVmToUnitBuilder.java
new file mode 100644
index 0000000..ec49a68
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/GeneralVmToUnitBuilder.java
@@ -0,0 +1,14 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.uicommonweb.builders.BaseSyncBuilder;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+public class GeneralVmToUnitBuilder extends BaseSyncBuilder<VM, UnitVmModel> {
+
+    @Override
+    protected void build(VM source, UnitVmModel destination) {
+        destination.getOSType().setSelectedItem(source.getVmOs());
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/QuotaVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/QuotaVmToUnitBuilder.java
new file mode 100644
index 0000000..22864747
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/QuotaVmToUnitBuilder.java
@@ -0,0 +1,72 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.core.common.businessentities.Quota;
+import org.ovirt.engine.core.common.businessentities.VDSGroup;
+import 
org.ovirt.engine.core.common.queries.GetAllRelevantQuotasForVdsGroupParameters;
+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.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+
+public class QuotaVmToUnitBuilder<T> implements Builder<T, UnitVmModel> {
+
+    private final Guid defaultQuota;
+    private final String quotaName;
+
+    public QuotaVmToUnitBuilder(Guid defaultQuota, String quotaName) {
+        this.defaultQuota = defaultQuota;
+        this.quotaName = quotaName;
+    }
+
+    @Override
+    public void build(final T source,
+            final UnitVmModel destination,
+            final BuilderList<T, UnitVmModel> rest) {
+        if (destination.getQuota().getIsAvailable()) {
+            VDSGroup cluster = (VDSGroup) 
destination.getCluster().getSelectedItem();
+            if (cluster == null) {
+                return;
+            }
+            Frontend.RunQuery(VdcQueryType.GetAllRelevantQuotasForVdsGroup,
+                    new 
GetAllRelevantQuotasForVdsGroupParameters(cluster.getId()), new 
AsyncQuery(destination,
+                            new INewAsyncCallback() {
+
+                                @Override
+                                public void OnSuccess(Object model, Object 
returnValue) {
+                                    UnitVmModel vmModel = (UnitVmModel) model;
+                                    ArrayList<Quota> quotaList =
+                                            (ArrayList<Quota>) 
((VdcQueryReturnValue) returnValue).getReturnValue();
+                                    if (quotaList != null && 
!quotaList.isEmpty()) {
+                                        vmModel.getQuota().setItems(quotaList);
+                                    }
+                                    if (defaultQuota != null) {
+                                        boolean hasQuotaInList = false;
+                                        for (Quota quota : quotaList) {
+                                            if 
(quota.getId().equals(defaultQuota)) {
+                                                
vmModel.getQuota().setSelectedItem(quota);
+                                                hasQuotaInList = true;
+                                                break;
+                                            }
+                                        }
+                                        if (!hasQuotaInList) {
+                                            Quota quota = new Quota();
+                                            quota.setId(defaultQuota);
+                                            quota.setQuotaName(quotaName);
+                                            quotaList.add(quota);
+                                            
vmModel.getQuota().setItems(quotaList);
+                                            
vmModel.getQuota().setSelectedItem(quota);
+                                        }
+                                    }
+                                }
+                            }));
+        }
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/StorageDomainVmToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/StorageDomainVmToUnitBuilder.java
new file mode 100644
index 0000000..1d5d946
--- /dev/null
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/template/StorageDomainVmToUnitBuilder.java
@@ -0,0 +1,114 @@
+package org.ovirt.engine.ui.uicommonweb.builders.template;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+
+import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageDomainStatus;
+import org.ovirt.engine.core.common.businessentities.StorageDomainType;
+import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
+import org.ovirt.engine.ui.uicommonweb.Linq;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemType;
+import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel;
+import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
+import org.ovirt.engine.ui.uicompat.ConstantsManager;
+
+public class StorageDomainVmToUnitBuilder implements Builder<VM, UnitVmModel> {
+
+    private final SystemTreeItemModel systemTree;
+    private final 
org.ovirt.engine.ui.uicommonweb.builders.Builder.ProblemOccurredCallback<String>
 problemCallback;
+
+    public StorageDomainVmToUnitBuilder(SystemTreeItemModel systemTree, 
ProblemOccurredCallback<String> problemCallback) {
+        this.systemTree = systemTree;
+        this.problemCallback = problemCallback;
+    }
+
+    @Override
+    public void build(final VM source, final UnitVmModel destination, final 
BuilderList<VM, UnitVmModel> rest) {
+        AsyncDataProvider.GetPermittedStorageDomainsByStoragePoolId(new 
AsyncQuery(this,
+                new INewAsyncCallback() {
+                    @Override
+                    public void OnSuccess(Object target, Object returnValue) {
+                        ArrayList<StorageDomain> activeStorageDomainList =
+                                new ArrayList<StorageDomain>();
+
+                        for (StorageDomain storageDomain : 
(ArrayList<StorageDomain>) returnValue) {
+                            if (storageDomain.getStatus() == 
StorageDomainStatus.Active
+                                    && (storageDomain.getStorageDomainType() 
== StorageDomainType.Data || storageDomain.getStorageDomainType() == 
StorageDomainType.Master)) {
+                                activeStorageDomainList.add(storageDomain);
+                            }
+                        }
+
+                        for (DiskModel diskModel : destination.getDisks()) {
+                            if (diskModel.getDisk().getDiskStorageType() == 
DiskStorageType.IMAGE) {
+                                DiskImage diskImage = (DiskImage) 
diskModel.getDisk();
+                                ArrayList<StorageDomain> activeDiskStorages =
+                                        
Linq.getStorageDomainsByIds(diskImage.getStorageIds(), activeStorageDomainList);
+
+                                if (activeDiskStorages.isEmpty()) {
+                                    String msg = ConstantsManager.getInstance()
+                                            .getMessages()
+                                            .vmStorageDomainIsNotAccessible();
+                                    if 
(!problemCallback.onProblemOccurred(msg)) {
+                                        return;
+                                    }
+                                }
+                            }
+                        }
+
+                        if (activeStorageDomainList.size() > 0) {
+                            destination.setIsDisksAvailable(true);
+                            if (systemTree != null
+                                    && systemTree.getType() == 
SystemTreeItemType.Storage) {
+                                StorageDomain selectStorage =
+                                        (StorageDomain) systemTree.getEntity();
+                                StorageDomain s =
+                                        
Linq.FirstOrDefault(activeStorageDomainList,
+                                                new 
Linq.StoragePredicate(selectStorage.getId()));
+                                activeStorageDomainList =
+                                        new 
ArrayList<StorageDomain>(Arrays.asList(new StorageDomain[] { s }));
+
+                                
destination.getStorageDomain().setItems(activeStorageDomainList);
+                                
destination.getStorageDomain().setIsChangable(false);
+                                
destination.getStorageDomain().setSelectedItem(s);
+                            } else {
+                                
destination.getStorageDomain().setItems(activeStorageDomainList);
+                                
destination.getStorageDomain().setIsChangable(true);
+                            }
+                        } else {
+                            String msg = ConstantsManager.getInstance()
+                                    .getMessages()
+                                    .noActiveStorageDomain();
+                            problemCallback.onProblemOccurred(msg);
+                        }
+
+                        ArrayList<DiskModel> disks =
+                                (ArrayList<DiskModel>) 
destination.getDisksAllocationModel().getDisks();
+
+                        Linq.Sort(activeStorageDomainList, new 
Linq.StorageDomainByNameComparer());
+                        if (disks != null) {
+                            for (DiskModel diskModel : disks) {
+                                
diskModel.getStorageDomain().setItems(activeStorageDomainList);
+                                
diskModel.getQuota().setItems(destination.getQuota().getItems());
+                            }
+                        }
+
+                        rest.head().build(source, destination, rest.tail());
+                    }
+
+                },
+                destination.getHash()),
+                source.getStoragePoolId(),
+                ActionGroup.CREATE_TEMPLATE);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/unit/DataCenterToUnitBuilder.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/unit/DataCenterToUnitBuilder.java
index a838181..121de73 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/unit/DataCenterToUnitBuilder.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/builders/unit/DataCenterToUnitBuilder.java
@@ -10,12 +10,11 @@
 import org.ovirt.engine.ui.uicommonweb.builders.BuilderList;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.vms.UnitVmModel;
-import static org.ovirt.engine.ui.uicommonweb.builders.Builder.VoidSource;
 
-public class DataCenterToUnitBuilder implements Builder<VoidSource, 
UnitVmModel> {
+public class DataCenterToUnitBuilder<S> implements Builder<S, UnitVmModel> {
 
     @Override
-    public void build(final VoidSource source, final UnitVmModel destination, 
final BuilderList<VoidSource, UnitVmModel> rest) {
+    public void build(final S source, final UnitVmModel destination, final 
BuilderList<S, UnitVmModel> rest) {
         AsyncDataProvider.GetDataCenterList(new AsyncQuery(destination,
                 new INewAsyncCallback() {
                     @SuppressWarnings("unchecked")
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewImageModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewImageModelBehavior.java
index c8f234c..b1bd68b 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewImageModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewImageModelBehavior.java
@@ -1,11 +1,98 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import org.ovirt.engine.core.common.businessentities.VM;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.BootOptionsVmToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.ClusterVmToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.CustomPropertiesUnitToVmBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.DiskListVmToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.GeneralVmToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.builders.template.QuotaVmToUnitBuilder;
+import 
org.ovirt.engine.ui.uicommonweb.builders.template.StorageDomainVmToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.builders.unit.DataCenterToUnitBuilder;
+import org.ovirt.engine.ui.uicommonweb.models.SystemTreeItemModel;
+import org.ovirt.engine.ui.uicommonweb.models.storage.DisksAllocationModel;
 
-public class NewImageModelBehavior extends NewTemplateVmModelBehavior {
+public class NewImageModelBehavior extends VmModelBehaviorBase<UnitVmModel> {
+
+    private final VM vm;
 
     public NewImageModelBehavior(VM vm) {
-        super(vm);
+        this.vm = vm;
     }
 
+    @SuppressWarnings("unchecked")
+    @Override
+    public void Initialize(SystemTreeItemModel systemTreeSelectedItem) {
+        super.Initialize(systemTreeSelectedItem);
+
+        DisksAllocationModel disksAllocationModel = 
getModel().getDisksAllocationModel();
+        disksAllocationModel.setIsAliasChangable(true);
+
+        new BuilderExecutor<VM, UnitVmModel>(
+                new GeneralVmToUnitBuilder(),
+                // this will cause the DataCenter_SelectedItemChanged - no 
need to do the cluster here
+                new DataCenterToUnitBuilder<VM>(),
+                new BootOptionsVmToUnitBuilder(),
+                new CustomPropertiesUnitToVmBuilder()).build(vm, getModel());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void InitStorageDomains() {
+
+        new BuilderExecutor<VM, UnitVmModel>().build(vm, getModel());
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void DataCenter_SelectedItemChanged() {
+
+        new BuilderExecutor<VM, UnitVmModel>(
+                new ClusterVmToUnitBuilder(),
+                // If a VM has at least one disk, present its storage domain.
+                new DiskListVmToUnitBuilder(),
+                new StorageDomainVmToUnitBuilder(
+                        getSystemTreeSelectedItem(),
+                        new 
StorageDomainVmToUnitBuilderProblemCallback())).build(vm, getModel());
+    }
+
+    @Override
+    public void Template_SelectedItemChanged() {
+        // no - op
+    }
+
+    @SuppressWarnings("unchecked")
+    @Override
+    public void Cluster_SelectedItemChanged() {
+        new BuilderExecutor<VM, UnitVmModel>(
+                new QuotaVmToUnitBuilder<VM>(null, null)
+        ).build(vm, getModel());
+    }
+
+    @Override
+    public void DefaultHost_SelectedItemChanged() {
+        // no - op
+    }
+
+    @Override
+    public void Provisioning_SelectedItemChanged() {
+        // no - op
+    }
+
+    @Override
+    public void UpdateMinAllocatedMemory() {
+        // no - op
+    }
+
+    class StorageDomainVmToUnitBuilderProblemCallback implements 
Builder.ProblemOccurredCallback<String> {
+
+        @Override
+        public boolean onProblemOccurred(String data) {
+            // do nothing for now...
+            return false;
+        }
+
+    }
 }
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 a230122..58d532f 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
@@ -31,7 +31,7 @@
     {
         super.Initialize(systemTreeSelectedItem);
         new BuilderExecutor<VoidSource, UnitVmModel>(
-                new DataCenterToUnitBuilder()
+                new DataCenterToUnitBuilder<VoidSource>()
                 ).build(new VoidSource(), getModel());
         InitPriority(0);
     }
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 25082b1..51b4b61 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
@@ -35,6 +35,7 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.TemplateType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -88,9 +89,9 @@
 import org.ovirt.engine.ui.uicommonweb.models.configure.PermissionListModel;
 import org.ovirt.engine.ui.uicommonweb.models.tags.TagListModel;
 import org.ovirt.engine.ui.uicommonweb.models.tags.TagModel;
+import org.ovirt.engine.ui.uicommonweb.models.templates.InstanceTypeListModel;
 import org.ovirt.engine.ui.uicommonweb.models.templates.VmBaseListModel;
 import org.ovirt.engine.ui.uicommonweb.models.userportal.AttachCdModel;
-import org.ovirt.engine.ui.uicompat.Constants;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.Event;
 import org.ovirt.engine.ui.uicompat.EventArgs;
@@ -1801,11 +1802,7 @@
 
         UnitVmModel model = new UnitVmModel(new 
NewTemplateVmModelBehavior(vm));
         setWindow(model);
-        Constants constants = ConstantsManager.getInstance().getConstants();
-        String title =
-                getLastExecutedCommand() == getNewImageCommand() ? 
constants.newImageTitle()
-                        : constants.newTemplateTitle();
-        model.setTitle(title);
+        
model.setTitle(ConstantsManager.getInstance().getConstants().newTemplateTitle());
         model.setHashName("new_template"); //$NON-NLS-1$
         model.setIsNew(true);
         model.setVmType(vm.getVmType());
@@ -1879,7 +1876,68 @@
     }
 
     private void newImage() {
-        NewTemplate();
+        VM vm = (VM) getSelectedItem();
+        if (vm == null)
+        {
+            return;
+        }
+
+        if (getWindow() != null)
+        {
+            return;
+        }
+
+        UnitVmModel model = new UnitVmModel(new NewImageModelBehavior(vm)) {
+            @Override
+            public boolean Validate() {
+                return true;
+            }
+        };
+        setWindow(model);
+        
model.setTitle(ConstantsManager.getInstance().getConstants().newImageTitle());
+        model.setHashName("new_image"); //$NON-NLS-1$
+
+        model.Initialize(getSystemTreeSelectedItem());
+
+        UICommand tempVar = new UICommand("OnNewImage", this); //$NON-NLS-1$
+        tempVar.setTitle(ConstantsManager.getInstance().getConstants().ok());
+        tempVar.setIsDefault(true);
+        model.getCommands().add(tempVar);
+        UICommand tempVar2 = new UICommand("Cancel", this); //$NON-NLS-1$
+        
tempVar2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        tempVar2.setIsCancel(true);
+        model.getCommands().add(tempVar2);
+    }
+
+    private void onNewImage() {
+        UnitVmModel model = (UnitVmModel) getWindow();
+
+        if (!model.Validate()) {
+            model.setIsValid(false);
+            return;
+        }
+
+        VM newVm = (VM) Cloner.clone(getSelectedItem());
+        newVm.setName("otherName");
+
+        AddVmTemplateParameters addVmTemplateParameters =
+                new AddVmTemplateParameters(newVm,
+                        (String) model.getName().getEntity(),
+                        (String) model.getDescription().getEntity());
+        addVmTemplateParameters.setTemplateType(TemplateType.IMAGE_TYPE);
+
+        Frontend.RunAction(VdcActionType.AddVmTemplate, 
addVmTemplateParameters,
+                new IFrontendActionAsyncCallback() {
+                    @Override
+                    public void Executed(FrontendActionAsyncResult result) {
+                        VmListModel imageListModel = (VmListModel) 
result.getState();
+                        imageListModel.getWindow().StopProgress();
+                        VdcReturnValueBase returnValueBase = 
result.getReturnValue();
+                        if (returnValueBase != null && 
returnValueBase.getSucceeded()) {
+                            Cancel();
+                        }
+                    }
+                }, this);
     }
 
     @SuppressWarnings("unchecked")
@@ -3112,6 +3170,8 @@
             setWindow(null);
         } else if (StringHelper.stringsEqual(command.getName(), "OnAdvanced")) 
{ //$NON-NLS-1$
             onAdvanced();
+        } else if (command.getName().equals("OnNewImage")) { //$NON-NLS-1$
+            onNewImage();
         }
     }
 
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 a1f044f..3090138 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
@@ -13,24 +13,24 @@
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
-import org.ovirt.engine.core.common.businessentities.Quota;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
-import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.storage_pool;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
-import 
org.ovirt.engine.core.common.queries.GetAllRelevantQuotasForVdsGroupParameters;
 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.core.compat.NGuid;
 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.Builder;
+import org.ovirt.engine.ui.uicommonweb.builders.Builder.VoidSource;
+import org.ovirt.engine.ui.uicommonweb.builders.BuilderExecutor;
+import org.ovirt.engine.ui.uicommonweb.builders.template.QuotaVmToUnitBuilder;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -669,45 +669,11 @@
         return list;
     }
 
+    @SuppressWarnings("unchecked")
     protected void updateQuotaByCluster(final Guid defaultQuota, final String 
quotaName) {
-        if (getModel().getQuota().getIsAvailable()) {
-            VDSGroup cluster = (VDSGroup) 
getModel().getCluster().getSelectedItem();
-            if (cluster == null) {
-                return;
-            }
-            Frontend.RunQuery(VdcQueryType.GetAllRelevantQuotasForVdsGroup,
-                    new 
GetAllRelevantQuotasForVdsGroupParameters(cluster.getId()), new 
AsyncQuery(getModel(),
-                            new INewAsyncCallback() {
-
-                                @Override
-                                public void OnSuccess(Object model, Object 
returnValue) {
-                                    UnitVmModel vmModel = (UnitVmModel) model;
-                                    ArrayList<Quota> quotaList =
-                                            (ArrayList<Quota>) 
((VdcQueryReturnValue) returnValue).getReturnValue();
-                                    if (quotaList != null && 
!quotaList.isEmpty()) {
-                                        vmModel.getQuota().setItems(quotaList);
-                                    }
-                                    if (defaultQuota != null) {
-                                        boolean hasQuotaInList = false;
-                                        for (Quota quota : quotaList) {
-                                            if 
(quota.getId().equals(defaultQuota)) {
-                                                
vmModel.getQuota().setSelectedItem(quota);
-                                                hasQuotaInList = true;
-                                                break;
-                                            }
-                                        }
-                                        if (!hasQuotaInList) {
-                                            Quota quota = new Quota();
-                                            quota.setId(defaultQuota);
-                                            quota.setQuotaName(quotaName);
-                                            quotaList.add(quota);
-                                            
vmModel.getQuota().setItems(quotaList);
-                                            
vmModel.getQuota().setSelectedItem(quota);
-                                        }
-                                    }
-                                }
-                            }));
-        }
+        new BuilderExecutor<VoidSource, UnitVmModel>(
+                new QuotaVmToUnitBuilder(defaultQuota, quotaName)
+        ).build(new Builder.VoidSource(), getModel());
     }
 
     protected void setupTemplate(VM vm, ListModel model) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id1932f8dfe9f52fcbdcdf83fc4b879f570d95108
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