Gilad Chaplik has uploaded a new change for review.

Change subject: frontend: add disk profile to disk flow
......................................................................

frontend: add disk profile to disk flow

Change-Id: I30047ddcb6364660df6c62355f5f48526859b2fc
Signed-off-by: Gilad Chaplik <gchap...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java
12 files changed, 193 insertions(+), 21 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/13/29813/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
index b288484..a9b1d28 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
@@ -984,6 +984,9 @@
     @DefaultStringValue("Target")
     String targetDisk();
 
+    @DefaultStringValue("Disk Profile")
+    String diskProfile();
+
     @DefaultStringValue("Quota")
     String quotaDisk();
 
@@ -1112,6 +1115,9 @@
     @DefaultStringValue("Data Center")
     String dcVmDiskPopup();
 
+    @DefaultStringValue("Disk Profile")
+    String diskProfileVmDiskPopup();
+
     @DefaultStringValue("Quota")
     String quotaVmDiskPopup();
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java
index e25c949..0b42b6b 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java
@@ -13,6 +13,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.utils.SizeConverter;
 import org.ovirt.engine.core.compat.Version;
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
@@ -124,6 +125,11 @@
     @Path("storageDomain.selectedItem")
     @WithElementId("storageDomain")
     ListModelListBoxEditor<StorageDomain> storageDomainEditor;
+
+    @UiField(provided = true)
+    @Path("diskProfile.selectedItem")
+    @WithElementId("diskProfile")
+    ListModelListBoxEditor<DiskProfile> diskProfileEditor;
 
     @UiField(provided = true)
     @Path("quota.selectedItem")
@@ -268,6 +274,7 @@
         storageDomainEditor.setLabel(constants.storageDomainVmDiskPopup());
         hostListEditor.setLabel(constants.hostVmDiskPopup());
         quotaEditor.setLabel(constants.quotaVmDiskPopup());
+        diskProfileEditor.setLabel(constants.diskProfileVmDiskPopup());
         interfaceEditor.setLabel(constants.interfaceVmDiskPopup());
         volumeTypeEditor.setLabel(constants.allocationDisk());
         storageTypeEditor.setLabel(constants.storageTypeVmDiskPopup());
@@ -291,6 +298,13 @@
             @Override
             public String render(VDS vds) {
                 return vds == null ? "" : vds.getName(); //$NON-NLS-1$
+            }
+        });
+
+        diskProfileEditor = new ListModelListBoxEditor<DiskProfile>(new 
NullSafeRenderer<DiskProfile>() {
+            @Override
+            protected String renderNullSafe(DiskProfile object) {
+                return object.getName();
             }
         });
 
@@ -799,6 +813,7 @@
         volumeTypeEditor.setTabIndex(nextTabIndex++);
         datacenterEditor.setTabIndex(nextTabIndex++);
         storageDomainEditor.setTabIndex(nextTabIndex++);
+        diskProfileEditor.setTabIndex(nextTabIndex++);
         quotaEditor.setTabIndex(nextTabIndex++);
         hostListEditor.setTabIndex(nextTabIndex++);
         storageTypeEditor.setTabIndex(nextTabIndex++);
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml
index 159da4f..f4ef5e4 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml
@@ -110,6 +110,7 @@
                                        <e:ListModelListBoxEditor 
ui:field="volumeTypeEditor" addStyleNames="{style.boxEditor}"/>
                                        <e:ListModelListBoxEditor 
ui:field="datacenterEditor" addStyleNames="{style.boxEditor}"/>
                                        <e:ListModelListBoxEditor 
ui:field="storageDomainEditor" addStyleNames="{style.boxEditor}"/>
+                                       <e:ListModelListBoxEditor 
ui:field="diskProfileEditor" addStyleNames="{style.boxEditor}"/>
                                        <e:ListModelListBoxEditor 
ui:field="quotaEditor" addStyleNames="{style.boxEditor}"/>
                                        <e:ListModelListBoxEditor 
ui:field="hostListEditor" addStyleNames="{style.boxEditor}"/>
                                        <e:ListModelListBoxEditor 
