Gilad Chaplik has uploaded a new change for review. Change subject: frontend: add disk profile to disk flow ......................................................................
frontend: add disk profile to disk flow Adding the ability to set DiskProfile for disk image. Added to all Disk flows, including: Add/update disk, inner disk in a VM/template/import flows. For more information see http://www.ovirt.org/Features/blkio-support Change-Id: I30047ddcb6364660df6c62355f5f48526859b2fc Signed-off-by: Gilad Chaplik <gchap...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java 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/vms/AbstractDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java 12 files changed, 208 insertions(+), 23 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/31833/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 5ad8b24..a06924e 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 @@ -984,6 +984,9 @@ @DefaultStringValue("Target") String targetDisk(); + @DefaultStringValue("Disk Profile") + String diskProfile(); + @DefaultStringValue("Quota") String quotaDisk(); @@ -1112,6 +1115,9 @@ @DefaultStringValue("Data Center") String dcVmDiskPopup(); + @DefaultStringValue("Disk Profile") + String diskProfileVmDiskPopup(); + @DefaultStringValue("Quota") String quotaVmDiskPopup(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java index 078087a..4ab675b 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java @@ -13,6 +13,7 @@ import org.ovirt.engine.core.common.businessentities.StorageType; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.ui.common.CommonApplicationConstants; @@ -124,6 +125,11 @@ @Path("storageDomain.selectedItem") @WithElementId("storageDomain") ListModelListBoxEditor<StorageDomain> storageDomainEditor; + + @UiField(provided = true) + @Path("diskProfile.selectedItem") + @WithElementId("diskProfile") + ListModelListBoxEditor<DiskProfile> diskProfileEditor; @UiField(provided = true) @Path("quota.selectedItem") @@ -273,6 +279,7 @@ storageDomainEditor.setLabel(constants.storageDomainVmDiskPopup()); hostListEditor.setLabel(constants.hostVmDiskPopup()); quotaEditor.setLabel(constants.quotaVmDiskPopup()); + diskProfileEditor.setLabel(constants.diskProfileVmDiskPopup()); interfaceEditor.setLabel(constants.interfaceVmDiskPopup()); volumeTypeEditor.setLabel(constants.allocationDisk()); storageTypeEditor.setLabel(constants.storageTypeVmDiskPopup()); @@ -297,6 +304,13 @@ @Override public String render(VDS vds) { return vds == null ? "" : vds.getName(); //$NON-NLS-1$ + } + }); + + diskProfileEditor = new ListModelListBoxEditor<DiskProfile>(new NullSafeRenderer<DiskProfile>() { + @Override + protected String renderNullSafe(DiskProfile object) { + return object.getName(); } }); @@ -806,6 +820,7 @@ volumeTypeEditor.setTabIndex(nextTabIndex++); datacenterEditor.setTabIndex(nextTabIndex++); storageDomainEditor.setTabIndex(nextTabIndex++); + diskProfileEditor.setTabIndex(nextTabIndex++); quotaEditor.setTabIndex(nextTabIndex++); hostListEditor.setTabIndex(nextTabIndex++); storageTypeEditor.setTabIndex(nextTabIndex++); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml index b7003ca..616a8c9 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.ui.xml @@ -114,6 +114,7 @@ <e:ListModelListBoxEditor ui:field="volumeTypeEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="datacenterEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="storageDomainEditor" addStyleNames="{style.boxEditor}"/> + <e:ListModelListBoxEditor ui:field="diskProfileEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="quotaEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="hostListEditor" addStyleNames="{style.boxEditor}"/> <e:ListModelListBoxEditor ui:field="storageTypeEditor" addStyleNames="{style.boxEditor}"/> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java index 11ae99f..f8039e3 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.java @@ -4,6 +4,7 @@ import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.utils.SizeConverter; import org.ovirt.engine.ui.common.CommonApplicationConstants; import org.ovirt.engine.ui.common.idhandler.HasElementId; @@ -79,6 +80,10 @@ ListModelListBoxEditor<StorageDomain> storageListEditor; @UiField(provided = true) + @Path(value = "diskProfile.selectedItem") + ListModelListBoxEditor<DiskProfile> diskProfileListEditor; + + @UiField(provided = true) @Path(value = "quota.selectedItem") ListModelListBoxEditor<Quota> quotaListEditor; @@ -90,6 +95,7 @@ public int setTabIndexes(int nextTabIndex) { diskAliasEditor.setTabIndex(nextTabIndex++); storageListEditor.setTabIndex(nextTabIndex++); + diskProfileListEditor.setTabIndex(nextTabIndex++); return nextTabIndex; } @@ -108,6 +114,13 @@ sourceStorageListEditor = new ListModelListBoxEditor<StorageDomain>(new StorageDomainFreeSpaceRenderer<StorageDomain>()); + diskProfileListEditor = new ListModelListBoxEditor<DiskProfile>(new NullSafeRenderer<DiskProfile>() { + @Override + protected String renderNullSafe(DiskProfile object) { + return object.getName(); + } + }); + quotaListEditor = new ListModelListBoxEditor<Quota>(new NullSafeRenderer<Quota>() { @Override public String renderNullSafe(Quota quota) { @@ -117,7 +130,7 @@ } void updateStyles(Boolean isNarrowStyle) { - String editorStyle = isNarrowStyle ? style.editorContentNarrow() : style.editorContent(); + String editorStyle = style.editorContentNarrow(); updateEditorStyle(diskAliasLabel, editorStyle); updateEditorStyle(diskAliasEditor, editorStyle); @@ -126,6 +139,7 @@ updateEditorStyle(volumeTypeListEditor, editorStyle); updateEditorStyle(sourceStorageListEditor, editorStyle); updateEditorStyle(storageListEditor, editorStyle); + updateEditorStyle(diskProfileListEditor, editorStyle); updateEditorStyle(quotaListEditor, editorStyle); } @@ -178,6 +192,8 @@ ElementIdUtils.createElementId(elementId, "sourceStorageDomain")); //$NON-NLS-1$ storageListEditor.setElementId( ElementIdUtils.createElementId(elementId, "storageDomain")); //$NON-NLS-1$ + diskProfileListEditor.setElementId( + ElementIdUtils.createElementId(elementId, "diskProfile")); //$NON-NLS-1$ quotaListEditor.setElementId( ElementIdUtils.createElementId(elementId, "quota")); //$NON-NLS-1$ } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml index 14b1e7b..361e8b4 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationItemView.ui.xml @@ -35,6 +35,7 @@ <e:ListModelListBoxEditor ui:field="volumeTypeListEditor" /> <e:ListModelListBoxEditor ui:field="sourceStorageListEditor" /> <e:ListModelListBoxEditor ui:field="storageListEditor" /> + <e:ListModelListBoxEditor ui:field="diskProfileListEditor" /> <e:ListModelListBoxEditor ui:field="quotaListEditor" /> </g:HorizontalPanel> diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java index aaf6d7e..86835ca 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/storage/DisksAllocationView.java @@ -81,7 +81,7 @@ } void updateListHeader(DisksAllocationModel model) { - String width = showQuota ? "85px" : "100px"; //$NON-NLS-1$ //$NON-NLS-2$ + String width = "85px"; //$NON-NLS-1$ listHeader = new EntityModelCellTable(false, (Resources) GWT.create( PopupSimpleTableResources.class), true); listHeader.addColumn(new EmptyColumn(), constants.aliasDisk(), width); @@ -94,6 +94,7 @@ listHeader.addColumn(new EmptyColumn(), constants.sourceDisk(), width); listHeader.addColumn(new EmptyColumn(), constants.targetDisk(), width); + listHeader.addColumn(new EmptyColumn(), constants.diskProfile(), width); if (showQuota) listHeader.addColumn(new EmptyColumn(), constants.quotaDisk(), width); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java index 8969e0b..5504b13 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/disks/DiskGeneralModel.java @@ -1,7 +1,5 @@ package org.ovirt.engine.ui.uicommonweb.models.disks; -import com.google.gwt.i18n.client.DateTimeFormat; - import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; @@ -13,6 +11,8 @@ import org.ovirt.engine.ui.uicompat.ConstantsManager; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.uicompat.external.StringUtils; + +import com.google.gwt.i18n.client.DateTimeFormat; public class DiskGeneralModel extends EntityModel { @@ -111,6 +111,22 @@ } } + private String privateDiskProfileName; + + public String getDiskProfileName() + { + return privateDiskProfileName; + } + + public void setDiskProfileName(String value) + { + if (!ObjectUtils.objectsEqual(privateDiskProfileName, value)) + { + privateDiskProfileName = value; + onPropertyChanged(new PropertyChangedEventArgs("DiskProfile Name")); //$NON-NLS-1$ + } + } + private String privateQuotaName; public String getQuotaName() @@ -205,6 +221,7 @@ if (isImage()) { DiskImage diskImage = (DiskImage) disk; + setDiskProfileName(diskImage.getDiskProfileName()); setQuotaName(StringUtils.join(diskImage.getQuotaNames(), ", ")); //$NON-NLS-1$ setQuotaAvailable(!diskImage.getQuotaEnforcementType().equals(QuotaEnforcementTypeEnum.DISABLED)); } 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 fc4fc83..96ad93e 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 @@ -6,11 +6,13 @@ import java.util.HashMap; import java.util.List; +import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -38,10 +40,10 @@ protected static final UIConstants constants = ConstantsManager.getInstance().getConstants(); protected static final UIMessages messages = ConstantsManager.getInstance().getMessages(); - private final IEventListener quota_storageEventListener = new IEventListener() { + private final IEventListener storageDomainEventListener = new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { - updateDisksQuota(sender); + updateDisks(sender); } }; @@ -63,8 +65,8 @@ sortDisks(); for (final DiskModel diskModel : disks) { - diskModel.getStorageDomain().getSelectedItemChangedEvent().removeListener(quota_storageEventListener); - diskModel.getStorageDomain().getSelectedItemChangedEvent().addListener(quota_storageEventListener); + diskModel.getStorageDomain().getSelectedItemChangedEvent().removeListener(storageDomainEventListener); + diskModel.getStorageDomain().getSelectedItemChangedEvent().addListener(storageDomainEventListener); diskModel.getStorageDomain().getItemsChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { @@ -183,6 +185,54 @@ } } + private void updateDiskProfile(Guid storageDomainId, final ListModel<DiskProfile> diskProfiles) { + Frontend.getInstance().runQuery(VdcQueryType.GetDiskProfilesByStorageDomainId, + new IdQueryParameters(storageDomainId), + new AsyncQuery(new INewAsyncCallback() { + + @Override + public void onSuccess(Object model, Object returnValue) { + List<DiskProfile> fetchedDiskProfiles = + (List<DiskProfile>) ((VdcQueryReturnValue) returnValue).getReturnValue(); + DisksAllocationModel.this.setDiskProfilesList(diskProfiles, fetchedDiskProfiles); + + } + + })); + } + + private void setDiskProfilesList(final ListModel<DiskProfile> diskProfiles, List<DiskProfile> fetchedDiskProfiles) { + if (fetchedDiskProfiles != null) { + // normal flow, set items and selected item according to current selected. + if (diskProfiles == null) { + for (DiskModel diskModel : getDisks()) { + diskModel.getDiskProfile().setItems(fetchedDiskProfiles); + for (DiskProfile diskProfile : fetchedDiskProfiles) { + if (diskModel.getDisk().getDiskStorageType() == DiskStorageType.IMAGE + && diskProfile.getId().equals(((DiskImage) diskModel.getDisk()).getDiskProfileId())) { + diskModel.getDiskProfile().setSelectedItem(diskProfile); + } + } + } + // inner model disk profiles + } else { + DiskProfile selectedDiskProfile = null; + if (diskProfiles.getSelectedItem() != null) { + selectedDiskProfile = diskProfiles.getSelectedItem(); + } + diskProfiles.setItems(fetchedDiskProfiles); + if (selectedDiskProfile != null && fetchedDiskProfiles.size() > 1) { + for (DiskProfile diskProfile : fetchedDiskProfiles) { + if (diskProfile.getId().equals(selectedDiskProfile.getId())) { + diskProfiles.setSelectedItem(diskProfile); + break; + } + } + } + } + } + } + @Override protected void onPropertyChanged(PropertyChangedEventArgs e) { @@ -216,17 +266,18 @@ } for (DiskModel diskModel : disks) { - StorageDomain storageDomain = (StorageDomain) diskModel.getStorageDomain().getSelectedItem(); + StorageDomain storageDomain = diskModel.getStorageDomain().getSelectedItem(); DiskImage diskImage = (DiskImage) diskModel.getDisk(); diskImage.setStorageIds(new ArrayList<Guid>(Arrays.asList(storageDomain.getId()))); - diskImage.setDiskAlias((String) diskModel.getAlias().getEntity()); - + diskImage.setDiskAlias(diskModel.getAlias().getEntity()); + DiskProfile diskProfile = diskModel.getDiskProfile().getSelectedItem(); + diskImage.setDiskProfileId(diskProfile != null ? diskProfile.getId() : null); if (diskModel.getQuota().getSelectedItem() != null) { - diskImage.setQuotaId(((Quota) diskModel.getQuota().getSelectedItem()).getId()); + diskImage.setQuotaId(diskModel.getQuota().getSelectedItem().getId()); } if (diskModel.getVolumeType().getIsAvailable()) { - VolumeType volumeType = (VolumeType) diskModel.getVolumeType().getSelectedItem(); + VolumeType volumeType = diskModel.getVolumeType().getSelectedItem(); diskImage.setVolumeType(volumeType); diskImage.setvolumeFormat(AsyncDataProvider.getDiskVolumeFormat( volumeType, storageDomain.getStorageType())); @@ -244,12 +295,13 @@ } } - private void updateDisksQuota(Object sender) { + private void updateDisks(Object sender) { StorageDomain storageDomain = (StorageDomain) ((ListModel) sender).getSelectedItem(); if (storageDomain != null) { for (DiskModel innerDisk : disks) { if (innerDisk.getStorageDomain().equals(sender)) { updateQuota(storageDomain.getId(), innerDisk.getQuota()); + updateDiskProfile(storageDomain.getId(), innerDisk.getDiskProfile()); break; } } 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 74a013d..2d2cdb7 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 @@ -11,13 +11,13 @@ import org.ovirt.engine.core.common.businessentities.Disk; import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType; import org.ovirt.engine.core.common.businessentities.DiskImage; -import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -200,7 +200,7 @@ // Add prohibition reasons if (sourceStorageDomains.isEmpty() || destStorageDomains.isEmpty()) { - problematicDisks.add((String) disk.getAlias().getEntity()); + problematicDisks.add(disk.getAlias().getEntity()); updateChangeability(disk, isDiskBasedOnTemplate, sourceStorageDomains.isEmpty(), destStorageDomains.isEmpty()); } @@ -319,14 +319,16 @@ ArrayList<VdcActionParametersBase> parameters = new ArrayList<VdcActionParametersBase>(); for (DiskModel diskModel : getDisks()) { - StorageDomain destStorageDomain = (StorageDomain) diskModel.getStorageDomain().getSelectedItem(); + StorageDomain destStorageDomain = diskModel.getStorageDomain().getSelectedItem(); StorageDomain sourceStorageDomain = - (StorageDomain) diskModel.getSourceStorageDomain().getSelectedItem(); + diskModel.getSourceStorageDomain().getSelectedItem(); Guid sourceStorageDomainGuid = sourceStorageDomain != null ? sourceStorageDomain.getId() : Guid.Empty; DiskImage disk = (DiskImage) diskModel.getDisk(); + DiskProfile diskProfile = diskModel.getDiskProfile().getSelectedItem(); + disk.setDiskProfileId(diskProfile != null ? diskProfile.getId() : null); if (diskModel.getQuota().getSelectedItem() != null) { - disk.setQuotaId(((Quota) diskModel.getQuota().getSelectedItem()).getId()); + disk.setQuotaId(diskModel.getQuota().getSelectedItem().getId()); } if (destStorageDomain == null || sourceStorageDomain == null) { @@ -350,6 +352,7 @@ MoveOrCopyImageGroupParameters params = createParameters(sourceStorageDomainGuid, destStorageDomainGuid, disk); params.setQuotaId(disk.getQuotaId()); + params.setDiskProfileId(disk.getDiskProfileId()); parameters.add(params); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index cc6d564..d33b508 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -3,6 +3,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Date; +import java.util.List; import org.ovirt.engine.core.common.businessentities.ActionGroup; import org.ovirt.engine.core.common.businessentities.Disk; @@ -25,6 +26,7 @@ import org.ovirt.engine.core.common.businessentities.VolumeFormat; import org.ovirt.engine.core.common.businessentities.VolumeType; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryReturnValue; @@ -365,7 +367,8 @@ VdcQueryType.GetStoragePoolById, VdcQueryType.GetNextAvailableDiskAliasNameByVMId, VdcQueryType.GetPermittedStorageDomainsByStoragePoolId, VdcQueryType.GetAllVdsByStoragePool, VdcQueryType.GetAllAttachableDisks, VdcQueryType.GetAllDisksByVmId, - VdcQueryType.GetAllRelevantQuotasForStorage, VdcQueryType.OsRepository }); + VdcQueryType.GetAllRelevantQuotasForStorage, VdcQueryType.OsRepository, + VdcQueryType.GetDiskProfilesByStorageDomainId }); // Create and set commands UICommand onSaveCommand = new UICommand("OnSave", this); //$NON-NLS-1$ @@ -578,6 +581,51 @@ private void setInterfaces(ArrayList<DiskInterface> diskInterfaces) { getDiskInterface().setItems(diskInterfaces); setDefaultInterface(); + } + + private void updateDiskProfiles(StoragePool selectedItem) { + StorageDomain storageDomain = getStorageDomain().getSelectedItem(); + if (storageDomain == null) { + return; + } + + Frontend.getInstance().runQuery(VdcQueryType.GetDiskProfilesByStorageDomainId, + new IdQueryParameters(storageDomain.getId()), + new AsyncQuery(this, + new INewAsyncCallback() { + @Override + public void onSuccess(Object innerModel, Object value) { + AbstractDiskModel.this.setDiskProfilesList((List<DiskProfile>) ((VdcQueryReturnValue) value).getReturnValue()); + } + + }, getHash())); + } + + private void setDiskProfilesList(List<DiskProfile> diskProfiles) { + // set disk profiles + if (diskProfiles != null && !diskProfiles.isEmpty()) { + getDiskProfile().setItems(diskProfiles); + } + // handle disk profile selected item + Guid defaultProfileId = + getDisk() != null ? ((DiskImage) getDisk()).getDiskProfileId() : null; + if (defaultProfileId != null) { + for (DiskProfile profile : diskProfiles) { + if (profile.getId().equals(defaultProfileId)) { + getDiskProfile().setSelectedItem(profile); + return; + } + } + // set dummy disk profile (if not fetched because of permissions, and it's attached to disk. + DiskProfile diskProfile = new DiskProfile(); + diskProfile.setId(defaultProfileId); + if (getDisk() != null) { + diskProfile.setName(getDiskImage().getDiskProfileName()); + } + diskProfiles.add(diskProfile); + getDiskProfile().setItems(diskProfiles); + getDiskProfile().setSelectedItem(diskProfile); + } } private void updateQuota(StoragePool datacenter) { @@ -819,6 +867,7 @@ updateWipeAfterDelete(selectedStorage.getStorageType()); } updateQuota(getDataCenter().getSelectedItem()); + updateDiskProfiles(getDataCenter().getSelectedItem()); } public boolean validate() { @@ -836,7 +885,10 @@ getQuota().validateSelectedItem(new IValidation[] { new NotEmptyQuotaValidation() }); } - return getAlias().getIsValid() && getDescription().getIsValid() && getQuota().getIsValid() && getDiskInterface().getIsValid(); + getDiskProfile().validateSelectedItem(new IValidation[] { new NotEmptyValidation() }); + + return getAlias().getIsValid() && getDescription().getIsValid() && getQuota().getIsValid() + && getDiskInterface().getIsValid() && getDiskProfile().getIsValid(); } protected void forceCreationWarning(ArrayList<String> usedLunsMessages) { @@ -909,6 +961,9 @@ setDisk(lunDisk); } + if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) { + ((DiskImage) getDisk()).setDiskProfileId(getDiskProfile().getSelectedItem().getId()); + } getDisk().setDiskAlias(getAlias().getEntity()); getDisk().setDiskDescription(getDescription().getEntity()); getDisk().setDiskInterface(getDiskInterface().getSelectedItem()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java index ba87d44..fad3385 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/DiskModel.java @@ -6,6 +6,7 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.VM; import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; import org.ovirt.engine.ui.uicommonweb.dataprovider.AsyncDataProvider; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; @@ -25,6 +26,7 @@ private ListModel<DiskInterface> diskInterface; private ListModel<StorageDomain> sourceStorageDomain; private ListModel<StorageDomain> storageDomain; + private ListModel<DiskProfile> diskProfile; private ListModel<Quota> quota; private boolean pluggedToRunningVm; @@ -109,6 +111,14 @@ this.storageDomain = storageDomain; } + public ListModel<DiskProfile> getDiskProfile() { + return diskProfile; + } + + public void setDiskProfile(ListModel<DiskProfile> diskProfile) { + this.diskProfile = diskProfile; + } + public ListModel<Quota> getQuota() { return quota; } @@ -133,6 +143,7 @@ setSourceStorageDomain(new ListModel<StorageDomain>()); setDiskInterface(new ListModel<DiskInterface>()); setStorageDomain(new ListModel<StorageDomain>()); + setDiskProfile(new ListModel<DiskProfile>()); setQuota(new ListModel<Quota>()); getQuota().setIsAvailable(false); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java index 4cdb86c..0b18d22 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/disk/SubTabDiskGeneralView.java @@ -35,6 +35,7 @@ TextBoxLabel description = new TextBoxLabel(); TextBoxLabel diskId = new TextBoxLabel(); TextBoxLabel lunId = new TextBoxLabel(); + TextBoxLabel diskProfileName = new TextBoxLabel(); TextBoxLabel quotaName = new TextBoxLabel(); TextBoxLabel alignment = new TextBoxLabel(); @@ -58,7 +59,7 @@ driver.initialize(this); // Build a form using the FormBuilder - formBuilder = new FormBuilder(formPanel, 1, 6); + formBuilder = new FormBuilder(formPanel, 1, 7); formBuilder.addFormItem(new FormItem(constants.aliasDisk(), alias, 0, 0)); formBuilder.addFormItem(new FormItem(constants.descriptionDisk(), description, 1, 0)); @@ -70,7 +71,13 @@ return getDetailModel().isLun(); } }); - formBuilder.addFormItem(new FormItem(constants.quota(), quotaName, 5, 0) { + formBuilder.addFormItem(new FormItem(constants.diskProfile(), diskProfileName, 5, 0) { + @Override + public boolean getIsAvailable() { + return !getDetailModel().isLun(); + } + }); + formBuilder.addFormItem(new FormItem(constants.quota(), quotaName, 6, 0) { @Override public boolean getIsAvailable() { return getDetailModel().isQuotaAvailable(); -- To view, visit http://gerrit.ovirt.org/31833 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I30047ddcb6364660df6c62355f5f48526859b2fc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.5 Gerrit-Owner: Gilad Chaplik <gchap...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches