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