Maor Lipchuk has uploaded a new change for review.

Change subject: webadmin: add disk dialog - support Cinder
......................................................................

webadmin: add disk dialog - support Cinder

Support Cinder in add/edit disk dialog.

Change-Id: I858c3a5a9426fa5571955b9d1e6ed9b41be891ac
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Maor Lipchuk <[email protected]>
---
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/AbstractModelBoundPopupWidget.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/resources/org/ovirt/engine/core/Common.gwt.xml
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.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/EditDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
10 files changed, 236 insertions(+), 60 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/39046/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 f0c9b8d..565e1c2 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
@@ -1323,6 +1323,9 @@
     @DefaultStringValue("External (Direct LUN)")
     String externalDisk();
 
+    @DefaultStringValue("Cinder")
+    String cinderDisk();
+
     @DefaultStringValue("LUNs > Targets")
     String storageIscsiPopupLunToTargetsTabLabel();
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java
index 1d0cddc..08664dc 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java
@@ -26,13 +26,21 @@
         return nextTabIndex;
     }
 
-    public void disableWidget(Widget widget) {
+    private void setEnabled(Widget widget, boolean enable) {
         if (widget instanceof IndexedPanel) {
             for (int i = 0; i < ((IndexedPanel) widget).getWidgetCount(); i++) 
{
-                disableWidget(((IndexedPanel) widget).getWidget(i));
+                setEnabled(((IndexedPanel) widget).getWidget(i), enable);
             }
         } else if (widget instanceof HasEnabled) {
-            ((HasEnabled) widget).setEnabled(false);
+            ((HasEnabled) widget).setEnabled(enable);
         }
     }
+
+    public void enableWidget(Widget widget) {
+        setEnabled(widget, true);
+    }
+
+    public void disableWidget(Widget widget) {
+        setEnabled(widget, false);
+    }
 }
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 b64c41b..ee22491 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
@@ -299,7 +299,13 @@
                 if ("Message".equals(propName)) { //$NON-NLS-1$
                     if (!StringHelper.isNullOrEmpty(disk.getMessage())) {
                         disableWidget(getWidget());
+                        enableWidget(diskTypePanel);
                         disk.getDefaultCommand().setIsExecutionAllowed(false);
+                        disk.setIsChangable(false);
+                    } else {
+                        enableWidget(getWidget());
+                        disk.getDefaultCommand().setIsExecutionAllowed(true);
+                        disk.setIsChangable(true);
                     }
                 }
             }
@@ -330,6 +336,18 @@
                     }
                 });
 
+        diskTypePanel.addRadioButton(
+                constants.cinderDisk(),
+                disk.getDisk() != null && disk.getDisk().getDiskStorageType() 
== DiskStorageType.CINDER,
+                disk.getIsNew(),
+                new ClickHandler() {
+                    @Override
+                    public void onClick(ClickEvent event) {
+                        
disk.getDiskStorageType().setEntity(DiskStorageType.CINDER);
+                        revealDiskPanel(disk);
+                    }
+                });
+
         if (disk.getStorageModel() == null) {
             storageModel = new StorageModel(new NewEditStorageModelBehavior());
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
index 24204c4..9cfca44 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml
@@ -236,6 +236,7 @@
         <include name="common/businessentities/storage/StorageType.java" />
         <include name="common/businessentities/storage/VolumeFormat.java" />
         <include name="common/businessentities/storage/VolumeType.java" />
+        <include name="common/businessentities/storage/CinderDisk.java" />
 
         <!-- Misc -->
                <include name="common/AuditLogType.java" />
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
index 3e8da18..c72a2e2 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java
@@ -50,6 +50,7 @@
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
 import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
+import org.ovirt.engine.core.common.businessentities.storage.StorageType;
 import org.ovirt.engine.core.common.businessentities.storage.VolumeType;
 import org.ovirt.engine.core.common.scheduling.ClusterPolicy;
 import org.ovirt.engine.core.common.scheduling.PolicyUnit;
@@ -1588,4 +1589,34 @@
             return lexoNumeric.compare(entity1.getName(), entity2.getName());
         }
     }
