Federico Simoncelli has uploaded a new change for review.

Change subject: webadmin: add data center to MoveOrCopyDiskModel
......................................................................

webadmin: add data center to MoveOrCopyDiskModel

Future storage domains either won't be part of any data center
(i.e.  glance) or they might support import and export commands
across different data centers.
This patch extends the MoveOrCopyDiskPopupView to support the
selection of the destination data center in order to list the
available storage domains.

The current behavior for the regular domains should be unchanged,
the data center name will appear at the top of the popup but it
is fixed (same of the source).

Change-Id: I25bc30cab216fd978db7590cd9cc6b994c24fa65
Signed-off-by: Federico Simoncelli <fsimo...@redhat.com>
---
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateDiskListModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.ui.xml
7 files changed, 159 insertions(+), 49 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/14959/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 92906e9..c1a7a2d 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
@@ -627,6 +627,9 @@
     @DefaultStringValue("Move")
     String moveDisk();
 
+    @DefaultStringValue("Data Center")
+    String dataCenter();
+
     @DefaultStringValue("Name")
     String nameDisk();
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
index e093e2e..c9bc184 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskListModel.java
@@ -284,6 +284,7 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().moveDisksTitle());
         model.setHashName("move_disks"); //$NON-NLS-1$
         model.setEntity(this);
+        model.setDataCenterId(disks.get(0).getStoragePoolId());
         model.init(disks);
         model.startProgress(null);
     }
@@ -358,6 +359,7 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().copyDisksTitle());
         model.setHashName("copy_disks"); //$NON-NLS-1$
         model.setEntity(this);
+        model.setDataCenterId(disks.get(0).getStoragePoolId());
         model.init(disks);
         model.startProgress(null);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
index 37a9460..51ce14a 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/MoveOrCopyDiskModel.java
@@ -2,6 +2,7 @@
 
 import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
 import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters;
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
@@ -28,12 +29,21 @@
 import org.ovirt.engine.ui.uicommonweb.validation.SelectedQuotaValidation;
 import org.ovirt.engine.ui.uicompat.Constants;
 import org.ovirt.engine.ui.uicompat.ConstantsManager;
+import org.ovirt.engine.ui.uicompat.Event;
+import org.ovirt.engine.ui.uicompat.EventArgs;
+import org.ovirt.engine.ui.uicompat.EventDefinition;
 import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs;
 
 public abstract class MoveOrCopyDiskModel extends EntityModel implements 
ICommandTarget
 {
 
     protected static Constants constants = 
ConstantsManager.getInstance().getConstants();
+
+    protected static EventDefinition selectedItemChangedEventDefinition;
+
+    static {
+        selectedItemChangedEventDefinition = new 
EventDefinition("SelectedItemChanged", ListModel.class); //$NON-NLS-1$
+    }
 
     private ListModel dataCenter;
 
@@ -101,6 +111,36 @@
         this.vmId = vmId;
     }
 
+    private NGuid dataCenterId;
+
+    public NGuid getDataCenterId() {
+        return dataCenterId;
+    }
+
+    public void setDataCenterId(NGuid dataCenterId) {
+        this.dataCenterId = dataCenterId;
+    }
+
+    private UICommand okCommand;
+
+    public UICommand getOkCommand() {
+        return okCommand;
+    }
+
+    public void setOkCommand(UICommand okCommand) {
+        this.okCommand = okCommand;
+    }
+
+    private UICommand cancelCommand;
+
+    public UICommand getCancelCommand() {
+        return cancelCommand;
+    }
+
+    public void setCancelCommand(UICommand cancelCommand) {
+        this.cancelCommand = cancelCommand;
+    }
+
     protected abstract VdcActionType getActionType();
 
     protected abstract String getWarning();
