Kanagaraj M has uploaded a new change for review.

Change subject: webadmin: remove bricks with migration support
......................................................................

webadmin: remove bricks with migration support

Added a new Checkbox 'Migrate Data' to the Remove Bricks
Confirmation popup. And a warning message in the bottom
explaining the necessity to migrate the data before remove.

The bricks in the confirmation popup is wrapped inside
a ScrollPanel to avoid the overflowing if more number of
bricks are selected.

Change-Id: I8aae4548661ff1cb9f93a14ab66b6c41bc201bbd
Signed-off-by: Kanagaraj M <kmayi...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/RemoveBrickModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/VolumeBrickListModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.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/gin/PresenterModule.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/gluster/RemoveBrickPopupPresenterWidget.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.java
A 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.ui.xml
9 files changed, 311 insertions(+), 61 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/01/19201/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/RemoveBrickModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/RemoveBrickModel.java
index 8fa55a7..d707c2e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/RemoveBrickModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/gluster/RemoveBrickModel.java
@@ -1,15 +1,26 @@
 package org.ovirt.engine.ui.uicommonweb.models.gluster;
 
-import org.ovirt.engine.ui.uicommonweb.models.Model;
+import org.ovirt.engine.ui.uicommonweb.models.ConfirmationModel;
+import org.ovirt.engine.ui.uicommonweb.models.EntityModel;
+import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
-public class RemoveBrickModel extends Model {
-    int replicaCount;
-    int stripeCount;
-    boolean isReduceReplica;
-    String validationMessage;
+public class RemoveBrickModel extends ConfirmationModel {
+    private int replicaCount;
+
+    private int stripeCount;
+
+    private boolean isReduceReplica;
+
+    private String validationMessage;
+
+    private EntityModel migrateData;
+
+    private boolean isMigrationSupported;
 
     public RemoveBrickModel() {
         setReduceReplica(false);
+        setMigrateData(new EntityModel(true));
+        setMigrationSupported(true);
     }
 
     public int getReplicaCount() {
@@ -44,4 +55,22 @@
         this.validationMessage = validationMessage;
     }
 
+    public EntityModel getMigrateData() {
+        return migrateData;
+    }
+
+    public void setMigrateData(EntityModel migrateData) {
+        this.migrateData = migrateData;
+    }
+
+    public boolean isMigrationSupported() {
+        return isMigrationSupported;
+    }
+
+    public void setMigrationSupported(boolean isMigrationSupported) {
+        if (this.isMigrationSupported != isMigrationSupported) {
+            this.isMigrationSupported = isMigrationSupported;
+            onPropertyChanged(new 
PropertyChangedEventArgs("IsMigrationSupported")); //$NON-NLS-1$
+        }
+    }
 }
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 40cfc4f..202b671 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
@@ -432,65 +432,58 @@
         GlusterVolumeEntity volumeEntity = (GlusterVolumeEntity) getEntity();
 
         RemoveBrickModel removeBrickModel = new RemoveBrickModel();
+        removeBrickModel.setHashName("volume_remove_bricks"); //$NON-NLS-1$
+        
removeBrickModel.setTitle(ConstantsManager.getInstance().getConstants().removeBricksTitle());
+        setWindow(removeBrickModel);
+
         removeBrickModel.setReplicaCount(volumeEntity.getReplicaCount());
         removeBrickModel.setStripeCount(volumeEntity.getStripeCount());
-
-        if (!canRemoveBricks(volumeEntity.getVolumeType(),
-                Linq.<GlusterBrickEntity> cast(getSelectedItems()),
-                volumeEntity.getBricks(),
-                removeBrickModel))
-        {
-            ConfirmationModel model = new ConfirmationModel();
-            setWindow(model);
-            model.setEntity(removeBrickModel.isReduceReplica());
-            
model.setTitle(ConstantsManager.getInstance().getConstants().removeBricksTitle());
-            model.setMessage(removeBrickModel.getValidationMessage());
-            model.setHashName("volume_remove_bricks_invalid"); //$NON-NLS-1$
-
-            UICommand command2 = new UICommand("Cancel", this); //$NON-NLS-1$
-            
command2.setTitle(ConstantsManager.getInstance().getConstants().close());
-            command2.setIsCancel(true);
-            model.getCommands().add(command2);
-            return;
-        }
-
-        ConfirmationModel model = new ConfirmationModel();
-        setWindow(model);
-        model.setEntity(removeBrickModel.isReduceReplica());
-        
model.setTitle(ConstantsManager.getInstance().getConstants().removeBricksTitle());
-        model.setHashName("volume_remove_bricks"); //$NON-NLS-1$
-        if (removeBrickModel.isReduceReplica())
-        {
-            model.setMessage(ConstantsManager.getInstance()
-                    .getMessages()
-                    
.removeBricksReplicateVolumeMessage(volumeEntity.getReplicaCount(),
-                            volumeEntity.getReplicaCount() - 1));
-        }
-        else
-        {
-            
model.setMessage(ConstantsManager.getInstance().getConstants().removeBricksMessage());
-        }
-        
model.setNote(ConstantsManager.getInstance().getConstants().removeBricksWarning());
 
         ArrayList<String> list = new ArrayList<String>();
         for (GlusterBrickEntity item : Linq.<GlusterBrickEntity> 
cast(getSelectedItems()))
         {
             list.add(item.getQualifiedName());
         }
-        model.setItems(list);
+        removeBrickModel.setItems(list);
 
-        UICommand command1 = new UICommand("OnRemove", this); //$NON-NLS-1$
-        command1.setTitle(ConstantsManager.getInstance().getConstants().ok());
-        command1.setIsDefault(true);
-        model.getCommands().add(command1);
+        if (!validateRemoveBricks(volumeEntity.getVolumeType(),
+                Linq.<GlusterBrickEntity> cast(getSelectedItems()),
+                volumeEntity.getBricks(),
+                removeBrickModel))
+        {
+            removeBrickModel.setMigrationSupported(false);
+            
removeBrickModel.setMessage(removeBrickModel.getValidationMessage());
+        }
+        else
+        {
+            
removeBrickModel.setMigrationSupported(volumeEntity.getVolumeType().isDistributedType());
+            
removeBrickModel.getMigrateData().setEntity(removeBrickModel.isMigrationSupported());
 
-        UICommand command2 = new UICommand("Cancel", this); //$NON-NLS-1$
-        
command2.setTitle(ConstantsManager.getInstance().getConstants().cancel());
-        command2.setIsCancel(true);
-        model.getCommands().add(command2);
+            if (removeBrickModel.isReduceReplica())
+            {
+                removeBrickModel.setMessage(ConstantsManager.getInstance()
+                        .getMessages()
+                        
.removeBricksReplicateVolumeMessage(volumeEntity.getReplicaCount(),
+                                volumeEntity.getReplicaCount() - 1));
+            }
+            else
+            {
+                
removeBrickModel.setMessage(ConstantsManager.getInstance().getConstants().removeBricksMessage());
+            }
+
+            UICommand command = new UICommand("OnRemove", this); //$NON-NLS-1$
+            
command.setTitle(ConstantsManager.getInstance().getConstants().ok());
+            command.setIsDefault(true);
+            removeBrickModel.getCommands().add(command);
+        }
+
+        UICommand command = new UICommand("Cancel", this); //$NON-NLS-1$
+        
command.setTitle(ConstantsManager.getInstance().getConstants().cancel());
+        command.setIsCancel(true);
+        removeBrickModel.getCommands().add(command);
     }
 
-    public boolean canRemoveBricks(GlusterVolumeType volumeType,
+    public boolean validateRemoveBricks(GlusterVolumeType volumeType,
             List<GlusterBrickEntity> selectedBricks,
             List<GlusterBrickEntity> brickList,
             RemoveBrickModel removeBrickModel)
@@ -663,7 +656,7 @@
             return;
         }
 
-        ConfirmationModel model = (ConfirmationModel) getWindow();
+        RemoveBrickModel model = (RemoveBrickModel) getWindow();
 
         if (model.getProgress() != null)
         {
@@ -685,7 +678,7 @@
         }
         else if (volumeEntity.getVolumeType() == 
GlusterVolumeType.DISTRIBUTED_REPLICATE)
         {
-            if ((Boolean) model.getEntity())
+            if (model.isReduceReplica())
             {
                 parameter.setReplicaCount(volumeEntity.getReplicaCount() - 1);
             }
@@ -697,8 +690,10 @@
 
         model.startProgress(null);
 
-        Frontend.RunAction(VdcActionType.GlusterVolumeRemoveBricks, parameter, 
new IFrontendActionAsyncCallback() {
+        boolean isMigrate = (Boolean) model.getMigrateData().getEntity();
 
+        Frontend.RunAction(isMigrate ? 
VdcActionType.StartRemoveGlusterVolumeBricks
+                : VdcActionType.GlusterVolumeRemoveBricks, parameter, new 
IFrontendActionAsyncCallback() {
             @Override
             public void executed(FrontendActionAsyncResult result) {
 
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 1fb7af9..90e521d 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
@@ -1710,16 +1710,16 @@
     @DefaultStringValue("Cannot remove more than one brick from a Replicate 
volume at a time")
     String cannotRemoveBricksReplicateVolume();
 
-    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Replicate volume. Either all the selected bricks should be from the 
same sub volume or one brick each for every sub volume!")
+    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Replicate volume. <br/> Either all the selected bricks should be 
from the same sub volume or one brick each for every sub volume!")
     String cannotRemoveBricksDistributedReplicateVolume();
 
-    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Stripe volume. Selected bricks should be from the same sub volume!")
+    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Stripe volume. <br/> Selected bricks should be from the same sub 
volume!")
     String cannotRemoveBricksDistributedStripeVolume();
 
-    @DefaultStringValue("Incorrect bricks selected for the removal in Striped 
Replicate volume. Selected bricks should be a multiple of stripe and replica 
count")
+    @DefaultStringValue("Incorrect bricks selected for the removal in Striped 
Replicate volume. <br/> Selected bricks should be a multiple of stripe and 
replica count")
     String cannotRemoveBricksStripedReplicateVolume();
 
-    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Striped Replicate volume. Selected bricks should be from the same 
sub volume!")
+    @DefaultStringValue("Incorrect bricks selected for the removal in 
Distributed Striped Replicate volume. <br/> Selected bricks should be from the 
same sub volume!")
     String cannotRemoveBricksDistributedStripedReplicateVolume();
 
     @DefaultStringValue("Replica count can be increased by only one")
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 9ca5110..45e8827 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
@@ -2672,6 +2672,15 @@
     @DefaultStringValue("NOTE: Stripe groups will be create based on the order 
of the bricks.")
     String distributedStripeVolumeBrickInfoLabel();
 
+    @DefaultStringValue("Migrate Data from the bricks")
+    String removeBricksMigrateData();
+
+    @DefaultStringValue("Ensure safe data migration before removing the 
bricks")
+    String removeBricksMigrateDataInfo();
+
+    @DefaultStringValue("Please note that data will be lost if choose not to 
migrate")
+    String removeBricksWarning();
+
     // Volume Brick Details
     @DefaultStringValue("General")
     String generalBrickAdvancedPopupLabel();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
index 78c66ec..6b20561 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/PresenterModule.java
@@ -39,6 +39,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.AddBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.BrickAdvancedDetailsPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.DetachGlusterHostsPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.RemoveBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.ReplaceBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.VolumeParameterPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.VolumePopupPresenterWidget;
@@ -243,6 +244,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.AddBrickPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.BrickAdvancedDetailsPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.DetachGlusterHostsPopupView;
+import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.RemoveBrickPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.ReplaceBrickPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.VolumeParameterPopupView;
 import 
org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.VolumePopupView;
@@ -1258,6 +1260,10 @@
                 AddBrickPopupPresenterWidget.ViewDef.class,
                 AddBrickPopupView.class);
 
+        bindPresenterWidget(RemoveBrickPopupPresenterWidget.class,
+                RemoveBrickPopupPresenterWidget.ViewDef.class,
+                RemoveBrickPopupView.class);
+
         bindPresenterWidget(ReplaceBrickPopupPresenterWidget.class,
                 ReplaceBrickPopupPresenterWidget.ViewDef.class,
                 ReplaceBrickPopupView.class);
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
index 4d2fe9c..0d3c3d5 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/gin/uicommon/VolumeModule.java
@@ -28,6 +28,7 @@
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.event.EventPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.AddBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.BrickAdvancedDetailsPopupPresenterWidget;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.RemoveBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.ReplaceBrickPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.VolumeParameterPopupPresenterWidget;
 import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.VolumePopupPresenterWidget;
@@ -87,7 +88,8 @@
     public SearchableDetailModelProvider<GlusterBrickEntity, VolumeListModel, 
VolumeBrickListModel> getVolumeBrickListProvider(EventBus eventBus,
             Provider<DefaultConfirmationPopupPresenterWidget> 
defaultConfirmPopupProvider,
             final Provider<AddBrickPopupPresenterWidget> addBrickPopupProvider,
-            final Provider<RemoveConfirmationPopupPresenterWidget> 
removeConfirmPopupProvider,
+            final Provider<RemoveBrickPopupPresenterWidget> 
removeConfirmPopupProvider,
+            final Provider<RemoveBrickPopupPresenterWidget> 
removeBrickPopupProvider,
             final Provider<ReplaceBrickPopupPresenterWidget> 
replaceBrickPopupProvider,
             final Provider<BrickAdvancedDetailsPopupPresenterWidget> 
brickDetailsPopupProvider) {
         return new SearchableDetailTabModelProvider<GlusterBrickEntity, 
VolumeListModel, VolumeBrickListModel>(
@@ -100,6 +102,8 @@
                     Model windowModel) {
                 if (lastExecutedCommand == getModel().getAddBricksCommand()) {
                     return addBrickPopupProvider.get();
+                } else if (lastExecutedCommand == 
getModel().getRemoveBricksCommand()) {
+                    return removeBrickPopupProvider.get();
                 } else if (lastExecutedCommand == 
getModel().getReplaceBrickCommand()) {
                     return replaceBrickPopupProvider.get();
                 } else if (lastExecutedCommand == 
getModel().getBrickAdvancedDetailsCommand()) {
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/gluster/RemoveBrickPopupPresenterWidget.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/gluster/RemoveBrickPopupPresenterWidget.java
new file mode 100644
index 0000000..603e779
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/presenter/popup/gluster/RemoveBrickPopupPresenterWidget.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster;
+
+import 
org.ovirt.engine.ui.common.presenter.AbstractModelBoundPopupPresenterWidget;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.RemoveBrickModel;
+
+import com.google.gwt.event.shared.EventBus;
+import com.google.inject.Inject;
+
+public class RemoveBrickPopupPresenterWidget extends 
AbstractModelBoundPopupPresenterWidget<RemoveBrickModel, 
RemoveBrickPopupPresenterWidget.ViewDef> {
+
+    public interface ViewDef extends 
AbstractModelBoundPopupPresenterWidget.ViewDef<RemoveBrickModel> {
+    }
+
+    @Inject
+    public RemoveBrickPopupPresenterWidget(EventBus eventBus, ViewDef view) {
+        super(eventBus, view);
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.java
new file mode 100644
index 0000000..60098f1
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.java
@@ -0,0 +1,142 @@
+package org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.ui.common.idhandler.ElementIdHandler;
+import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
+import org.ovirt.engine.ui.common.widget.Align;
+import org.ovirt.engine.ui.common.widget.dialog.InfoIcon;
+import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.EntityModelCheckBoxEditor;
+import org.ovirt.engine.ui.uicommonweb.models.gluster.RemoveBrickModel;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.IEventListener;
+import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
+import org.ovirt.engine.ui.webadmin.ApplicationConstants;
+import org.ovirt.engine.ui.webadmin.ApplicationResources;
+import org.ovirt.engine.ui.webadmin.ApplicationTemplates;
+import 
org.ovirt.engine.ui.webadmin.section.main.presenter.popup.gluster.RemoveBrickPopupPresenterWidget;
+
+import com.google.gwt.core.client.GWT;
+import com.google.gwt.editor.client.SimpleBeanEditorDriver;
+import com.google.gwt.event.shared.EventBus;
+import com.google.gwt.resources.client.CssResource;
+import com.google.gwt.uibinder.client.UiBinder;
+import com.google.gwt.uibinder.client.UiField;
+import com.google.gwt.user.client.ui.Label;
+import com.google.gwt.user.client.ui.VerticalPanel;
+import com.google.inject.Inject;
+
+public class RemoveBrickPopupView extends 
AbstractModelBoundPopupView<RemoveBrickModel> implements 
RemoveBrickPopupPresenterWidget.ViewDef {
+
+    interface Driver extends SimpleBeanEditorDriver<RemoveBrickModel, 
RemoveBrickPopupView> {
+    }
+
+    interface ViewUiBinder extends UiBinder<SimpleDialogPanel, 
RemoveBrickPopupView> {
+        ViewUiBinder uiBinder = GWT.create(ViewUiBinder.class);
+    }
+
+    interface ViewIdHandler extends ElementIdHandler<RemoveBrickPopupView> {
+        ViewIdHandler idHandler = GWT.create(ViewIdHandler.class);
+    }
+
+    @UiField
+    WidgetStyle style;
+
+    @UiField
+    @Ignore
+    Label messageLabel;
+
+    @UiField
+    VerticalPanel itemsPanel;
+
+    @UiField(provided = true)
+    @Path("migrateData.entity")
+    EntityModelCheckBoxEditor migrateEditor;
+
+    @UiField(provided = true)
+    InfoIcon migrateInfoIcon;
+
+    @UiField
+    @Ignore
+    Label warningLabel;
+
+    private final Driver driver = GWT.create(Driver.class);
+
+    @Inject
+    public RemoveBrickPopupView(EventBus eventBus,
+            ApplicationResources resources,
+            ApplicationConstants constants,
+            ApplicationTemplates templates) {
+        super(eventBus, resources);
+        initEditors(constants, resources, templates);
+        initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
+        ViewIdHandler.idHandler.generateAndSetIds(this);
+        localize(constants);
+        addStyles();
+        driver.initialize(this);
+    }
+
+    private void initEditors(ApplicationConstants constants,
+            ApplicationResources resources,
+            ApplicationTemplates templates) {
+        migrateEditor = new EntityModelCheckBoxEditor(Align.RIGHT);
+        migrateInfoIcon = new 
InfoIcon(templates.italicText(constants.removeBricksMigrateDataInfo()), 
resources);
+    }
+
+    protected void addStyles() {
+        migrateEditor.addContentWidgetStyleName(style.migrateOption());
+    }
+
+    private void localize(ApplicationConstants constants) {
+        warningLabel.setText(constants.removeBricksWarning());
+        migrateEditor.setLabel(constants.removeBricksMigrateData());
+    }
+
+    @Override
+    public void edit(final RemoveBrickModel object) {
+        driver.edit(object);
+
+        object.getItemsChangedEvent().addListener(new IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                ArrayList<String> items = (ArrayList<String>) 
object.getItems();
+
+                for (String item : items) {
+                    itemsPanel.add(new Label(item));
+                }
+            }
+        });
+
+        object.getPropertyChangedEvent().addListener(new IEventListener() {
+            @Override
+            public void eventRaised(Event ev, Object sender, EventArgs args) {
+                String propName = ((PropertyChangedEventArgs) 
args).PropertyName;
+
+                if ("IsMigrationSupported".equals(propName)) { //$NON-NLS-1$
+                    migrateEditor.setVisible(object.isMigrationSupported());
+                    migrateInfoIcon.setVisible(object.isMigrationSupported());
+                    warningLabel.setVisible(object.isMigrationSupported());
+                }
+            }
+        });
+    }
+
+    @Override
+    public void setMessage(String message) {
+        super.setMessage(message);
+        messageLabel.setText(message);
+    }
+
+    @Override
+    public RemoveBrickModel flush() {
+        return driver.flush();
+    }
+
+    interface WidgetStyle extends CssResource {
+
+        String migrateOption();
+    }
+
+}
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.ui.xml
new file mode 100644
index 0000000..46fe3a1
--- /dev/null
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/gluster/RemoveBrickPopupView.ui.xml
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE ui:UiBinder SYSTEM "http://dl.google.com/gwt/DTD/xhtml.ent";>
+<ui:UiBinder xmlns:ui="urn:ui:com.google.gwt.uibinder"
+       xmlns:g="urn:import:com.google.gwt.user.client.ui" 
xmlns:d="urn:import:org.ovirt.engine.ui.common.widget.dialog"
+       xmlns:e="urn:import:org.ovirt.engine.ui.common.widget.editor" 
xmlns:w="urn:import:org.ovirt.engine.ui.common.widget">
+
+       <ui:style 
type="org.ovirt.engine.ui.webadmin.section.main.view.popup.gluster.RemoveBrickPopupView.WidgetStyle">
+               .warningLabel {
+                       color: #FF0000;
+                       left: 10px;
+                       padding-left: 5px;
+               }
+
+               .itemsPanel {
+                       height:180px;
+                       border: 1px;
+               }
+               
+               .migrateOption {
+                       width: 200px;
+                       padding: 0px;
+               }
+
+               .migrateInfoIcon {
+                       display: inline-block;
+               }
+
+       </ui:style>
+       
+       <d:SimpleDialogPanel width="450px" height="350px">
+               <d:content>
+                       <g:VerticalPanel spacing="5">
+                               <g:Label ui:field="messageLabel"/>
+                               <g:ScrollPanel 
addStyleNames="{style.itemsPanel}" >
+                                       <g:VerticalPanel ui:field="itemsPanel" 
/>
+                               </g:ScrollPanel>
+                               <g:HorizontalPanel>
+                                       <e:EntityModelCheckBoxEditor 
ui:field="migrateEditor" />
+                                       <d:InfoIcon ui:field="migrateInfoIcon" 
addStyleNames="{style.migrateInfoIcon}"/>
+                               </g:HorizontalPanel>
+                               <g:Label ui:field="warningLabel" 
addStyleNames="{style.warningLabel}" />
+                       </g:VerticalPanel>
+               </d:content>
+       </d:SimpleDialogPanel>
+       
+</ui:UiBinder>
\ No newline at end of file


-- 
To view, visit http://gerrit.ovirt.org/19201
To unsubscribe, visit http://gerrit.ovirt.org/settings

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

Reply via email to