+
+    public final static Collection<StorageDomain> 
filterStorageDomainsByStorageType(
+            Collection<StorageDomain> source, final StorageType storageType) {
+        return where(source, new IPredicate<StorageDomain>() {
+            @Override
+            public boolean match(StorageDomain source) {
+                return source.getStorageType() == storageType;
+            }
+        });
+    }
+
+    public final static Collection<StorageDomain> 
filterStorageDomainsByStorageDomainType(
+            Collection<StorageDomain> source, final StorageDomainType 
storageDomainType) {
+        return where(source, new IPredicate<StorageDomain>() {
+            @Override
+            public boolean match(StorageDomain source) {
+                return source.getStorageDomainType() == storageDomainType;
+            }
+        });
+    }
+
+    public final static Collection<StorageDomain> 
filterStorageDomainsByStorageStatus(
+            Collection<StorageDomain> source, final StorageDomainStatus 
storageDomainStatus) {
+        return where(source, new IPredicate<StorageDomain>() {
+            @Override
+            public boolean match(StorageDomain source) {
+                return source.getStatus() == storageDomainStatus;
+            }
+        });
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
index a30bfe6..03d6ff4 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java
@@ -79,6 +79,7 @@
 import 
org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface;
 import org.ovirt.engine.core.common.businessentities.network.VnicProfileView;
 import org.ovirt.engine.core.common.businessentities.qos.QosType;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
 import org.ovirt.engine.core.common.businessentities.storage.DiskInterface;
@@ -4048,4 +4049,14 @@
         Frontend.getInstance().runQuery(VdcQueryType.GetUnusedGlusterBricks, 
parameters, asyncQuery);
     }
 
+    public void getCinderVolumeTypesList(AsyncQuery aQuery, Guid 
storageDomainId) {
+        aQuery.converterCallback = new 
IAsyncConverter<List<CinderVolumeType>>() {
+            @Override
+            public List<CinderVolumeType> Convert(Object source, AsyncQuery 
_asyncQuery) {
+                return (List<CinderVolumeType>) source;
+            }
+        };
+        
Frontend.getInstance().runQuery(VdcQueryType.GetCinderVolumeTypesByStorageDomainId,
 new IdQueryParameters(storageDomainId), aQuery);
+    }
+
 }
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 4935bab..3ea621d 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
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum;
 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.StoragePool;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -16,6 +17,8 @@
 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.businessentities.storage.CinderDisk;
+import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType;
 import org.ovirt.engine.core.common.businessentities.storage.Disk;
 import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
@@ -75,6 +78,7 @@
     private ListModel<StorageType> storageType;
     private ListModel<VDS> host;
     private ListModel<StoragePool> dataCenter;
+    private ListModel<String> cinderVolumeType;
 
     private SanStorageModel sanStorageModel;
     private VolumeFormat volumeFormat;
@@ -172,6 +176,15 @@
     public void setDataCenter(ListModel<StoragePool> dataCenter) {
         this.dataCenter = dataCenter;
     }
+
+    public ListModel<String> getCinderVolumeType() {
+        return cinderVolumeType;
+    }
+
+    public void setCinderVolumeType(ListModel<String> cinderVolumeType) {
+        this.cinderVolumeType = cinderVolumeType;
+    }
+
     public SanStorageModel getSanStorageModel() {
         return sanStorageModel;
     }
@@ -287,6 +300,9 @@
         getDiskInterface().getSelectedItemChangedEvent().addListener(this);
 
         setIsVirtioScsiEnabled(new EntityModel<Boolean>());
+
+        setCinderVolumeType(new ListModel<String>());
+        getCinderVolumeType().setIsAvailable(false);
     }
 
     public abstract boolean getIsNew();
@@ -301,20 +317,19 @@
 
     protected abstract LunDisk getLunDisk();
 
+    protected abstract CinderDisk getCinderDisk();
+
     protected abstract void setDefaultInterface();
 
     protected abstract void updateVolumeType(StorageType storageType);
 
     protected boolean isEditEnabled() {
-        return getIsFloating() || getIsNew() || getVm().isDown() || 
!getDisk().getPlugged();
+        return (getIsFloating() || getIsNew() || getVm().isDown() || 
!getDisk().getPlugged()) && getIsChangable();
     }
 
     @Override
     public void initialize() {
         commonInitialize();
-        if (getVm() != null) {
-            updateBootableDiskAvailable();
-        }
     }
 
     public void initialize(List<Disk> currentDisks) {
@@ -340,21 +355,35 @@
             public void onSuccess(Object target, Object returnValue) {
                 DiskModel diskModel = (DiskModel) target;
                 ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
-
-                ArrayList<StorageDomain> filteredStorageDomains = new 
ArrayList<StorageDomain>();
-                for (StorageDomain a : storageDomains) {
-                    if (!a.getStorageDomainType().isIsoOrImportExportDomain() 
&& a.getStatus() == StorageDomainStatus.Active) {
-                        filteredStorageDomains.add(a);
-                    }
+                ArrayList<StorageDomain> filteredStorageDomains = new 
ArrayList<>();
+                switch (getDiskStorageType().getEntity()) {
+                    case IMAGE:
+                        
filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageDomainType(
+                                storageDomains, StorageDomainType.Master));
+                        
filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageDomainType(
+                                storageDomains, StorageDomainType.Data));
+                        break;
+                    case CINDER:
+                        
filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageType(
+                                storageDomains, StorageType.CINDER));
+                        break;
                 }
 
+                filteredStorageDomains = (ArrayList<StorageDomain>) 
Linq.filterStorageDomainsByStorageStatus(
+                        filteredStorageDomains, StorageDomainStatus.Active);
                 Collections.sort(filteredStorageDomains, new 
NameableComparator());
                 StorageDomain storage = 
Linq.firstOrDefault(filteredStorageDomains);
-
-                diskModel.getStorageDomain().setItems(filteredStorageDomains);
-                diskModel.getStorageDomain().setSelectedItem(storage);
-
-                diskModel.setMessage(storage == null ? 
constants.noActiveStorageDomainsInDC() : "");
+                diskModel.getStorageDomain().setItems(filteredStorageDomains, 
storage);
+                if (storage == null) {
+                    switch (getDiskStorageType().getEntity()) {
+                        case IMAGE:
+                            
diskModel.setMessage(constants.noActiveStorageDomainsInDC());
+                            break;
+                        case CINDER:
+                            
diskModel.setMessage(constants.noCinderStorageDomainsInDC());
+                            break;
+                    }
+                }
             }
         }), datacenter.getId(), ActionGroup.CREATE_DISK);
     }
@@ -402,6 +431,7 @@
                     }
                 }
             })), getVm().getStoragePoolId());
+            updateBootableDiskAvailable();
         }
         else {
             AsyncDataProvider.getInstance().getDataCenterList(new 
AsyncQuery(this, new INewAsyncCallback() {
@@ -527,6 +557,27 @@
         setDefaultInterface();
     }
 
+    protected void updateCinderVolumeTypes() {
+        StorageDomain storageDomain = getStorageDomain().getSelectedItem();
+        if (storageDomain == null || storageDomain.getStorageType() != 
StorageType.CINDER) {
+            return;
+        }
+
+        AsyncDataProvider.getInstance().getCinderVolumeTypesList(new 
AsyncQuery(this, new INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object target, Object returnValue) {
+                AbstractDiskModel diskModel = (AbstractDiskModel) target;
+                List<CinderVolumeType> cinderVolumeTypes = 
(ArrayList<CinderVolumeType>) returnValue;
+                List<String> volumeTypesNames = new ArrayList<>();
+                for (CinderVolumeType cinderVolumeType : cinderVolumeTypes) {
+                    volumeTypesNames.add(cinderVolumeType.getName());
+                }
+                volumeTypesNames.add(constants.noCinderVolumeType());
+                diskModel.getCinderVolumeType().setItems(volumeTypesNames);
+            }
+        }), storageDomain.getId());
+    }
+
     private void updateDiskProfiles(StoragePool selectedItem) {
         StorageDomain storageDomain = getStorageDomain().getSelectedItem();
         if (storageDomain == null) {
@@ -626,16 +677,18 @@
         boolean isInVm = getVm() != null;
         boolean isDiskImage = getDiskStorageType().getEntity() == 
DiskStorageType.IMAGE;
         boolean isLunDisk = getDiskStorageType().getEntity() == 
DiskStorageType.LUN;
+        boolean isCinderDisk = getDiskStorageType().getEntity() == 
DiskStorageType.CINDER;
 
-        getSize().setIsAvailable(isDiskImage);
-        getSizeExtend().setIsAvailable(isDiskImage && !getIsNew());
-        getStorageDomain().setIsAvailable(isDiskImage);
+        getSize().setIsAvailable(isDiskImage || isCinderDisk);
+        getSizeExtend().setIsAvailable((isDiskImage || isCinderDisk) && 
!getIsNew());
+        getStorageDomain().setIsAvailable(isDiskImage || isCinderDisk);
         getVolumeType().setIsAvailable(isDiskImage);
         getIsWipeAfterDelete().setIsAvailable(isDiskImage);
         getHost().setIsAvailable(isLunDisk);
         getStorageType().setIsAvailable(isLunDisk);
         getDataCenter().setIsAvailable(!isInVm);
         getDiskProfile().setIsAvailable(isDiskImage);
+        getCinderVolumeType().setIsAvailable(isCinderDisk);
 
         if (!isDiskImage) {
             previousIsQuotaAvailable = getQuota().getIsAvailable();
@@ -643,6 +696,7 @@
 
         getQuota().setIsAvailable(isDiskImage ? previousIsQuotaAvailable : 
false);
 
+        setIsChangable(true);
         updateDatacenters();
     }
 
@@ -748,6 +802,13 @@
         }
     }
 
+    private void updateDiskSize(DiskImage diskImage) {
+        long sizeToAddInGigabytes = Long.valueOf(getSizeExtend().getEntity());
+        if (sizeToAddInGigabytes > 0) {
+            diskImage.setSizeInGigabytes(diskImage.getSizeInGigabytes() + 
sizeToAddInGigabytes);
+        }
+    }
+
     private boolean canDiskBePlugged(VM vm) {
         return vm.getStatus() == VMStatus.Up || vm.getStatus() == 
VMStatus.Down || vm.getStatus() == VMStatus.Paused;
     }
@@ -768,11 +829,14 @@
         updateDirectLunDiskEnabled(datacenter);
         updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : 
null);
 
-        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
-            updateStorageDomains(datacenter);
-        }
-        else {
-            updateHosts(datacenter);
+        switch (getDiskStorageType().getEntity()) {
+            case IMAGE:
+            case CINDER:
+                updateStorageDomains(datacenter);
+                break;
+            default:
+                updateHosts(datacenter);
+                break;
         }
     }
 
@@ -786,6 +850,7 @@
         }
         updateQuota(getDataCenter().getSelectedItem());
         updateDiskProfiles(getDataCenter().getSelectedItem());
+        updateCinderVolumeTypes();
     }
 
     public boolean validate() {
@@ -802,6 +867,8 @@
         if (dataCenter != null && dataCenter.getQuotaEnforcementType() == 
QuotaEnforcementTypeEnum.HARD_ENFORCEMENT) {
             getQuota().validateSelectedItem(new IValidation[] { new 
NotEmptyQuotaValidation() });
         }
+
+        getCinderVolumeType().validateSelectedItem(new IValidation[]{new 
NotEmptyValidation()});
 
         return getAlias().getIsValid() && getDescription().getIsValid() && 
getQuota().getIsValid()
                 && getDiskInterface().getIsValid();
@@ -857,28 +924,30 @@
     }
 
     public void flush() {
-        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
-            DiskImage diskImage = getDiskImage();
-            if (getQuota().getIsAvailable() && getQuota().getSelectedItem() != 
null) {
-                diskImage.setQuotaId(getQuota().getSelectedItem().getId());
-            }
-
-            long sizeToAddInGigabytes = 
Long.valueOf(getSizeExtend().getEntity());
-            if (sizeToAddInGigabytes > 0) {
-                diskImage.setSizeInGigabytes(diskImage.getSizeInGigabytes() + 
sizeToAddInGigabytes);
-            }
-
-            setDisk(diskImage);
-        }
-        else {
-            LunDisk lunDisk = getLunDisk();
-            DiskInterface diskInterface = getDiskInterface().getSelectedItem();
-            if (DiskInterface.VirtIO_SCSI.equals(diskInterface)) {
-                lunDisk.setSgio(!getIsScsiPassthrough().getEntity() ? null :
-                        getIsSgIoUnfiltered().getEntity() ?
-                        ScsiGenericIO.UNFILTERED : ScsiGenericIO.FILTERED);
-            }
-            setDisk(lunDisk);
+        switch (getDiskStorageType().getEntity()) {
+            case LUN:
+                LunDisk lunDisk = getLunDisk();
+                DiskInterface diskInterface = 
getDiskInterface().getSelectedItem();
+                if (DiskInterface.VirtIO_SCSI.equals(diskInterface)) {
+                    lunDisk.setSgio(!getIsScsiPassthrough().getEntity() ? null 
:
+                            getIsSgIoUnfiltered().getEntity() ?
+                                    ScsiGenericIO.UNFILTERED : 
ScsiGenericIO.FILTERED);
+                }
+                setDisk(lunDisk);
+                break;
+            case CINDER:
+                CinderDisk cinderDisk = getCinderDisk();
+                updateDiskSize(cinderDisk);
+                setDisk(cinderDisk);
+                break;
+            case IMAGE:
+                DiskImage diskImage = getDiskImage();
+                if (getQuota().getIsAvailable() && 
getQuota().getSelectedItem() != null) {
+                    diskImage.setQuotaId(getQuota().getSelectedItem().getId());
+                }
+                updateDiskSize(diskImage);
+                setDisk(diskImage);
+                break;
         }
 
         if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java
index f7d7247..c104132 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java
@@ -6,6 +6,7 @@
 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.storage.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
 import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.LunDisk;
@@ -107,6 +108,11 @@
     }
 
     @Override
+    protected CinderDisk getCinderDisk() {
+        return (CinderDisk) getDisk();
+    }
+
+    @Override
     public void store(IFrontendActionAsyncCallback callback) {
         if (getProgress() != null || !validate()) {
             return;
@@ -142,6 +148,7 @@
         getDataCenter().setIsChangable(false);
         getVolumeType().setIsChangable(false);
         getSize().setIsChangable(false);
+        getCinderVolumeType().setIsChangable(false);
 
         if (!isEditEnabled()) {
             getIsShareable().setIsChangable(false);
@@ -160,4 +167,9 @@
     protected void updateVolumeType(StorageType storageType) {
         // do nothing
     }
+
+    @Override
+    protected void updateCinderVolumeTypes() {
+        getCinderVolumeType().setSelectedItem(getDisk().getCinderVolumeType());
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java
index e33eedb9..fda1543 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java
@@ -7,12 +7,14 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
+import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.storage.DiskImage;
 import org.ovirt.engine.core.common.businessentities.storage.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.storage.LUNs;
 import org.ovirt.engine.core.common.businessentities.storage.LunDisk;
 import org.ovirt.engine.core.common.businessentities.storage.StorageType;
+import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.storage.VolumeType;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
@@ -138,19 +140,33 @@
     }
 
     @Override
+    protected CinderDisk getCinderDisk() {
+        return new CinderDisk();
+    }
+
+    @Override
     public void flush() {
         super.flush();
-        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
-            DiskImage diskImage = (DiskImage) getDisk();
-            diskImage.setSizeInGigabytes(getSize().getEntity());
-            diskImage.setVolumeType(getVolumeType().getSelectedItem());
-            diskImage.setvolumeFormat(getVolumeFormat());
-        }
-        else {
-            LunDisk lunDisk = (LunDisk) getDisk();
-            LUNs luns = (LUNs) 
getSanStorageModel().getAddedLuns().get(0).getEntity();
-            luns.setLunType(getStorageType().getSelectedItem());
-            lunDisk.setLun(luns);
+        switch (getDiskStorageType().getEntity()) {
+            case LUN:
+                LunDisk lunDisk = (LunDisk) getDisk();
+                LUNs luns = (LUNs) 
getSanStorageModel().getAddedLuns().get(0).getEntity();
+                luns.setLunType(getStorageType().getSelectedItem());
+                lunDisk.setLun(luns);
+                break;
+            case CINDER:
+                CinderDisk cinderDisk = (CinderDisk) getDisk();
+                cinderDisk.setSizeInGigabytes(getSize().getEntity());
+                cinderDisk.setvolumeFormat(VolumeFormat.RAW);
+                
cinderDisk.setCinderVolumeType(getCinderVolumeType().getSelectedItem().equals(
+                        constants.noCinderVolumeType()) ? "" : 
getCinderVolumeType().getSelectedItem()); //$NON-NLS-1$
+                break;
+            default:
+                DiskImage diskImage = (DiskImage) getDisk();
+                diskImage.setSizeInGigabytes(getSize().getEntity());
+                diskImage.setVolumeType(getVolumeType().getSelectedItem());
+                diskImage.setvolumeFormat(getVolumeFormat());
+                break;
         }
     }
 
@@ -164,7 +180,8 @@
 
         AddDiskParameters parameters = new AddDiskParameters(getVmId(), 
getDisk());
         parameters.setPlugDiskToVm(getIsPlugged().getEntity());
-        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
+        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE ||
+                getDiskStorageType().getEntity() == DiskStorageType.CINDER) {
             StorageDomain storageDomain = getStorageDomain().getSelectedItem();
             parameters.setStorageDomainId(storageDomain.getId());
         }
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
index 7707ab1..142cd3b 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
@@ -1524,6 +1524,9 @@
     @DefaultStringValue("There are no active Storage Domains that you have 
permissions to create a disk on in the relevant Data Center.")
     String noActiveStorageDomainsInDC();
 
+    @DefaultStringValue("There are no available OpenStack Volume storage 
domains that you have permissions to create a disk on in the relevant Data 
Center.")
+    String noCinderStorageDomainsInDC();
+
     @DefaultStringValue("The relevant Data Center is not active.")
     String relevantDCnotActive();
 
@@ -2670,4 +2673,7 @@
 
     @DefaultStringValue("Changing management network is only permitted via the 
'Manage Cluster Networks' dialog.")
     String prohibitManagementNetworkChangeInEditClusterInfoMessage();
+
+    @DefaultStringValue("No volume type")
+    String noCinderVolumeType();
 }


-- 
To view, visit https://gerrit.ovirt.org/39046
To unsubscribe, visit https://gerrit.ovirt.org/settings

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

Reply via email to