@@ -116,14 +156,54 @@
 
     public MoveOrCopyDiskModel() {
         setDataCenter(new ListModel());
+        getDataCenter().getSelectedItemChangedEvent().addListener(this);
+
         setDisksAllocation(new DisksAllocationModel());
+        getDisksAllocation().setActiveStorageDomains(new 
ArrayList<StorageDomain>());
+        getDisksAllocation().setIsSourceStorageDomainNameAvailable(true);
+
         setAllDisks(new ArrayList<DiskModel>());
-        disksAllocation.setActiveStorageDomains(new 
ArrayList<StorageDomain>());
-        disksAllocation.setIsSourceStorageDomainNameAvailable(true);
+
+        setOkCommand(new UICommand("OnExecute", this));  //$NON-NLS-1$
+        getOkCommand().setTitle(constants.ok());
+        getOkCommand().setIsDefault(true);
+        getOkCommand().setIsExecutionAllowed(false);
+
+        setCancelCommand(new UICommand("Cancel", this)); //$NON-NLS-1$
+        getCancelCommand().setTitle(constants.cancel());
+        getCancelCommand().setIsCancel(true);
+
+        getCommands().add(getOkCommand());
+        getCommands().add(getCancelCommand());
     }
 
     public void init(ArrayList<DiskImage> diskImages) {
         setDiskImages(diskImages);
+
+        AsyncDataProvider.getDataCenterList(new AsyncQuery(this,
+                new INewAsyncCallback() {
+                    @Override
+                    public void onSuccess(Object target, Object returnValue) {
+                        MoveOrCopyDiskModel model = (MoveOrCopyDiskModel) 
target;
+
+                        @SuppressWarnings("unchecked")
+                        List<StoragePool> dataCenters = 
(ArrayList<StoragePool>) returnValue;
+                        model.getDataCenter().setItems(dataCenters);
+
+                        if (getDataCenterId() != null) {
+                            model.getDataCenter().setIsChangable(false);
+
+                            for (StoragePool i : dataCenters) {
+                                if (getDataCenterId().equals(i.getId())) {
+                                    model.getDataCenter().setSelectedItem(i);
+                                    break;
+                                }
+                            }
+                        }
+
+                        initStorageDomains();
+                    }
+                }));
 
         AsyncDataProvider.getDiskList(new AsyncQuery(this, new 
INewAsyncCallback() {
             @Override
@@ -138,11 +218,6 @@
     }
 
     protected void initStorageDomains() {
-        Disk disk = disksAllocation.getDisks().get(0).getDisk();
-        if (disk.getDiskStorageType() != DiskStorageType.IMAGE) {
-            return;
-        }
-
         AsyncDataProvider.getStorageDomainList(new AsyncQuery(this, new 
INewAsyncCallback() {
             @Override
             public void onSuccess(Object target, Object returnValue) {
@@ -151,7 +226,7 @@
                 ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
                 model.onInitStorageDomains(storageDomains);
             }
-        }), ((DiskImage) disk).getStoragePoolId().getValue());
+        }), ((StoragePool) getDataCenter().getSelectedItem()).getId());
     }
 
     protected void onInitDisks() {
@@ -161,8 +236,6 @@
             disks.add(Linq.diskToModel(disk));
         }
         disksAllocation.setDisks(disks);
-
-        initStorageDomains();
     }
 
     protected void onInitAllDisks(ArrayList<Disk> disks) {
@@ -175,11 +248,14 @@
     }
 
     protected void onInitStorageDomains(ArrayList<StorageDomain> storages) {
+        disksAllocation.setActiveStorageDomains(new 
ArrayList<StorageDomain>());
+
         for (StorageDomain storage : storages) {
             if (Linq.isDataActiveStorageDomain(storage)) {
                 disksAllocation.getActiveStorageDomains().add(storage);
             }
         }
+
         Collections.sort(disksAllocation.getActiveStorageDomains(), new 
Linq.StorageDomainByNameComparer());
 
         if (!disksAllocation.getActiveStorageDomains().isEmpty()) {
@@ -192,7 +268,7 @@
                     
model.disksAllocation.setQuotaEnforcementType(dataCenter.getQuotaEnforcementType());
                     model.postInitStorageDomains();
                 }
-            }), 
disksAllocation.getActiveStorageDomains().get(0).getStoragePoolId().getValue());
+            }), ((StoragePool) getDataCenter().getSelectedItem()).getId());
         }
         else {
             postInitStorageDomains();
@@ -222,11 +298,9 @@
             }
 
             // Add prohibition reasons
