Ramesh N has uploaded a new change for review.

Change subject: gluster: add brick list to add bricks dialog
......................................................................

gluster: add brick list to add bricks dialog

  Change the Add Brick dialog to show all the available
bricks from the host. This will be enabled only for the
cluster levels >=3.6. Still there will be an option for the user
to manually enter the bricks dir.

Change-Id: I5e5502cf5a1f551521010214b14414c07f43c2c2
Signed-off-by: Ramesh Nachimuthu <rnach...@redhat.com>
---
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/gluster/VolumeBrickListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml
7 files changed, 126 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/92/40192/1

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 0cb5867..19556db 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
@@ -3979,4 +3979,16 @@
                 aQuery);
     }
 
+    public static void getUnusedBricksFromServer(AsyncQuery asyncQuery, Guid 
hostId) {
+        asyncQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery)
+            {
+                return source;
+            }
+        };
+        VdsIdParametersBase parameters = new VdsIdParametersBase(hostId);
+        Frontend.getInstance().runQuery(VdcQueryType.GetUnusedGlusterBricks, 
parameters, asyncQuery);
+    }
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java
index 2868afa..f59ab19 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java
@@ -350,7 +350,7 @@
                 VDSGroup cluster = (VDSGroup) result;
                 volumeBrickModel.getForce()
                         
.setIsAvailable(GlusterFeaturesUtil.isGlusterForceAddBricksSupported(cluster.getcompatibility_version()));
-
+                
volumeBrickModel.setIsBrickProvisioningSupported(GlusterFeaturesUtil.isGlusterBrickProvisioningSupported(cluster.getcompatibility_version()));
                 AsyncQuery _asyncQueryInner = new AsyncQuery();
                 _asyncQueryInner.setModel(model);
                 _asyncQueryInner.asyncCallback = new INewAsyncCallback() {
@@ -829,7 +829,7 @@
 
         model.startProgress(null);
 
-        boolean isMigrate = (Boolean) model.getMigrateData().getEntity();
+        boolean isMigrate = model.getMigrateData().getEntity();
 
         Frontend.getInstance().runAction(isMigrate ? 
VdcActionType.StartRemoveGlusterVolumeBricks
                 : VdcActionType.GlusterVolumeRemoveBricks, parameter, new 
IFrontendActionAsyncCallback() {
@@ -1239,13 +1239,13 @@
             return;
         }
 
-        VDS server = (VDS) replaceBrickModel.getServers().getSelectedItem();
+        VDS server = replaceBrickModel.getServers().getSelectedItem();
 
         GlusterBrickEntity newBrick = new GlusterBrickEntity();
         newBrick.setVolumeId(volumeEntity.getId());
         newBrick.setServerId(server.getId());
         newBrick.setServerName(server.getHostName());
-        newBrick.setBrickDirectory((String) 
replaceBrickModel.getBrickDirectory().getEntity());
+        
newBrick.setBrickDirectory(replaceBrickModel.getBrickDirectory().getEntity());
 
         replaceBrickModel.startProgress(null);
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java
index 640e91b..6bac469 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickModel.java
@@ -11,7 +11,11 @@
 import 
org.ovirt.engine.core.common.businessentities.comparators.LexoNumericComparator;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterBrickEntity;
 import org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeType;
+import org.ovirt.engine.core.common.businessentities.gluster.StorageDevice;
+import org.ovirt.engine.ui.frontend.AsyncQuery;
+import org.ovirt.engine.ui.frontend.INewAsyncCallback;
 import org.ovirt.engine.ui.uicommonweb.UICommand;
+import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider;
 import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
 import org.ovirt.engine.ui.uicommonweb.models.ListModel;
 import org.ovirt.engine.ui.uicommonweb.models.Model;
@@ -33,6 +37,8 @@
 
     ListModel<VDS> servers;
     EntityModel<String> brickDirectory;
+    ListModel<String> bricksFromServer;
+    EntityModel<Boolean> showBricksList;
 
     ListModel<EntityModel<GlusterBrickEntity>> bricks;
 
@@ -59,12 +65,13 @@
 
         setServers(new ListModel<VDS>());
         setBrickDirectory(new EntityModel<String>());
+        setBricksFromServer(new ListModel<String>());
+        setShowBricksList(new EntityModel<Boolean>());
 
         setBricks(new ListModel<EntityModel<GlusterBrickEntity>>());
 
         setForce(new EntityModel<Boolean>());
         getForce().setEntity(false);
-
         setAddBrickCommand(new UICommand("AddBrick", this)); //$NON-NLS-1$
         setRemoveBricksCommand(new UICommand("RemoveBricks", this)); 
//$NON-NLS-1$
         setRemoveAllBricksCommand(new UICommand("RemoveAllBricks", this)); 
//$NON-NLS-1$
@@ -81,6 +88,22 @@
         getMoveBricksUpCommand().setIsExecutionAllowed(false);
         getMoveBricksDownCommand().setIsExecutionAllowed(false);
 
+        getShowBricksList().getEntityChangedEvent().addListener(new 
IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                if (getShowBricksList().getEntity()) {
+                    // Show the brick list and hide the text box for entering 
brick dir
+                    getBricksFromServer().setIsAvailable(true);
+                    getBrickDirectory().setIsAvailable(false);
+                    updateBricksFromHost();
+                } else {
+                    // Hide the brick list and show the text box for entering 
brick dir
+                    getBricksFromServer().setIsAvailable(false);
+                    getBrickDirectory().setIsAvailable(true);
+                }
+            }
+
+        });
         getBricks().getSelectedItemsChangedEvent().addListener(new 
IEventListener() {
 
             @Override
@@ -104,6 +127,41 @@
                 }
             }
         });
+
+        getServers().getSelectedItemChangedEvent().addListener(new 
IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                if (getShowBricksList().getEntity()) {
+                    updateBricksFromHost();
+                }
+            }
+
+        });
+    }
+
+    private void updateBricksFromHost() {
+        VDS selectedServer = getServers().getSelectedItem();
+        if (selectedServer != null) {
+            AsyncDataProvider.getUnusedBricksFromServer(new AsyncQuery(this, 
new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object returnValue) {
+                    List<StorageDevice> bricks = (List<StorageDevice>) 
returnValue;
+                    List<String> lvNames = new ArrayList<String>();
+                    for (StorageDevice brick : bricks) {
+                        if (brick.getMountPoint() != null && 
!brick.getMountPoint().isEmpty()) {
+                            lvNames.add(brick.getMountPoint());
+                        }
+                    }
+                    getBricksFromServer().setItems(lvNames);
+                }
+            }), selectedServer.getId());
+        }
+
+    }
+
+    public void setIsBrickProvisioningSupported(boolean 
isBrickProvisioningSupported) {
+        getShowBricksList().setIsAvailable(isBrickProvisioningSupported);
+        getShowBricksList().setEntity(isBrickProvisioningSupported);
     }
 
     private void updateSelectedBricksActions()
@@ -272,6 +330,12 @@
     private void addBrick()
     {
         VDS server = servers.getSelectedItem();
+        String brickDir = null;
+        if (getShowBricksList().getEntity()) {
+            brickDir = bricksFromServer.getSelectedItem();
+        } else {
+            brickDir = getBrickDirectory().getEntity();
+        }
 
         if (server == null)
         {
@@ -279,15 +343,14 @@
             return;
         }
 
-        if (brickDirectory.getEntity() == null || 
brickDirectory.getEntity().trim().length() == 0)
+        if (brickDir == null || brickDir.trim().length() == 0)
         {
             
setMessage(ConstantsManager.getInstance().getConstants().emptyBrickDirectoryMsg());
             return;
         }
 
-        brickDirectory.setEntity(brickDirectory.getEntity().trim());
-
-        if (!validateBrickDirectory(brickDirectory.getEntity()))
+        brickDir = brickDir.trim();
+        if (!validateBrickDirectory(brickDir))
         {
             return;
         }
@@ -295,7 +358,7 @@
         GlusterBrickEntity brickEntity = new GlusterBrickEntity();
         brickEntity.setServerId(server.getId());
         brickEntity.setServerName(server.getHostName());
-        brickEntity.setBrickDirectory(brickDirectory.getEntity());
+        brickEntity.setBrickDirectory(brickDir);
 
         EntityModel<GlusterBrickEntity> entityModel = new 
EntityModel<GlusterBrickEntity>(brickEntity);
         List<EntityModel<GlusterBrickEntity>> items = 
(List<EntityModel<GlusterBrickEntity>>) bricks.getItems();
@@ -701,4 +764,22 @@
         }
     }
 
