Maor Lipchuk has uploaded a new change for review.

Change subject: webadmin: support make template with Cinder disks
......................................................................

webadmin: support make template with Cinder disks

make template dialog - include Cinder disks to support
template creation.

Change-Id: Id6000886d07a1a62150065d3305e537a32f27106
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
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/models/vms/NewTemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
3 files changed, 62 insertions(+), 19 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/39799/1

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 c72a2e2..77f1e52 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
@@ -1619,4 +1619,14 @@
             }
         });
     }
+
+    public final static Collection<StorageDomain> filterStorageDomainById(
+            Collection<StorageDomain> source, final Guid id) {
+        return where(source, new IPredicate<StorageDomain>() {
+            @Override
+            public boolean match(StorageDomain source) {
+                return source.getId().equals(id);
+            }
+        });
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index e5f2b2c..48af3bd 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.List;
 
@@ -15,9 +16,11 @@
 import org.ovirt.engine.core.common.businessentities.VmBase;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
 import 
org.ovirt.engine.core.common.businessentities.comparators.NameableComparator;
+import org.ovirt.engine.core.common.businessentities.storage.CinderDisk;
 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.compat.Guid;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
@@ -214,8 +217,11 @@
                         ArrayList<Disk> vmDisks = (ArrayList<Disk>) 
returnValue;
 
                         for (Disk disk : vmDisks) {
-                            if (disk.getDiskStorageType() == 
DiskStorageType.IMAGE && !disk.isShareable()
-                                    && !disk.isDiskSnapshot()) {
+                            if (disk.isShareable() || disk.isDiskSnapshot()) {
+                                continue;
+                            }
+                            if (disk.getDiskStorageType() == 
DiskStorageType.IMAGE ||
+                                    disk.getDiskStorageType() == 
DiskStorageType.CINDER) {
                                 imageDisks.add(disk);
                             }
                         }
@@ -237,23 +243,27 @@
         Collections.sort(disks, new Linq.DiskByAliasComparer());
         ArrayList<DiskModel> list = new ArrayList<DiskModel>();
 
-        for (Disk disk : disks)
-        {
+        for (Disk disk : disks) {
             DiskModel diskModel = new DiskModel();
-
-            if (disk.getDiskStorageType() == DiskStorageType.IMAGE) {
-                DiskImage diskImage = (DiskImage) disk;
-                EntityModel<Integer> size = new EntityModel<Integer>();
-                size.setEntity((int) diskImage.getSizeInGigabytes());
-                diskModel.setSize(size);
-                ListModel volumes = new ListModel();
-                volumes.setItems((diskImage.getVolumeType() == 
VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new 
VolumeType[] {VolumeType.Preallocated}))
-                        : 
AsyncDataProvider.getInstance().getVolumeTypeList()));
-                volumes.setSelectedItem(diskImage.getVolumeType());
-                diskModel.setVolumeType(volumes);
-                diskModel.getAlias().setEntity(diskImage.getDiskAlias());
+            switch (disk.getDiskStorageType()) {
+                case IMAGE:
+                    DiskImage diskImage = (DiskImage) disk;
+                    diskModel.setSize(new EntityModel<>((int) 
diskImage.getSizeInGigabytes()));
+                    ListModel volumes = new ListModel();
+                    volumes.setItems((diskImage.getVolumeType() == 
VolumeType.Preallocated ? new ArrayList<>(Arrays.asList(new 
VolumeType[]{VolumeType.Preallocated}))
+                            : 
AsyncDataProvider.getInstance().getVolumeTypeList()), 
diskImage.getVolumeType());
+                    diskModel.setVolumeType(volumes);
+                    diskModel.getAlias().setEntity(diskImage.getDiskAlias());
+                    break;
+                case CINDER:
+                    CinderDisk cinderDisk = (CinderDisk) disk;
+                    diskModel.setSize(new EntityModel<>((int) 
cinderDisk.getSizeInGigabytes()));
+                    ListModel volumeTypes = new ListModel();
+                    volumeTypes.setItems(new 
ArrayList<>(Arrays.asList(cinderDisk.getVolumeType())), 
cinderDisk.getVolumeType());
+                    diskModel.setVolumeType(volumeTypes);
+                    diskModel.getAlias().setEntity(cinderDisk.getDiskAlias());
+                    break;
             }
-
             diskModel.setDisk(disk);
             list.add(diskModel);
         }
@@ -337,10 +347,11 @@
                     @Override
                     public void onSuccess(Object target, Object returnValue) {
                         NewTemplateVmModelBehavior behavior = 
NewTemplateVmModelBehavior.this;
+                        ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
                         ArrayList<StorageDomain> activeStorageDomainList =
                                 new ArrayList<StorageDomain>();
 
-                        for (StorageDomain storageDomain : 
(ArrayList<StorageDomain>) returnValue)
+                        for (StorageDomain storageDomain : storageDomains)
                         {
                             if (storageDomain.getStatus() == 
StorageDomainStatus.Active
                                     && 
storageDomain.getStorageDomainType().isDataDomain())
@@ -401,9 +412,16 @@
 
                         Collections.sort(activeStorageDomainList, new 
NameableComparator());
                         if (disks != null) {
-                            for (DiskModel diskModel : disks) {
+                            ArrayList<DiskModel> diskImages = 
Linq.filterDisksByType(disks, DiskStorageType.IMAGE);
+                            for (DiskModel diskModel : diskImages) {
                                 
diskModel.getStorageDomain().setItems(activeStorageDomainList);
                                 
diskModel.getQuota().setItems(behavior.getModel().getQuota().getItems());
+                            }
+                            ArrayList<DiskModel> cinderDisks = 
Linq.filterDisksByType(disks, DiskStorageType.CINDER);
+                            if (!cinderDisks.isEmpty()) {
+                                Collection<StorageDomain> cinderStorageDomains 
=
+                                        
Linq.filterStorageDomainsByStorageType(storageDomains, StorageType.CINDER);
+                                initStorageDomainsForCinderDisks(cinderDisks, 
cinderStorageDomains);
                             }
                         }
                     }
@@ -412,6 +430,18 @@
                 ActionGroup.CREATE_TEMPLATE);
     }
 
+    private void initStorageDomainsForCinderDisks(ArrayList<DiskModel> 
cinderDisks, Collection<StorageDomain> cinderStorageDomains) {
+        for (DiskModel diskModel : cinderDisks) {
+            CinderDisk cinderDisk = (CinderDisk) diskModel.getDisk();
+            diskModel.getStorageDomain().setItems(Linq.filterStorageDomainById(
+                    cinderStorageDomains, cinderDisk.getStorageIds().get(0)));
+
+            diskModel.getDiskProfile().setIsChangable(false);
+            diskModel.getDiskProfile().setChangeProhibitionReason(
+                    
ConstantsManager.getInstance().getConstants().notSupportedForCinderDisks());
+        }
+    }
+
     private void disableNewTemplateModel(String errMessage)
     {
         getModel().setIsValid(false);
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 0447ce7..cff1e79 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
@@ -2697,4 +2697,7 @@
 
     @DefaultStringValue("Warning : Recommendations for geo-replication not met 
-")
     String geoReplicationRecommendedConfigViolation();
+
+    @DefaultStringValue("Not supported for Cinder disks")
+    String notSupportedForCinderDisks();
 }


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

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

Reply via email to