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

Adding the ability to set DiskProfile for disk image.
Added to all Disk flows, including:
Add/update disk, inner disk in a VM/template/import flows.

For more information see http://www.ovirt.org/Features/blkio-support

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, 208 insertions(+), 23 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/31833/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 5ad8b24..a06924e 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 078087a..4ab675b 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")
@@ -273,6 +279,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());
@@ -297,6 +304,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();
             }
         });
 
@@ -806,6 +820,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 b7003ca..616a8c9 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
@@ -114,6 +114,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..f8039e3 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;
     }
 
@@ -108,6 +114,13 @@
 
         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
             public String renderNullSafe(Quota quota) {
@@ -117,7 +130,7 @@
     }
 
     void updateStyles(Boolean isNarrowStyle) {
-        String editorStyle = isNarrowStyle ? style.editorContentNarrow() : 
style.editorContent();
+        String editorStyle = style.editorContentNarrow();
 
         updateEditorStyle(diskAliasLabel, editorStyle);
         updateEditorStyle(diskAliasEditor, editorStyle);
@@ -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..86835ca 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
@@ -81,7 +81,7 @@
     }
 
     void updateListHeader(DisksAllocationModel model) {
-        String width = showQuota ? "85px" : "100px"; //$NON-NLS-1$ 
//$NON-NLS-2$
+        String width = "85px"; //$NON-NLS-1$
         listHeader = new EntityModelCellTable(false, (Resources) GWT.create(
                 PopupSimpleTableResources.class), true);
         listHeader.addColumn(new EmptyColumn(), constants.aliasDisk(), width);
@@ -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..96ad93e 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
@@ -6,11 +6,13 @@
 import java.util.HashMap;
 import java.util.List;
 
+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.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 +40,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 +65,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 +185,54 @@
         }
     }
 
+    private void updateDiskProfile(Guid storageDomainId, final 
ListModel<DiskProfile> diskProfiles) {
+        
Frontend.getInstance().runQuery(VdcQueryType.GetDiskProfilesByStorageDomainId,
+                new IdQueryParameters(storageDomainId),
+                new AsyncQuery(new INewAsyncCallback() {
+
+                    @Override
+                    public void onSuccess(Object model, Object returnValue) {
+                        List<DiskProfile> fetchedDiskProfiles =
+                                (List<DiskProfile>) ((VdcQueryReturnValue) 
returnValue).getReturnValue();
+                        
DisksAllocationModel.this.setDiskProfilesList(diskProfiles, 
fetchedDiskProfiles);
+
+                    }
+
+                }));
+    }
+
+    private void setDiskProfilesList(final ListModel<DiskProfile> 
diskProfiles, List<DiskProfile> fetchedDiskProfiles) {
+        if (fetchedDiskProfiles != null) {
+            // normal flow, set items and selected item according to current 
selected.
+            if (diskProfiles == null) {
+                for (DiskModel diskModel : getDisks()) {
+                    diskModel.getDiskProfile().setItems(fetchedDiskProfiles);
+                    for (DiskProfile diskProfile : fetchedDiskProfiles) {
+                        if (diskModel.getDisk().getDiskStorageType() == 
DiskStorageType.IMAGE
+                                && diskProfile.getId().equals(((DiskImage) 
diskModel.getDisk()).getDiskProfileId())) {
+                            
diskModel.getDiskProfile().setSelectedItem(diskProfile);
+                        }
+                    }
+                }
+                // inner model disk profiles
+            } else {
+                DiskProfile selectedDiskProfile = null;
+                if (diskProfiles.getSelectedItem() != null) {
+                    selectedDiskProfile = diskProfiles.getSelectedItem();
+                }
+                diskProfiles.setItems(fetchedDiskProfiles);
+                if (selectedDiskProfile != null && fetchedDiskProfiles.size() 
> 1) {
+                    for (DiskProfile diskProfile : fetchedDiskProfiles) {
+                        if 
(diskProfile.getId().equals(selectedDiskProfile.getId())) {
+                            diskProfiles.setSelectedItem(diskProfile);
+                            break;
+                        }
+                    }
+                }
+            }
+        }
+    }
+
     @Override
     protected void onPropertyChanged(PropertyChangedEventArgs e)
     {
@@ -216,17 +266,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 +295,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..2d2cdb7 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) {
@@ -350,6 +352,7 @@
 
         MoveOrCopyImageGroupParameters params = 
createParameters(sourceStorageDomainGuid, destStorageDomainGuid, disk);
         params.setQuotaId(disk.getQuotaId());
+        params.setDiskProfileId(disk.getDiskProfileId());
 
         parameters.add(params);
     }
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 cc6d564..d33b508 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;
@@ -365,7 +367,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$
@@ -578,6 +581,51 @@
     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 
value) {
+                                
AbstractDiskModel.this.setDiskProfilesList((List<DiskProfile>) 
((VdcQueryReturnValue) value).getReturnValue());
+                            }
+
+                        }, getHash()));
+    }
+
+    private void setDiskProfilesList(List<DiskProfile> diskProfiles) {
+        // set disk profiles
+        if (diskProfiles != null && !diskProfiles.isEmpty()) {
+            getDiskProfile().setItems(diskProfiles);
+        }
+        // handle disk profile selected item
+        Guid defaultProfileId =
+                getDisk() != null ? ((DiskImage) getDisk()).getDiskProfileId() 
: null;
+        if (defaultProfileId != null) {
+            for (DiskProfile profile : diskProfiles) {
+                if (profile.getId().equals(defaultProfileId)) {
+                    getDiskProfile().setSelectedItem(profile);
+                    return;
+                }
+            }
+            // set dummy disk profile (if not fetched because of permissions, 
and it's attached to disk.
+            DiskProfile diskProfile = new DiskProfile();
+            diskProfile.setId(defaultProfileId);
+            if (getDisk() != null) {
+                diskProfile.setName(getDiskImage().getDiskProfileName());
+            }
+            diskProfiles.add(diskProfile);
+            getDiskProfile().setItems(diskProfiles);
+            getDiskProfile().setSelectedItem(diskProfile);
+        }
     }
 
     private void updateQuota(StoragePool datacenter) {
@@ -819,6 +867,7 @@
             updateWipeAfterDelete(selectedStorage.getStorageType());
         }
         updateQuota(getDataCenter().getSelectedItem());
+        updateDiskProfiles(getDataCenter().getSelectedItem());
     }
 
     public boolean validate() {
@@ -836,7 +885,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) {
@@ -909,6 +961,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/31833
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I30047ddcb6364660df6c62355f5f48526859b2fc
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
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