Daniel Erez has uploaded a new change for review. Change subject: webadmin: move-copy disks - inactive domains indication ......................................................................
webadmin: move-copy disks - inactive domains indication Move/Copy disks dialogs: * Added a tool-tip for source storage domains label/select-box (indicating unavailable source storage domains). * Added a tool-tip for target storage select-box (indicating unavailable target storage domains / missing template on target storage domains). * Ensured that only disks that can be moved/copied (with regard to active source/target storage domain availability) are sent to the backend. * Display a warning when some of the disks cannot be moved/copied. Change-Id: Id1c17bbcdfa9c2358a17b297ef99a94254f68132 Bug-Url: https://bugzilla.redhat.com/880917 Bug-Url: https://bugzilla.redhat.com/907120 Signed-off-by: Daniel Erez <[email protected]> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.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/CopyDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml 9 files changed, 177 insertions(+), 189 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/73/11873/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java index c8713d0..7e936a1 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/DisksAllocationModel.java @@ -25,10 +25,13 @@ import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; +import org.ovirt.engine.ui.uicompat.Constants; import org.ovirt.engine.ui.uicompat.ConstantsManager; public class DisksAllocationModel extends EntityModel { + protected static Constants constants = ConstantsManager.getInstance().getConstants(); + private final IEventListener quota_storageEventListener = new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { @@ -168,7 +171,6 @@ private boolean isVolumeFormatChangable; private boolean isAliasChangable; private boolean isSourceStorageDomainAvailable; - private boolean isSourceStorageDomainChangable; private boolean isSourceStorageDomainNameAvailable; private boolean isWarningAvailable; @@ -302,23 +304,11 @@ } for (DiskModel diskModel : disks) { - boolean isDestStoragesEmpty = diskModel.getStorageDomain().getItems() != null ? - ((ArrayList) diskModel.getStorageDomain().getItems()).isEmpty() : true; - diskModel.getSourceStorageDomain().setIsAvailable(isSourceStorageDomainAvailable); - diskModel.getSourceStorageDomain().setIsChangable(!isSingleStorageDomain && isSourceStorageDomainChangable); + diskModel.getSourceStorageDomainName().setIsAvailable(isSourceStorageDomainNameAvailable); diskModel.getVolumeType().setIsAvailable(isVolumeFormatAvailable); diskModel.getVolumeType().setIsChangable(isVolumeFormatChangable); diskModel.getAlias().setIsChangable(isAliasChangable); - - if (diskModel.getSourceStorageDomain().getItems() != null - && diskModel.getSourceStorageDomain().getItems().iterator().hasNext()) { - storage_domains sourceStorage = - ((storage_domains) diskModel.getSourceStorageDomain().getItems().iterator().next()); - String sourceStorageName = sourceStorage != null ? sourceStorage.getstorage_name() : ""; //$NON-NLS-1$ - diskModel.getSourceStorageDomainName().setIsAvailable(isSourceStorageDomainNameAvailable); - diskModel.getSourceStorageDomainName().setEntity(sourceStorageName); - } } } @@ -392,7 +382,7 @@ for (DiskModel diskModel : getDisks()) { if (!diskModel.getStorageDomain().getItems().iterator().hasNext()) { diskModel.getStorageDomain().getInvalidityReasons().add( - ConstantsManager.getInstance().getConstants().storageDomainMustBeSpecifiedInvalidReason()); + constants.storageDomainMustBeSpecifiedInvalidReason()); diskModel.getStorageDomain().setIsValid(false); setIsValid(false); } @@ -421,10 +411,6 @@ public void setIsSourceStorageDomainAvailable(boolean isSourceStorageDomainAvailable) { this.isSourceStorageDomainAvailable = isSourceStorageDomainAvailable; - } - - public void setIsSourceStorageDomainChangable(boolean isSourceStorageDomainChangable) { - this.isSourceStorageDomainChangable = isSourceStorageDomainChangable; } public void setIsSourceStorageDomainNameAvailable(boolean isSourceStorageDomainNameAvailable) { 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 b394f1a..7d460ac 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 @@ -16,13 +16,13 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.compat.PropertyChangedEventArgs; -import org.ovirt.engine.core.compat.StringHelper; import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.INewAsyncCallback; import org.ovirt.engine.ui.uicommonweb.ICommandTarget; import org.ovirt.engine.ui.uicommonweb.Linq; import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; +import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; import org.ovirt.engine.ui.uicommonweb.validation.IValidation; import org.ovirt.engine.ui.uicommonweb.validation.SelectedQuotaValidation; @@ -42,22 +42,6 @@ { allDisks = value; OnPropertyChanged(new PropertyChangedEventArgs("All Disks")); //$NON-NLS-1$ - } - } - - private ArrayList<storage_domains> storageDomains; - - public ArrayList<storage_domains> getStorageDomains() - { - return storageDomains; - } - - public void setStorageDomains(ArrayList<storage_domains> value) - { - if (storageDomains != value) - { - storageDomains = value; - OnPropertyChanged(new PropertyChangedEventArgs("Storage Domains")); //$NON-NLS-1$ } } @@ -87,20 +71,20 @@ this.vmId = vmId; } - protected ArrayList<storage_domains> activeStorageDomains; - protected ArrayList<storage_domains> intersectStorageDomains; - protected ArrayList<storage_domains> unionStorageDomains; - public abstract void init(ArrayList<DiskImage> diskImages); protected abstract void initStorageDomains(); - protected abstract void postCopyOrMoveInit(); - - protected abstract void updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> parameters, - DiskModel diskModel); - protected abstract VdcActionType getActionType(); + + protected abstract String getWarning(); + + protected abstract String getNoActiveSourceDomainMessage(); + + protected abstract String getNoActiveTargetDomainMessage(); + + protected abstract void updateMoveOrCopySingleDiskParameters( + ArrayList<VdcActionParametersBase> parameters, DiskModel diskModel); protected abstract MoveOrCopyImageGroupParameters createParameters( Guid sourceStorageDomainGuid, @@ -108,8 +92,8 @@ DiskImage disk); public MoveOrCopyDiskModel() { - allDisks = new ArrayList<DiskModel>(); - storageDomains = new ArrayList<storage_domains>(); + setAllDisks(new ArrayList<DiskModel>()); + setActiveStorageDomains(new ArrayList<storage_domains>()); } protected void onInitDisks() { @@ -135,12 +119,12 @@ protected void onInitStorageDomains(ArrayList<storage_domains> storages) { for (storage_domains storage : storages) { if (Linq.IsDataActiveStorageDomain(storage)) { - storageDomains.add(storage); + getActiveStorageDomains().add(storage); } } - Collections.sort(storageDomains, new Linq.StorageDomainByNameComparer()); + Collections.sort(getActiveStorageDomains(), new Linq.StorageDomainByNameComparer()); - if (!storageDomains.isEmpty()) { + if (!getActiveStorageDomains().isEmpty()) { AsyncDataProvider.GetDataCenterById(new AsyncQuery(this, new INewAsyncCallback() { @Override public void OnSuccess(Object target, Object returnValue) { @@ -150,7 +134,7 @@ model.setQuotaEnforcementType(dataCenter.getQuotaEnforcementType()); model.postInitStorageDomains(); } - }), storageDomains.get(0).getstorage_pool_id().getValue()); + }), getActiveStorageDomains().get(0).getstorage_pool_id().getValue()); } else { postInitStorageDomains(); @@ -158,52 +142,91 @@ } protected void postInitStorageDomains() { - activeStorageDomains = getStorageDomains(); - - ArrayList<ArrayList<storage_domains>> allSourceStorages = new ArrayList<ArrayList<storage_domains>>(); - ArrayList<storage_domains> missingStorageDomains = new ArrayList<storage_domains>(); + boolean showWarning = false; for (DiskModel disk : getDisks()) { DiskImage diskImage = ((DiskImage) disk.getDisk()); - // Source storages + // Source storage domains ArrayList<Guid> diskStorageIds = diskImage.getstorage_ids(); - ArrayList<storage_domains> diskStorages = Linq.getStorageDomainsByIds(diskStorageIds, activeStorageDomains); - disk.getSourceStorageDomain().setItems(diskStorages); - allSourceStorages.add(diskStorages); + ArrayList<storage_domains> sourceStorageDomains = + Linq.getStorageDomainsByIds(diskStorageIds, getActiveStorageDomains()); - // Destination storages - ArrayList<storage_domains> destStorageDomains = Linq.Except(activeStorageDomains, diskStorages); - ArrayList<storage_domains> diskMissingStorageDomains = new ArrayList<storage_domains>(); + // Destination storage domains + ArrayList<storage_domains> destStorageDomains = + Linq.Except(getActiveStorageDomains(), sourceStorageDomains); + destStorageDomains = filterStoragesByDatacenterId(destStorageDomains, diskImage.getstorage_pool_id()); - // Filter storages with missing template disk - if (!diskImage.getParentId().equals(NGuid.Empty)) { - diskMissingStorageDomains = getMissingStorages(destStorageDomains, disk); - } - missingStorageDomains.addAll(diskMissingStorageDomains); - destStorageDomains = Linq.Except(destStorageDomains, missingStorageDomains); - - // Filter storages on different datacenters - if (!diskStorages.isEmpty()) { - NGuid diskDatacenterId = diskStorages.get(0).getstorage_pool_id(); - destStorageDomains = filterStoragesByDatacenterId(destStorageDomains, diskDatacenterId); + // Filter storage domains with missing template disk + boolean isDiskBasedOnTemplate = !diskImage.getParentId().equals(NGuid.Empty); + if (isDiskBasedOnTemplate) { + destStorageDomains = Linq.Except(destStorageDomains, getMissingStorages(destStorageDomains, disk)); } + // Add prohibition reasons + if (sourceStorageDomains.isEmpty() || destStorageDomains.isEmpty()) { + showWarning = true; + addProhibitionReasons(disk, isDiskBasedOnTemplate, + sourceStorageDomains.isEmpty(), destStorageDomains.isEmpty()); + } + + // Sort and add storage domains Collections.sort(destStorageDomains, new Linq.StorageDomainByNameComparer()); + Collections.sort(sourceStorageDomains, new Linq.StorageDomainByNameComparer()); disk.getStorageDomain().setItems(destStorageDomains); + disk.getSourceStorageDomain().setItems(sourceStorageDomains); + addSourceStorageDomainName(disk, sourceStorageDomains); } - intersectStorageDomains = Linq.Intersection(allSourceStorages); - unionStorageDomains = Linq.Union(allSourceStorages); - - ArrayList<storage_domains> destStorageDomains = Linq.Except(activeStorageDomains, intersectStorageDomains); - destStorageDomains = Linq.Except(destStorageDomains, missingStorageDomains); - Collections.sort(destStorageDomains, new Linq.StorageDomainByNameComparer()); - - getStorageDomain().setItems(destStorageDomains); sortDisks(); + postCopyOrMoveInit(showWarning); + } - postCopyOrMoveInit(); + private void addProhibitionReasons(DiskModel disk, boolean isDiskBasedOnTemplate, boolean noSources, boolean noTargets) { + disk.getStorageDomain().setIsChangable(!noTargets); + disk.getSourceStorageDomain().setIsChangable(!noSources); + disk.getSourceStorageDomainName().setIsChangable(!noSources); + disk.getStorageDomain().getChangeProhibitionReasons().add(isDiskBasedOnTemplate ? + constants.noActiveStorageDomainWithTemplateMsg() : getNoActiveTargetDomainMessage()); + disk.getSourceStorageDomain().getChangeProhibitionReasons().add(getNoActiveSourceDomainMessage()); + disk.getSourceStorageDomainName().getChangeProhibitionReasons().add(getNoActiveSourceDomainMessage()); + } + + private void addSourceStorageDomainName(DiskModel disk, ArrayList<storage_domains> sourceStorageDomains) { + String sourceStorageName = sourceStorageDomains.isEmpty() ? + constants.notAvailableLabel() : sourceStorageDomains.get(0).getstorage_name(); + disk.getSourceStorageDomainName().setEntity(sourceStorageName); + } + + protected void postCopyOrMoveInit(boolean showWarning) { + ICommandTarget target = (ICommandTarget) getEntity(); + + if (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(); } protected ArrayList<storage_domains> filterStoragesByDatacenterId(ArrayList<storage_domains> storageDomains, @@ -284,8 +307,7 @@ updateMoveOrCopySingleDiskParameters(parameters, diskModel); } else { - if (destStorageDomain == null - || ((DiskImage) diskModel.getDisk()).getstorage_ids().contains(destStorageDomain.getId())) { + if (destStorageDomain == null || sourceStorageDomain == null) { continue; } @@ -316,11 +338,7 @@ { super.ExecuteCommand(command); - if (StringHelper.stringsEqual(command.getName(), "OnMove") || //$NON-NLS-1$ - StringHelper.stringsEqual(command.getName(), "OnCopy")) //$NON-NLS-1$ - { - OnExecute(); - } + OnExecute(); } public boolean Validate() { @@ -337,4 +355,9 @@ return isValid; } + + protected void cancel() { + StopProgress(); + ((ListModel) getEntity()).setWindow(null); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java index 46409ff..fd8b0ed 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/CopyDiskModel.java @@ -14,13 +14,9 @@ import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; -import org.ovirt.engine.ui.uicommonweb.ICommandTarget; -import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; -import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.MoveOrCopyDiskModel; import org.ovirt.engine.ui.uicommonweb.models.vms.DiskModel; -import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendMultipleActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendMultipleActionAsyncCallback; @@ -30,7 +26,6 @@ super(); setIsSourceStorageDomainAvailable(true); - setIsSourceStorageDomainChangable(true); } @Override @@ -68,42 +63,6 @@ } @Override - protected void postCopyOrMoveInit() { - ICommandTarget target = (ICommandTarget) getEntity(); - - boolean noSingleStorageDomain = !getStorageDomain().getItems().iterator().hasNext(); - boolean noDestStorageDomain = intersectStorageDomains.containsAll(activeStorageDomains); - - if (activeStorageDomains.isEmpty() || noDestStorageDomain) { - if (activeStorageDomains.isEmpty()) { - setMessage(ConstantsManager.getInstance().getConstants().noSDAvailableMsg()); - } - else if (noDestStorageDomain) { - setMessage(ConstantsManager.getInstance().getConstants().disksAlreadyExistMsg()); - } - - UICommand tempVar = new UICommand("Cancel", target); //$NON-NLS-1$ - tempVar.setTitle(ConstantsManager.getInstance().getConstants().close()); - tempVar.setIsDefault(true); - tempVar.setIsCancel(true); - getCommands().add(tempVar); - } - else - { - UICommand tempVar2 = new UICommand("OnCopy", this); //$NON-NLS-1$ - tempVar2.setTitle(ConstantsManager.getInstance().getConstants().ok()); - tempVar2.setIsDefault(true); - getCommands().add(tempVar2); - UICommand tempVar3 = new UICommand("Cancel", target); //$NON-NLS-1$ - tempVar3.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - tempVar3.setIsCancel(true); - getCommands().add(tempVar3); - } - - StopProgress(); - } - - @Override protected void updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> parameters, DiskModel diskModel) { @@ -129,6 +88,21 @@ } @Override + protected String getWarning() { + return constants.cannotCopyDisks(); + } + + @Override + protected String getNoActiveSourceDomainMessage() { + return constants.noActiveSourceStorageDomainAvailableMsg(); + } + + @Override + protected String getNoActiveTargetDomainMessage() { + return constants.diskExistsOnAllActiveStorageDomainsMsg(); + } + + @Override protected MoveOrCopyImageGroupParameters createParameters(Guid sourceStorageDomainGuid, Guid destStorageDomainGuid, DiskImage disk) { @@ -142,14 +116,18 @@ protected void OnExecute() { super.OnExecute(); - Frontend.RunMultipleAction(getActionType(), getParameters(), + ArrayList<VdcActionParametersBase> parameters = getParameters(); + if (parameters.isEmpty()) { + cancel(); + return; + } + + Frontend.RunMultipleAction(getActionType(), parameters, new IFrontendMultipleActionAsyncCallback() { @Override public void Executed(FrontendMultipleActionAsyncResult result) { CopyDiskModel localModel = (CopyDiskModel) result.getState(); - localModel.StopProgress(); - ListModel listModel = (ListModel) localModel.getEntity(); - listModel.setWindow(null); + localModel.cancel(); } }, this); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java index b7c7464..75380d8 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/templates/TemplateListModel.java @@ -175,8 +175,6 @@ model.setTitle(ConstantsManager.getInstance().getConstants().copyTemplateTitle()); model.setHashName("copy_template"); //$NON-NLS-1$ model.setIsVolumeFormatAvailable(false); - model.setIsSourceStorageDomainAvailable(true); - model.setIsSourceStorageDomainChangable(true); model.setEntity(this); model.StartProgress(null); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java index e4f2d0f..905f0ae 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/MoveDiskModel.java @@ -16,12 +16,8 @@ import org.ovirt.engine.ui.frontend.AsyncQuery; import org.ovirt.engine.ui.frontend.Frontend; import org.ovirt.engine.ui.frontend.INewAsyncCallback; -import org.ovirt.engine.ui.uicommonweb.ICommandTarget; -import org.ovirt.engine.ui.uicommonweb.UICommand; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; -import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.MoveOrCopyDiskModel; -import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.FrontendActionAsyncResult; import org.ovirt.engine.ui.uicompat.IFrontendActionAsyncCallback; @@ -29,6 +25,8 @@ { public MoveDiskModel() { super(); + + setIsSourceStorageDomainNameAvailable(true); } @Override @@ -65,37 +63,6 @@ } @Override - protected void postCopyOrMoveInit() { - ICommandTarget target = (ICommandTarget) getEntity(); - - if (!getStorageDomain().getItems().iterator().hasNext()) - { - setWarningAvailable(false); - setMessage(ConstantsManager.getInstance().getConstants() - .theSystemCouldNotFindAvailableTargetStorageDomainMsg()); - - UICommand tempVar = new UICommand("Cancel", target); //$NON-NLS-1$ - tempVar.setTitle(ConstantsManager.getInstance().getConstants().close()); - tempVar.setIsDefault(true); - tempVar.setIsCancel(true); - getCommands().add(tempVar); - } - else - { - UICommand tempVar2 = new UICommand("OnMove", this); //$NON-NLS-1$ - tempVar2.setTitle(ConstantsManager.getInstance().getConstants().ok()); - tempVar2.setIsDefault(true); - getCommands().add(tempVar2); - UICommand tempVar3 = new UICommand("Cancel", target); //$NON-NLS-1$ - tempVar3.setTitle(ConstantsManager.getInstance().getConstants().cancel()); - tempVar3.setIsCancel(true); - getCommands().add(tempVar3); - } - - StopProgress(); - } - - @Override protected void updateMoveOrCopySingleDiskParameters(ArrayList<VdcActionParametersBase> parameters, DiskModel diskModel) { @@ -113,6 +80,21 @@ } @Override + protected String getWarning() { + return constants.cannotMoveDisks(); + } + + @Override + protected String getNoActiveSourceDomainMessage() { + return constants.sourceStorageDomainIsNotActiveMsg(); + } + + @Override + protected String getNoActiveTargetDomainMessage() { + return constants.noActiveTargetStorageDomainAvailableMsg(); + } + + @Override protected MoveOrCopyImageGroupParameters createParameters(Guid sourceStorageDomainGuid, Guid destStorageDomainGuid, DiskImage disk) { @@ -125,15 +107,19 @@ protected void OnExecute() { super.OnExecute(); - MoveDisksParameters parameters = new MoveDisksParameters((List) getParameters()); - Frontend.RunAction(getActionType(), parameters, + ArrayList<VdcActionParametersBase> parameters = getParameters(); + if (parameters.isEmpty()) { + cancel(); + return; + } + + MoveDisksParameters moveDisksParameters = new MoveDisksParameters((List) parameters); + Frontend.RunAction(getActionType(), moveDisksParameters, new IFrontendActionAsyncCallback() { @Override public void Executed(FrontendActionAsyncResult result) { MoveDiskModel localModel = (MoveDiskModel) result.getState(); - localModel.StopProgress(); - ListModel listModel = (ListModel) localModel.getEntity(); - listModel.setWindow(null); + localModel.cancel(); } }, this); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java index c85fd95..ee3587a 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmListModel.java @@ -1000,7 +1000,6 @@ setWindow(model); model.setTitle(ConstantsManager.getInstance().getConstants().moveVirtualMachineTitle()); model.setHashName("move_virtual_machine"); //$NON-NLS-1$ - model.setIsSourceStorageDomainNameAvailable(true); model.setEntity(this); model.StartProgress(null); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java index 0d489a7..c91c965 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Constants.java @@ -656,9 +656,6 @@ @DefaultStringValue("Permission") String permissionMsg(); - @DefaultStringValue("No Storage Domain is available - check Storage Domains and Hosts status.") - String noSDAvailableMsg(); - @DefaultStringValue("Disks already exist on all available Storage Domains.") String disksAlreadyExistMsg(); @@ -800,8 +797,29 @@ @DefaultStringValue("Tag(s)") String tagsMsg(); - @DefaultStringValue("The system could not find available target Storage Domain.\nPossible reasons:\n - No active Storage Domain available\n - The Template that the VM is based on does not exist on active Storage Domain") - String theSystemCouldNotFindAvailableTargetStorageDomainMsg(); + @DefaultStringValue("No active Storage Domain is available - check Storage Domains and Hosts status.") + String noStorageDomainAvailableMsg(); + + @DefaultStringValue("Source Storage Domain is not active") + String sourceStorageDomainIsNotActiveMsg(); + + @DefaultStringValue("No active target Storage Domain is available") + String noActiveTargetStorageDomainAvailableMsg(); + + @DefaultStringValue("No active source Storage Domain is available") + String noActiveSourceStorageDomainAvailableMsg(); + + @DefaultStringValue("Disk exists on all active Storage Domains") + String diskExistsOnAllActiveStorageDomainsMsg(); + + @DefaultStringValue("The Template that the VM is based on does not exist on any active Storage Domain") + String noActiveStorageDomainWithTemplateMsg(); + + @DefaultStringValue("Warning: Some of the disks cannot be moved") + String cannotMoveDisks(); + + @DefaultStringValue("Warning: Some of the disks cannot be copied") + String cannotCopyDisks(); @DefaultStringValue("Field value should follow: <parameter=value;parameter=value;...>") String fieldValueShouldFollowMsg(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java index 79ee413..67755f4 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.java @@ -12,6 +12,7 @@ import com.google.gwt.event.shared.EventBus; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; +import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.inject.Inject; @@ -22,7 +23,7 @@ } @UiField - Label messageLabel; + FlowPanel messagePanel; @UiField(provided = true) @Ignore @@ -54,9 +55,8 @@ super.setMessage(message); boolean isMessageEmpty = message == null || message.isEmpty(); - disksAllocationView.setVisible(isMessageEmpty || disksAllocationModel.isWarningAvailable()); - messageLabel.setVisible(!isMessageEmpty); - messageLabel.setText(message); + messagePanel.setVisible(!isMessageEmpty); + 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/DisksAllocationPopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml index c29da6e..149472a 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/DisksAllocationPopupView.ui.xml @@ -5,7 +5,7 @@ xmlns:e="urn:import:org.ovirt.engine.ui.webadmin.widget.editor" xmlns:w="urn:import:org.ovirt.engine.ui.common.widget.uicommon.storage"> <ui:style> - .messageLabel { + .messagePanel { color: #CD2127; text-align: center; padding: 10px; @@ -15,8 +15,8 @@ <d:SimpleDialogPanel width="540px" height="400px"> <d:content> <g:FlowPanel> - <g:Label ui:field="messageLabel" visible="false" addStyleNames="{style.messageLabel}" /> - <w:DisksAllocationView ui:field="disksAllocationView" listHeight="260px" listWidth="525px" showSource="true" /> + <g:FlowPanel ui:field="messagePanel" visible="false" addStyleNames="{style.messagePanel}" /> + <w:DisksAllocationView ui:field="disksAllocationView" listHeight="245px" listWidth="525px" showSource="true" /> </g:FlowPanel> </d:content> </d:SimpleDialogPanel> -- To view, visit http://gerrit.ovirt.org/11873 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id1c17bbcdfa9c2358a17b297ef99a94254f68132 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
