Maor Lipchuk has uploaded a new change for review.

Change subject: webadmin: support attaching Cinder disks
......................................................................

webadmin: support attaching Cinder disks

Add Cinder to attach disk dialog.

Change-Id: Ic734dca2ee0e00185666e7e35327980873134170
Bug-Url: https://bugzilla.redhat.com/1185826
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java
3 files changed, 139 insertions(+), 9 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/39226/1

diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java
index b3c4476..a1bd822 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java
@@ -1,5 +1,6 @@
 package org.ovirt.engine.ui.common.widget.uicommon.popup.vm;
 
+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.DiskImage;
 import org.ovirt.engine.core.common.businessentities.storage.DiskInterface;
@@ -82,6 +83,10 @@
     @WithElementId
     EntityModelCellTable<ListModel> lunDiskTable;
 
+    @Ignore
+    @WithElementId
+    EntityModelCellTable<ListModel> cinderDiskTable;
+
     @UiField
     Label message;
 
@@ -100,8 +105,9 @@
         localize();
         ViewIdHandler.idHandler.generateAndSetIds(this);
         initAttachPanelWidget();
-        initInternalDiskTable();
-        initExternalDiskTable();
+        initDiskImagesTable();
+        initLunDisksTable();
+        initCinderDisksTable();
         driver.initialize(this);
     }
 
@@ -113,6 +119,7 @@
         isPluggedEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         imageDiskTable = new EntityModelCellTable<>(allowMultipleSelection);
         lunDiskTable = new EntityModelCellTable<>(allowMultipleSelection);
+        cinderDiskTable = new EntityModelCellTable<>(allowMultipleSelection);
     }
 
     private void initAttachPanelWidget() {
@@ -120,12 +127,13 @@
         VerticalPanel verticalPanel = new VerticalPanel();
         verticalPanel.add(imageDiskTable);
         verticalPanel.add(lunDiskTable);
+        verticalPanel.add(cinderDiskTable);
 
         // Create ValidatedPanelWidget and add tables container
         attachDiskPanel.setWidget(verticalPanel);
     }
 