ui:field="storageTypeEditor" addStyleNames="{style.boxEditor}"/>
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java
index 11ae99f..a687567 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java
@@ -4,6 +4,7 @@
 import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.utils.SizeConverter;
 import org.ovirt.engine.ui.common.CommonApplicationConstants;
 import org.ovirt.engine.ui.common.idhandler.HasElementId;
@@ -79,6 +80,10 @@
     ListModelListBoxEditor<StorageDomain> storageListEditor;
 
     @UiField(provided = true)
+    @Path(value = "diskProfile.selectedItem")
+    ListModelListBoxEditor<DiskProfile> diskProfileListEditor;
+
+    @UiField(provided = true)
     @Path(value = "quota.selectedItem")
     ListModelListBoxEditor<Quota> quotaListEditor;
 
@@ -90,6 +95,7 @@
     public int setTabIndexes(int nextTabIndex) {
         diskAliasEditor.setTabIndex(nextTabIndex++);
         storageListEditor.setTabIndex(nextTabIndex++);
+        diskProfileListEditor.setTabIndex(nextTabIndex++);
         return nextTabIndex;
     }
 
@@ -107,6 +113,13 @@
         storageListEditor = new ListModelListBoxEditor<StorageDomain>(new 
StorageDomainFreeSpaceRenderer<StorageDomain>());
 
         sourceStorageListEditor = new 
ListModelListBoxEditor<StorageDomain>(new 
StorageDomainFreeSpaceRenderer<StorageDomain>());
+
+        diskProfileListEditor = new ListModelListBoxEditor<DiskProfile>(new 
NullSafeRenderer<DiskProfile>() {
+            @Override
+            protected String renderNullSafe(DiskProfile object) {
+                return object.getName();
+            }
+        });
 
         quotaListEditor = new ListModelListBoxEditor<Quota>(new 
NullSafeRenderer<Quota>() {
             @Override
@@ -126,6 +139,7 @@
         updateEditorStyle(volumeTypeListEditor, editorStyle);
         updateEditorStyle(sourceStorageListEditor, editorStyle);
         updateEditorStyle(storageListEditor, editorStyle);
+        updateEditorStyle(diskProfileListEditor, editorStyle);
         updateEditorStyle(quotaListEditor, editorStyle);
     }
 
@@ -178,6 +192,8 @@
                 ElementIdUtils.createElementId(elementId, 
"sourceStorageDomain")); //$NON-NLS-1$
         storageListEditor.setElementId(
                 ElementIdUtils.createElementId(elementId, "storageDomain")); 
//$NON-NLS-1$
+        diskProfileListEditor.setElementId(
+                ElementIdUtils.createElementId(elementId, "diskProfile")); 
//$NON-NLS-1$
         quotaListEditor.setElementId(
                 ElementIdUtils.createElementId(elementId, "quota")); 
//$NON-NLS-1$
     }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml
index 14b1e7b..361e8b4 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml
@@ -35,6 +35,7 @@
                <e:ListModelListBoxEditor ui:field="volumeTypeListEditor" />
                <e:ListModelListBoxEditor ui:field="sourceStorageListEditor" />
                <e:ListModelListBoxEditor ui:field="storageListEditor" />
+               <e:ListModelListBoxEditor ui:field="diskProfileListEditor" />
                <e:ListModelListBoxEditor ui:field="quotaListEditor" />
        </g:HorizontalPanel>
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java
index aaf6d7e..d808e7f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java
@@ -94,6 +94,7 @@
             listHeader.addColumn(new EmptyColumn(), constants.sourceDisk(), 
width);
 
         listHeader.addColumn(new EmptyColumn(), constants.targetDisk(), width);
+        listHeader.addColumn(new EmptyColumn(), constants.diskProfile(), 
width);
 
         if (showQuota)
             listHeader.addColumn(new EmptyColumn(), constants.quotaDisk(), 
width);
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java
index 8969e0b..5504b13 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java
@@ -1,7 +1,5 @@
 package org.ovirt.engine.ui.uicommonweb.models.disks;
 