-            if (sourceStorageDomains.isEmpty() || 
destStorageDomains.isEmpty()) {
-                showWarning = true;
-                updateChangeability(disk, isDiskBasedOnTemplate,
-                        sourceStorageDomains.isEmpty(), 
destStorageDomains.isEmpty());
-            }
+            showWarning = (sourceStorageDomains.isEmpty() || 
destStorageDomains.isEmpty());
+            updateChangeability(disk, isDiskBasedOnTemplate,
+                    sourceStorageDomains.isEmpty(), 
destStorageDomains.isEmpty());
 
             // Sort and add storage domains
             Collections.sort(destStorageDomains, new 
Linq.StorageDomainByNameComparer());
@@ -237,7 +311,18 @@
         }
 
         disksAllocation.sortDisks();
-        postCopyOrMoveInit(showWarning);
+
+        if (disksAllocation.getActiveStorageDomains().isEmpty()) {
+            setMessage(constants.noStorageDomainAvailableMsg());
+            getOkCommand().setIsExecutionAllowed(false);
+        }
+        else
+        {
+            setMessage(showWarning ? getWarning() : null);
+            getOkCommand().setIsExecutionAllowed(true);
+        }
+
+        stopProgress();
     }
 
     private void updateChangeability(DiskModel disk, boolean 
isDiskBasedOnTemplate, boolean noSources, boolean noTargets) {
@@ -256,35 +341,10 @@
         disk.getSourceStorageDomainName().setEntity(sourceStorageName);
     }
 
-    protected void postCopyOrMoveInit(boolean showWarning) {
-        ICommandTarget target = (ICommandTarget) getEntity();
-
-        if (disksAllocation.getActiveStorageDomains().isEmpty()) {
-            setMessage(constants.noStorageDomainAvailableMsg());
-
-            UICommand closeCommand = new UICommand("Cancel", target); 
//$NON-NLS-1$
-            closeCommand.setTitle(constants.close());
-            closeCommand.setIsDefault(true);
-            closeCommand.setIsCancel(true);
-            getCommands().add(closeCommand);
-        }
-        else
-        {
-            if (showWarning) {
-                setMessage(getWarning());
-            }
-
-            UICommand actionCommand = new UICommand("OnExecute", this); 
//$NON-NLS-1$
-            actionCommand.setTitle(constants.ok());
-            actionCommand.setIsDefault(true);
-            getCommands().add(actionCommand);
-            UICommand cancelCommand = new UICommand("Cancel", target); 
//$NON-NLS-1$
-            cancelCommand.setTitle(constants.cancel());
-            cancelCommand.setIsCancel(true);
-            getCommands().add(cancelCommand);
-        }
-
-        stopProgress();
+    @Override
+    public void setEntity(Object value) {
+        super.setEntity(value);
+        getCancelCommand().setTarget((ICommandTarget) value);
     }
 
     protected ArrayList<StorageDomain> 
filterStoragesByDatacenterId(ArrayList<StorageDomain> storageDomains,
@@ -409,4 +469,30 @@
         stopProgress();
         ((ListModel) getEntity()).setWindow(null);
     }
+
+    protected void dataCenter_SelectedItemChanged() {
+        AsyncDataProvider.getStorageDomainList(new AsyncQuery(this, new 
INewAsyncCallback() {
+            @Override
+            public void onSuccess(Object target, Object returnValue) {
+                MoveOrCopyDiskModel diskModel = (MoveOrCopyDiskModel) target;
+                @SuppressWarnings("unchecked")
+                ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
+                diskModel.onInitStorageDomains(storageDomains);
+            }
+        }), ((StoragePool) getDataCenter().getSelectedItem()).getId());
+    }
+
+    @Override
+    public void eventRaised(Event ev, Object sender, EventArgs args)
+    {
+        super.eventRaised(ev, sender, args);
+
+        if (ev.matchesDefinition(selectedItemChangedEventDefinition))
+        {
+            if (sender == getDataCenter())
+            {
+                dataCenter_SelectedItemChanged();
+            }
+        }
+    }
 }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateDiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateDiskListModel.java
index 8593771..4bb7301 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateDiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateDiskListModel.java
@@ -268,6 +268,7 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().copyDisksTitle());
         model.setHashName("copy_disk"); //$NON-NLS-1$
         model.setEntity(this);
+        model.setDataCenterId(disks.get(0).getStoragePoolId());
         model.init(disks);
         model.startProgress(null);
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
index 087ab74..b62b59e 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmDiskListModel.java
@@ -478,6 +478,7 @@
         
model.setTitle(ConstantsManager.getInstance().getConstants().moveDisksTitle());
         model.setHashName("move_disk"); //$NON-NLS-1$
         model.setEntity(this);
+        model.setDataCenterId(disks.get(0).getStoragePoolId());
         model.init(disks);
         model.startProgress(null);
     }
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.java
index 2b846a3..948255a 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.java
@@ -1,8 +1,11 @@
 package org.ovirt.engine.ui.webadmin.section.main.view.popup.storage;
 
+import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.ui.common.idhandler.WithElementId;
 import org.ovirt.engine.ui.common.view.popup.AbstractModelBoundPopupView;
 import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel;
+import org.ovirt.engine.ui.common.widget.editor.ListModelListBoxEditor;
+import org.ovirt.engine.ui.common.widget.renderer.NullSafeRenderer;
 import org.ovirt.engine.ui.common.widget.uicommon.storage.DisksAllocationView;
 import org.ovirt.engine.ui.uicommonweb.models.storage.MoveOrCopyDiskModel;
 import org.ovirt.engine.ui.webadmin.ApplicationConstants;
@@ -32,6 +35,11 @@
     FlowPanel messagePanel;
 
     @UiField(provided = true)
+    @Path(value = "dataCenter.selectedItem")
+    @WithElementId
+    public ListModelListBoxEditor<Object> dataCenterEditor;
+
+    @UiField(provided = true)
     @WithElementId
     public DisksAllocationView disksAllocation;
 
@@ -41,6 +49,14 @@
     public MoveOrCopyDiskPopupView(EventBus eventBus, ApplicationResources 
resources, ApplicationConstants constants) {
         super(eventBus, resources);
 
+        dataCenterEditor = new ListModelListBoxEditor<Object>(new 
NullSafeRenderer<Object>() {
+            @Override
+            public String renderNullSafe(Object object) {
+                return ((StoragePool) object).getname();
+            }
+        });
+
+        dataCenterEditor.setLabel(constants.dataCenter());
         disksAllocation = new DisksAllocationView(constants);
         initWidget(ViewUiBinder.uiBinder.createAndBindUi(this));
 
@@ -61,8 +77,8 @@
     public void setMessage(String message) {
         super.setMessage(message);
 
-        boolean isMessageEmpty = message == null || message.isEmpty();
-        messagePanel.setVisible(!isMessageEmpty);
+        messagePanel.setVisible(message != null && !message.isEmpty());
+        messagePanel.clear();
         messagePanel.add(new Label(message));
     }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.ui.xml
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.ui.xml
index aa5ef7e..561d3f5 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.ui.xml
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/MoveOrCopyDiskPopupView.ui.xml
@@ -16,7 +16,8 @@
                <d:content>
                        <g:FlowPanel>
                                <g:FlowPanel ui:field="messagePanel" 
visible="false" addStyleNames="{style.messagePanel}" />
-                               <w:DisksAllocationView 
ui:field="disksAllocation" listHeight="245px" listWidth="525px" 
showSource="true" />
+                               <e:ListModelListBoxEditor 
ui:field="dataCenterEditor" />
+                               <w:DisksAllocationView 
ui:field="disksAllocation" listHeight="225px" listWidth="525px" 
showSource="true" />
                        </g:FlowPanel>
                </d:content>
        </d:SimpleDialogPanel>


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

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

Reply via email to