-    private void initInternalDiskTable() {
+    private void initDiskImagesTable() {
         imageDiskTable.enableColumnResizing();
 
         AbstractTextColumn<EntityModel> aliasColumn = new 
AbstractTextColumn<EntityModel>() {
@@ -235,7 +243,7 @@
         imageDiskTable.setHeight("100%"); //$NON-NLS-1$
     }
 
-    private void initExternalDiskTable() {
+    private void initLunDisksTable() {
         lunDiskTable.enableColumnResizing();
 
         AbstractTextColumn<EntityModel> aliasColumn = new 
AbstractTextColumn<EntityModel>() {
@@ -372,6 +380,98 @@
         lunDiskTable.setHeight("100%"); //$NON-NLS-1$
     }
 
+    private void initCinderDisksTable() {
+        cinderDiskTable.enableColumnResizing();
+
+        AbstractTextColumn<EntityModel> aliasColumn = new 
AbstractTextColumn<EntityModel>() {
+            @Override
+            public String getValue(EntityModel object) {
+                CinderDisk disk = (CinderDisk) (((DiskModel) 
(object.getEntity())).getDisk());
+                return disk.getDiskAlias();
+            }
+        };
+        cinderDiskTable.addColumn(aliasColumn, constants.aliasVmDiskTable(), 
"100px"); //$NON-NLS-1$
+
+        AbstractTextColumn<EntityModel> descriptionColumn = new 
AbstractTextColumn<EntityModel>() {
+            @Override
+            public String getValue(EntityModel object) {
+                CinderDisk disk = (CinderDisk) (((DiskModel) 
(object.getEntity())).getDisk());
+                return disk.getDiskDescription();
+            }
+        };
+        cinderDiskTable.addColumn(descriptionColumn, 
constants.descriptionVmDiskTable(), "100px"); //$NON-NLS-1$
+
+        AbstractDiskSizeColumn<EntityModel> sizeColumn = new 
AbstractDiskSizeColumn<EntityModel>(SizeConverter.SizeUnit.GB) {
+            @Override
+            protected Long getRawValue(EntityModel object) {
+                CinderDisk disk = (CinderDisk) (((DiskModel) 
(object.getEntity())).getDisk());
+                return (long) disk.getSizeInGigabytes();
+            }
+        };
+        cinderDiskTable.addColumn(sizeColumn, 
constants.provisionedSizeVmDiskTable(), "100px"); //$NON-NLS-1$
+
+        AbstractTextColumn<EntityModel> interfaceColumn = new 
AbstractEnumColumn<EntityModel, DiskInterface>() {
+            @Override
+            protected DiskInterface getRawValue(EntityModel object) {
+                Disk disk = (((DiskModel) (object.getEntity())).getDisk());
+                return disk.getDiskInterface();
+            }
+        };
+        cinderDiskTable.addColumn(interfaceColumn, 
constants.interfaceVmDiskPopup(), "90px"); //$NON-NLS-1$
+
+        AbstractTextColumn<EntityModel> cinderVolumeTypeColumn = new 
AbstractTextColumn<EntityModel>() {
+            @Override
+            public String getValue(EntityModel object) {
+                Disk disk = (((DiskModel) (object.getEntity())).getDisk());
+                return disk.getCinderVolumeType();
+            }
+        };
+        cinderDiskTable.addColumn(cinderVolumeTypeColumn, 
constants.cinderVolumeTypeDisk(), "90px"); //$NON-NLS-1$
+
+        cinderDiskTable.addColumn(DisksViewColumns.readOnlyCheckboxColumn,
+                new ImageResourceHeader(resources.readOnlyDiskIcon(), 
SafeHtmlUtils.fromTrustedString(constants.readOnly())),
+                "30px"); //$NON-NLS-1$
+
+        cinderDiskTable.addColumn(new 
AbstractImageResourceColumn<EntityModel>() {
+                                   @Override
+                                   public ImageResource getValue(EntityModel 
object) {
+                                       Disk disk = (((DiskModel) 
(object.getEntity())).getDisk());
+                                       return disk.isBoot() ? 
resources.bootableDiskIcon() : null;
+                                   }
+
+                                   @Override
+                                   public SafeHtml getTooltip(EntityModel 
object) {
+                                       Disk disk = (((DiskModel) 
(object.getEntity())).getDisk());
+                                       if (disk.isBoot()) {
+                                           return 
SafeHtmlUtils.fromSafeConstant(constants.bootableDisk());
+                                       }
+                                       return null;
+                                   }
+                               }, new 
ImageResourceHeader(resources.bootableDiskIcon(), 
SafeHtmlUtils.fromTrustedString(constants.bootable())),
+                "30px"); //$NON-NLS-1$
+
+        cinderDiskTable.addColumn(new 
AbstractImageResourceColumn<EntityModel>() {
+                                   @Override
+                                   public ImageResource getValue(EntityModel 
object) {
+                                       Disk disk = (((DiskModel) 
(object.getEntity())).getDisk());
+                                       return disk.isShareable() ? 
resources.shareableDiskIcon() : null;
+                                   }
+
+                                   @Override
+                                   public SafeHtml getTooltip(EntityModel 
object) {
+                                       Disk disk = (((DiskModel) 
(object.getEntity())).getDisk());
+                                       if (disk.isShareable()) {
+                                           return 
SafeHtmlUtils.fromSafeConstant(constants.shareable());
+                                       }
+                                       return null;
+                                   }
+                               }, new 
ImageResourceHeader(resources.shareableDiskIcon(), 
SafeHtmlUtils.fromTrustedString(constants.shareable())),
+                "30px"); //$NON-NLS-1$
+
+        cinderDiskTable.setWidth("100%", true); //$NON-NLS-1$
+        cinderDiskTable.setHeight("100%"); //$NON-NLS-1$
+    }
+
     @Override
     public void edit(final AttachDiskModel disk) {
         driver.edit(disk);
@@ -405,6 +505,18 @@
                     }
                 });
 
+        diskTypePanel.addRadioButton(
+                constants.cinderDisk(),
+                !disk.getIsNew() && disk.getDisk().getDiskStorageType() == 
DiskStorageType.CINDER,
+                disk.getIsNew(),
+                new ClickHandler() {
+                    @Override
+                    public void onClick(ClickEvent event) {
+                        
disk.getDiskStorageType().setEntity(DiskStorageType.CINDER);
+                        revealDiskPanel(disk);
+                    }
+                });
+
         // Add event handlers
         disk.getPropertyChangedEvent().addListener(new 
IEventListener<PropertyChangedEventArgs>() {
             @Override
@@ -427,12 +539,17 @@
         diskTypePanel.setVisible(isNewLunDiskEnabled);
         imageDiskTable.setVisible(false);
         lunDiskTable.setVisible(false);
+        cinderDiskTable.setVisible(false);
 
         EntityModelCellTable<ListModel> diskTable;
         switch (disk.getDiskStorageType().getEntity()) {
             case LUN:
                 diskTable = lunDiskTable;
                 break;
+            case CINDER:
+                diskTable = cinderDiskTable;
+                break;
+            case IMAGE:
             default:
                 diskTable = imageDiskTable;
                 break;
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java
index 1c9a34e..3a193ef 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java
@@ -32,6 +32,7 @@
         attachableDisksMap = new HashMap<DiskStorageType, 
ListModel<EntityModel<DiskModel>>>();
         attachableDisksMap.put(DiskStorageType.IMAGE, new 
ListModel<EntityModel<DiskModel>>());
         attachableDisksMap.put(DiskStorageType.LUN, new 
ListModel<EntityModel<DiskModel>>());
+        attachableDisksMap.put(DiskStorageType.CINDER, new 
ListModel<EntityModel<DiskModel>>());
     }
 
     public Map<DiskStorageType, ListModel<EntityModel<DiskModel>>> 
getAttachableDisksMap() {
@@ -56,10 +57,12 @@
 
     public void loadAttachableDisks() {
         doLoadAttachableDisks(new GetDisksCallback(DiskStorageType.IMAGE),
-                new GetDisksCallback(DiskStorageType.LUN));
+                new GetDisksCallback(DiskStorageType.LUN),
+                new GetDisksCallback(DiskStorageType.CINDER));
     }
 
-    protected void doLoadAttachableDisks(GetDisksCallback imageCallback, 
GetDisksCallback lunCallback) {
+    protected void doLoadAttachableDisks(GetDisksCallback imageCallback, 
GetDisksCallback lunCallback,
+                                         GetDisksCallback cinderCallback) {
         AsyncDataProvider.getInstance().getAllAttachableDisks(
                 new AsyncQuery(this, imageCallback
                 ), getVm().getStoragePoolId(), getVm().getId());
@@ -67,6 +70,10 @@
         AsyncDataProvider.getInstance().getAllAttachableDisks(
                 new AsyncQuery(this, lunCallback
                 ), null, getVm().getId());
+
+        AsyncDataProvider.getInstance().getAllAttachableDisks(
+                new AsyncQuery(this, cinderCallback
+                ), null, getVm().getId());
     }
 
     class GetDisksCallback implements INewAsyncCallback {
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java
index 581b27a..343fb33 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java
@@ -13,20 +13,26 @@
 public class InstanceImagesAttachDiskModel extends AttachDiskModel {
 
     public void loadAttachableDisks(int os, Version compatibilityVersion, 
final Disk prevSelectedDisk) {
-        // Get internal attachable disks
+        // Get image attachable disks
         AsyncDataProvider.getInstance().getFilteredAttachableDisks(
                 new AsyncQuery(this, new 
InstanceImageGetDisksCallback(DiskStorageType.IMAGE, prevSelectedDisk)
                 ), getVm().getStoragePoolId(), getVm().getId(), os, 
compatibilityVersion);
 
-        // Get external attachable disks
+        // Get lun attachable disks
         AsyncDataProvider.getInstance().getFilteredAttachableDisks(
                 new AsyncQuery(this, new 
InstanceImageGetDisksCallback(DiskStorageType.LUN, prevSelectedDisk)
+                ), null, getVm().getId(), os, compatibilityVersion);
+
+        // Get cinder attachable disks
+        AsyncDataProvider.getInstance().getFilteredAttachableDisks(
+                new AsyncQuery(this, new 
InstanceImageGetDisksCallback(DiskStorageType.CINDER, prevSelectedDisk)
                 ), null, getVm().getId(), os, compatibilityVersion);
     }
 
     public void loadAttachableDisks(Disk prevSelected) {
         doLoadAttachableDisks(new 
InstanceImageGetDisksCallback(DiskStorageType.IMAGE, prevSelected),
-                new InstanceImageGetDisksCallback(DiskStorageType.LUN, 
prevSelected));
+                new InstanceImageGetDisksCallback(DiskStorageType.LUN, 
prevSelected),
+                new InstanceImageGetDisksCallback(DiskStorageType.CINDER, 
prevSelected));
     }
 
     class InstanceImageGetDisksCallback extends GetDisksCallback {


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

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