-import com.google.gwt.i18n.client.DateTimeFormat;
-
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -13,6 +11,8 @@
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 import org.ovirt.engine.ui.uicompat.external.StringUtils;
+
+import com.google.gwt.i18n.client.DateTimeFormat;
 
 public class DiskGeneralModel extends EntityModel
 {
@@ -111,6 +111,22 @@
         }
     }
 
+    private String privateDiskProfileName;
+
+    public String getDiskProfileName()
+    {
+        return privateDiskProfileName;
+    }
+
+    public void setDiskProfileName(String value)
+    {
+        if (!ObjectUtils.objectsEqual(privateDiskProfileName, value))
+        {
+            privateDiskProfileName = value;
+            onPropertyChanged(new PropertyChangedEventArgs("DiskProfile 
Name")); //$NON-NLS-1$
+        }
+    }
+
     private String privateQuotaName;
 
     public String getQuotaName()
@@ -205,6 +221,7 @@
 
         if (isImage()) {
             DiskImage diskImage = (DiskImage) disk;
+            setDiskProfileName(diskImage.getDiskProfileName());
             setQuotaName(StringUtils.join(diskImage.getQuotaNames(), ", ")); 
//$NON-NLS-1$
             
setQuotaAvailable(!diskImage.getQuotaEnforcementType().equals(QuotaEnforcementTypeEnum.DISABLED));
         }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
index fc4fc83..80243ff 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java
@@ -11,6 +11,7 @@
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -38,10 +39,10 @@
     protected static final UIConstants constants = 
ConstantsManager.getInstance().getConstants();
     protected static final UIMessages messages = 
ConstantsManager.getInstance().getMessages();
 
-    private final IEventListener quota_storageEventListener = new 
IEventListener() {
+    private final IEventListener storageDomainEventListener = new 
IEventListener() {
         @Override
         public void eventRaised(Event ev, Object sender, EventArgs args) {
-            updateDisksQuota(sender);
+            updateDisks(sender);
         }
     };
 
@@ -63,8 +64,8 @@
         sortDisks();
 
         for (final DiskModel diskModel : disks) {
-            
diskModel.getStorageDomain().getSelectedItemChangedEvent().removeListener(quota_storageEventListener);
-            
diskModel.getStorageDomain().getSelectedItemChangedEvent().addListener(quota_storageEventListener);
+            
diskModel.getStorageDomain().getSelectedItemChangedEvent().removeListener(storageDomainEventListener);
+            
diskModel.getStorageDomain().getSelectedItemChangedEvent().addListener(storageDomainEventListener);
             
diskModel.getStorageDomain().getItemsChangedEvent().addListener(new 
IEventListener() {
                 @Override
                 public void eventRaised(Event ev, Object sender, EventArgs 
args) {
@@ -183,6 +184,48 @@
         }
     }
 
+    private void updateDiskProfile(Guid storageDomainId, final 
ListModel<DiskProfile> isItem) {
+        
Frontend.getInstance().runQuery(VdcQueryType.GetDiskProfilesByStorageDomainId,
+                new IdQueryParameters(storageDomainId),
+                new AsyncQuery(new INewAsyncCallback() {
+
+                    @Override
+                    public void onSuccess(Object model, Object returnValue) {
+                        List<DiskProfile> list =
+                                (List<DiskProfile>) ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                        if (list != null) {
+                            if (isItem == null) {
+                                for (DiskModel diskModel : 
DisksAllocationModel.this.getDisks()) {
+                                    diskModel.getDiskProfile().setItems(list);
+                                    for (DiskProfile diskProfile : list) {
+                                        if (diskModel.getDisk() instanceof 
DiskImage
+                                                &&
+                                                diskProfile.getId()
+                                                        .equals(((DiskImage) 
diskModel.getDisk()).getDiskProfileId())) {
+                                            
diskModel.getDiskProfile().setSelectedItem(diskProfile);
+                                        }
+                                    }
+                                }
+                            } else {
+                                DiskProfile selectedDiskProfile = null;
+                                if (isItem.getSelectedItem() != null) {
+                                    selectedDiskProfile = 
isItem.getSelectedItem();
+                                }
+                                isItem.setItems(list);
+                                if (selectedDiskProfile != null && list.size() 
> 1) {
+                                    for (DiskProfile diskProfile : list) {
+                                        if 
(diskProfile.getId().equals(selectedDiskProfile.getId())) {
+                                            
isItem.setSelectedItem(diskProfile);
+                                        }
+                                    }
+                                }
+                            }
+                        }
+
+                    }
+                }));
+    }
+
     @Override
     protected void onPropertyChanged(PropertyChangedEventArgs e)
     {
@@ -216,17 +259,18 @@
         }
 
         for (DiskModel diskModel : disks) {
-            StorageDomain storageDomain = (StorageDomain) 
diskModel.getStorageDomain().getSelectedItem();
+            StorageDomain storageDomain = 
diskModel.getStorageDomain().getSelectedItem();
             DiskImage diskImage = (DiskImage) diskModel.getDisk();
             diskImage.setStorageIds(new 
ArrayList<Guid>(Arrays.asList(storageDomain.getId())));
-            diskImage.setDiskAlias((String) diskModel.getAlias().getEntity());
-
+            diskImage.setDiskAlias(diskModel.getAlias().getEntity());
+            DiskProfile diskProfile = 
diskModel.getDiskProfile().getSelectedItem();
+            diskImage.setDiskProfileId(diskProfile != null ? 
diskProfile.getId() : null);
             if (diskModel.getQuota().getSelectedItem() != null) {
-                diskImage.setQuotaId(((Quota) 
diskModel.getQuota().getSelectedItem()).getId());
+                
diskImage.setQuotaId(diskModel.getQuota().getSelectedItem().getId());
             }
 
             if (diskModel.getVolumeType().getIsAvailable()) {
-                VolumeType volumeType = (VolumeType) 
diskModel.getVolumeType().getSelectedItem();
+                VolumeType volumeType = 
diskModel.getVolumeType().getSelectedItem();
                 diskImage.setVolumeType(volumeType);
                 
diskImage.setvolumeFormat(AsyncDataProvider.getDiskVolumeFormat(
                         volumeType, storageDomain.getStorageType()));
@@ -244,12 +288,13 @@
         }
     }
 
-    private void updateDisksQuota(Object sender) {
+    private void updateDisks(Object sender) {
         StorageDomain storageDomain = (StorageDomain) ((ListModel) 
sender).getSelectedItem();
         if (storageDomain != null) {
             for (DiskModel innerDisk : disks) {
                 if (innerDisk.getStorageDomain().equals(sender)) {
                     updateQuota(storageDomain.getId(), innerDisk.getQuota());
+                    updateDiskProfile(storageDomain.getId(), 
innerDisk.getDiskProfile());
                     break;
                 }
             }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
index 74a013d..d0ba7e6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
@@ -11,13 +11,13 @@
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
-import org.ovirt.engine.core.common.businessentities.Quota;
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
@@ -200,7 +200,7 @@
 
             // Add prohibition reasons
             if (sourceStorageDomains.isEmpty() || 
destStorageDomains.isEmpty()) {
-                problematicDisks.add((String) disk.getAlias().getEntity());
+                problematicDisks.add(disk.getAlias().getEntity());
                 updateChangeability(disk, isDiskBasedOnTemplate,
                         sourceStorageDomains.isEmpty(), 
destStorageDomains.isEmpty());
             }
@@ -319,14 +319,16 @@
         ArrayList<VdcActionParametersBase> parameters = new 
ArrayList<VdcActionParametersBase>();
         for (DiskModel diskModel : getDisks())
         {
-            StorageDomain destStorageDomain = (StorageDomain) 
diskModel.getStorageDomain().getSelectedItem();
+            StorageDomain destStorageDomain = 
diskModel.getStorageDomain().getSelectedItem();
             StorageDomain sourceStorageDomain =
-                    (StorageDomain) 
diskModel.getSourceStorageDomain().getSelectedItem();
+                    diskModel.getSourceStorageDomain().getSelectedItem();
 
             Guid sourceStorageDomainGuid = sourceStorageDomain != null ? 
sourceStorageDomain.getId() : Guid.Empty;
             DiskImage disk = (DiskImage) diskModel.getDisk();
+            DiskProfile diskProfile = 
diskModel.getDiskProfile().getSelectedItem();
+            disk.setDiskProfileId(diskProfile != null ? diskProfile.getId() : 
null);
             if (diskModel.getQuota().getSelectedItem() != null) {
-                disk.setQuotaId(((Quota) 
diskModel.getQuota().getSelectedItem()).getId());
+                
disk.setQuotaId(diskModel.getQuota().getSelectedItem().getId());
             }
 
             if (destStorageDomain == null || sourceStorageDomain == null) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
index 71086ae..be723e3 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.Date;
+import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
 import org.ovirt.engine.core.common.businessentities.Disk;
@@ -25,6 +26,7 @@
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
@@ -348,7 +350,8 @@
                 VdcQueryType.GetStoragePoolById, 
VdcQueryType.GetNextAvailableDiskAliasNameByVMId,
                 VdcQueryType.GetPermittedStorageDomainsByStoragePoolId, 
VdcQueryType.GetAllVdsByStoragePool,
                 VdcQueryType.GetAllAttachableDisks, 
VdcQueryType.GetAllDisksByVmId,
-                VdcQueryType.GetAllRelevantQuotasForStorage, 
VdcQueryType.OsRepository });
+                VdcQueryType.GetAllRelevantQuotasForStorage, 
VdcQueryType.OsRepository,
+                VdcQueryType.GetDiskProfilesByStorageDomainId });
 
         // Create and set commands
         UICommand onSaveCommand = new UICommand("OnSave", this); //$NON-NLS-1$
@@ -561,6 +564,46 @@
     private void setInterfaces(ArrayList<DiskInterface> diskInterfaces) {
         getDiskInterface().setItems(diskInterfaces);
         setDefaultInterface();
+    }
+
+    private void updateDiskProfiles(StoragePool selectedItem) {
+        StorageDomain storageDomain = getStorageDomain().getSelectedItem();
+        if (storageDomain == null) {
+            return;
+        }
+
+        
Frontend.getInstance().runQuery(VdcQueryType.GetDiskProfilesByStorageDomainId,
+                new IdQueryParameters(storageDomain.getId()),
+                new AsyncQuery(this,
+                        new INewAsyncCallback() {
+                            @Override
+                            public void onSuccess(Object innerModel, Object 
innerReturnValue) {
+                                List<DiskProfile> diskProfiles =
+                                        ((VdcQueryReturnValue) 
innerReturnValue).getReturnValue();
+                                if (diskProfiles != null && 
!diskProfiles.isEmpty()) {
+                                    getDiskProfile().setItems(diskProfiles);
+                                }
+
+                                Guid defaultProfileId =
+                                        getDisk() != null ? ((DiskImage) 
getDisk()).getDiskProfileId() : null;
+                                if (defaultProfileId != null) {
+                                    for (DiskProfile profile : diskProfiles) {
+                                        if 
(profile.getId().equals(defaultProfileId)) {
+                                            
getDiskProfile().setSelectedItem(profile);
+                                            return;
+                                        }
+                                    }
+                                    DiskProfile diskProfile = new 
DiskProfile();
+                                    diskProfile.setId(defaultProfileId);
+                                    if (getDisk() != null) {
+                                        
diskProfile.setName(getDiskImage().getDiskProfileName());
+                                    }
+                                    diskProfiles.add(diskProfile);
+                                    getDiskProfile().setItems(diskProfiles);
+                                    
getDiskProfile().setSelectedItem(diskProfile);
+                                }
+                            }
+                        }, getHash()));
     }
 
     private void updateQuota(StoragePool datacenter) {
@@ -779,6 +822,7 @@
             updateWipeAfterDelete(selectedStorage.getStorageType());
         }
         updateQuota(getDataCenter().getSelectedItem());
+        updateDiskProfiles(getDataCenter().getSelectedItem());
     }
 
     public boolean validate() {
@@ -796,7 +840,10 @@
             getQuota().validateSelectedItem(new IValidation[] { new 
NotEmptyQuotaValidation() });
         }
 
-        return getAlias().getIsValid() && getDescription().getIsValid() && 
getQuota().getIsValid() && getDiskInterface().getIsValid();
+        getDiskProfile().validateSelectedItem(new IValidation[] { new 
NotEmptyValidation() });
+
+        return getAlias().getIsValid() && getDescription().getIsValid() && 
getQuota().getIsValid()
+                && getDiskInterface().getIsValid() && 
getDiskProfile().getIsValid();
     }
 
     protected void forceCreationWarning(ArrayList<String> usedLunsMessages) {
@@ -868,6 +915,9 @@
             setDisk(lunDisk);
         }
 
+        if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) {
+            ((DiskImage) 
getDisk()).setDiskProfileId(getDiskProfile().getSelectedItem().getId());
+        }
         getDisk().setDiskAlias(getAlias().getEntity());
         getDisk().setDiskDescription(getDescription().getEntity());
         getDisk().setDiskInterface(getDiskInterface().getSelectedItem());
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java
index ba87d44..fad3385 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java
@@ -6,6 +6,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
+import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile;
 import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
@@ -25,6 +26,7 @@
     private ListModel<DiskInterface> diskInterface;
     private ListModel<StorageDomain> sourceStorageDomain;
     private ListModel<StorageDomain> storageDomain;
+    private ListModel<DiskProfile> diskProfile;
     private ListModel<Quota> quota;
 
     private boolean pluggedToRunningVm;
@@ -109,6 +111,14 @@
         this.storageDomain = storageDomain;
     }
 
+    public ListModel<DiskProfile> getDiskProfile() {
+        return diskProfile;
+    }
+
+    public void setDiskProfile(ListModel<DiskProfile> diskProfile) {
+        this.diskProfile = diskProfile;
+    }
+
     public ListModel<Quota> getQuota() {
         return quota;
     }
@@ -133,6 +143,7 @@
         setSourceStorageDomain(new ListModel<StorageDomain>());
         setDiskInterface(new ListModel<DiskInterface>());
         setStorageDomain(new ListModel<StorageDomain>());
+        setDiskProfile(new ListModel<DiskProfile>());
 
         setQuota(new ListModel<Quota>());
         getQuota().setIsAvailable(false);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java
index 4cdb86c..0b18d22 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java
@@ -35,6 +35,7 @@
     TextBoxLabel description = new TextBoxLabel();
     TextBoxLabel diskId = new TextBoxLabel();
     TextBoxLabel lunId = new TextBoxLabel();
+    TextBoxLabel diskProfileName = new TextBoxLabel();
     TextBoxLabel quotaName = new TextBoxLabel();
     TextBoxLabel alignment = new TextBoxLabel();
 
@@ -58,7 +59,7 @@
         driver.initialize(this);
 
         // Build a form using the FormBuilder
-        formBuilder = new FormBuilder(formPanel, 1, 6);
+        formBuilder = new FormBuilder(formPanel, 1, 7);
 
         formBuilder.addFormItem(new FormItem(constants.aliasDisk(), alias, 0, 
0));
         formBuilder.addFormItem(new FormItem(constants.descriptionDisk(), 
description, 1, 0));
@@ -70,7 +71,13 @@
                 return getDetailModel().isLun();
             }
         });
-        formBuilder.addFormItem(new FormItem(constants.quota(), quotaName, 5, 
0) {
+        formBuilder.addFormItem(new FormItem(constants.diskProfile(), 
diskProfileName, 5, 0) {
+            @Override
+            public boolean getIsAvailable() {
+                return !getDetailModel().isLun();
+            }
+        });
+        formBuilder.addFormItem(new FormItem(constants.quota(), quotaName, 6, 
0) {
             @Override
             public boolean getIsAvailable() {
                 return getDetailModel().isQuotaAvailable();


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I30047ddcb6364660df6c62355f5f48526859b2fc
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to