+    public ListModel<String> getBricksFromServer() {
+        return bricksFromServer;
+    }
+
+    public void setBricksFromServer(ListModel<String> bricksFromServer) {
+        this.bricksFromServer = bricksFromServer;
+    }
+
+    public EntityModel<Boolean> getShowBricksList() {
+        return showBricksList;
+    }
+
+    public void setShowBricksList(EntityModel<Boolean> showBricksList) {
+        this.showBricksList = showBricksList;
+    }
+
+
+
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java
index 6bcdeda..9a3b91a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeModel.java
@@ -302,6 +302,7 @@
                     
GlusterFeaturesUtil.isGlusterForceAddBricksSupported(cluster.getcompatibility_version());
             
volumeBrickModel.getForce().setIsAvailable(isForceAddBrickSupported);
             volumeBrickModel.getForce().setEntity(isForceAddBricks() && 
isForceAddBrickSupported);
+            
volumeBrickModel.setIsBrickProvisioningSupported(GlusterFeaturesUtil.isGlusterBrickProvisioningSupported(cluster.getCompatibilityVersion()));
         }
 
         setWindow(volumeBrickModel);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
index 61d1df3..cd7ce27 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java
@@ -2980,6 +2980,9 @@
     @DefaultStringValue("Brick Directory")
     String brickDirectoryBricks();
 
+    @DefaultStringValue("Show available bricks from host")
+    String addBricksShowBricksFromHost();
+
     @DefaultStringValue("Bricks")
     String bricksHeaderLabel();
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java
index e0d8cc2..40c0098 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.java
@@ -80,10 +80,20 @@
     @WithElementId
     ListModelListBoxEditor<VDS> serverEditor;
 
+    @UiField(provided = true)
+    @Path(value = "showBricksList.entity")
+    @WithElementId
+    EntityModelCheckBoxEditor showBricksListEditor;
+
     @UiField
     @Path(value = "brickDirectory.entity")
     @WithElementId
     StringEntityModelTextBoxEditor exportDirEditor;
+
+    @UiField
+    @Path(value = "bricksFromServer.selectedItem")
+    @WithElementId
+    ListModelListBoxEditor<String> bricksFromServerList;
 
     @UiField
     @WithElementId
@@ -149,6 +159,7 @@
     private void initEditors() {
         volumeTypeEditor = new EntityModelLabelEditor<GlusterVolumeType>(new 
EnumRenderer<GlusterVolumeType>());
         forceEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
+        showBricksListEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
         serverEditor = new ListModelListBoxEditor<VDS>(new 
NullSafeRenderer<VDS>() {
             @Override
             public String renderNullSafe(VDS vds) {
@@ -246,6 +257,8 @@
         bricksHeader.setText(constants.bricksHeaderLabel());
         serverEditor.setLabel(constants.serverBricks());
         exportDirEditor.setLabel(constants.brickDirectoryBricks());
+        bricksFromServerList.setLabel(constants.brickDirectoryBricks());
+        showBricksListEditor.setLabel(constants.addBricksShowBricksFromHost());
         addBrickButton.setLabel(constants.addBricksButtonLabel());
         removeBricksButton.setLabel(constants.removeBricksButtonLabel());
         removeAllBricksButton.setLabel(constants.removeAllBricksButtonLabel());
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml
index 9b32ec6..878ddb0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/AddBrickPopupView.ui.xml
@@ -25,6 +25,10 @@
                        padding-bottom: 5px;
                }
 
+        .showBricksListCheckBox {
+                       padding-left: 92px;
+                       width: 300px;
+               }
                .messageLabel {
                        color: #FF0000;
                        left: 10px;
@@ -84,6 +88,8 @@
                                <g:HorizontalPanel 
verticalAlignment="ALIGN_BOTTOM">
                                        <g:VerticalPanel>
                                                <e:ListModelListBoxEditor 
ui:field="serverEditor"/>
+                                               <ge:EntityModelCheckBoxEditor 
ui:field="showBricksListEditor" addStyleNames="{style.showBricksListCheckBox}"/>
+                                               <e:ListModelListBoxEditor 
ui:field="bricksFromServerList" />
                                                
<ge:StringEntityModelTextBoxEditor ui:field="exportDirEditor" />
                                        </g:VerticalPanel>
                                        <g:HorizontalPanel spacing="5">


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I5e5502cf5a1f551521010214b14414c07f43c2c2
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5-gluster
Gerrit-Owner: Ramesh N <rnach...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to