Idan Shaby has uploaded a new change for review. Change subject: webadmin: override image name in import image view ......................................................................
webadmin: override image name in import image view This patch adds the ability to edit the alias of a disk image in the import image view. Change-Id: Ia25b0e38e577ebe745ccbc898b5af07f35e2847b Bug-Url: https://bugzilla.redhat.com/1196757 Signed-off-by: Idan Shaby <ish...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportExportRepoImageCommandTest.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage/RepoImage.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ExportRepoImageModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportExportRepoImageBaseModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportRepoImageModel.java A frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/RepoImageModel.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java 11 files changed, 118 insertions(+), 36 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/94/41394/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java index a40a1df..c5c32e0 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java @@ -149,7 +149,8 @@ protected DiskImage getDiskImage() { if (getParameters().getDiskImage() == null) { - DiskImage diskImage = getProviderProxy().getImageAsDiskImage(getParameters().getSourceRepoImageId()); + DiskImage diskImage = getProviderProxy().getImageAsDiskImage( + getParameters().getSourceRepoImageId(), getParameters().getDiskAlias()); if (diskImage != null) { if (diskImage.getVolumeFormat() == VolumeFormat.RAW && getStorageDomain().getStorageType().isBlockDomain()) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java index f714266..954ed77 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/provider/storage/OpenStackImageProviderProxy.java @@ -164,15 +164,15 @@ return repoImages; } - public DiskImage getImageAsDiskImage(String id) { + public DiskImage getImageAsDiskImage(String id, String diskAlias) { DiskImage diskImage = new DiskImage(); Image glanceImage = getClient().images().show(id).execute(); validateContainerFormat(glanceImage); - String shortHash = glanceImage.getId().substring(0, 7); + diskImage.setDiskAlias(diskAlias); - diskImage.setDiskAlias("GlanceDisk-" + shortHash); + String shortHash = glanceImage.getId().substring(0, 7); if (glanceImage.getName() != null) { diskImage.setDiskDescription(glanceImage.getName() + " (" + shortHash + ")"); diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportExportRepoImageCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportExportRepoImageCommandTest.java index c6e6114..3fd29a8 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportExportRepoImageCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportExportRepoImageCommandTest.java @@ -68,6 +68,8 @@ private Guid diskImageGroupId; + private String diskImageAlias; + private DiskImage diskImage; public Guid getRepoStorageDomainId() { @@ -114,6 +116,10 @@ return diskImageGroupId; } + public String getDiskImageAlias() { + return diskImageAlias; + } + public DiskDao getDiskDao() { return diskDao; } @@ -135,6 +141,7 @@ diskImageId = Guid.newGuid(); diskImageGroupId = Guid.newGuid(); + diskImageAlias = new String(); storagePoolId = Guid.newGuid(); storageDomainId = Guid.newGuid(); @@ -166,7 +173,7 @@ when(storagePoolDao.get(storagePoolId)).thenReturn(storagePool); when(diskDao.get(diskImageGroupId)).thenReturn(diskImage); when(diskImageDao.get(diskImageId)).thenReturn(diskImage); - when(providerProxy.getImageAsDiskImage(repoImageId)).thenReturn(diskImage); + when(providerProxy.getImageAsDiskImage(repoImageId, diskImageAlias)).thenReturn(diskImage); } } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java index 9697a3b..e16cb7b 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/ImportRepoImageCommandTest.java @@ -28,6 +28,7 @@ ImportRepoImageParameters importParameters = new ImportRepoImageParameters(); importParameters.setSourceRepoImageId(getRepoImageId()); + importParameters.setDiskAlias(getDiskImageAlias()); importParameters.setSourceStorageDomainId(getRepoStorageDomainId()); importParameters.setStoragePoolId(getStoragePoolId()); importParameters.setStorageDomainId(getStorageDomainId()); @@ -47,7 +48,7 @@ @Test public void testCanDoActionImageDoesNotExist() { - when(getProviderProxy().getImageAsDiskImage(getRepoImageId())).thenReturn(null); + when(getProviderProxy().getImageAsDiskImage(getRepoImageId(), getDiskImageAlias())).thenReturn(null); CanDoActionTestUtils.runAndAssertCanDoActionFailure(cmd, VdcBllMessages.ACTION_TYPE_FAILED_DISK_NOT_EXIST); } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage/RepoImage.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage/RepoImage.java index 8a9b4d1..1ca22ca 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage/RepoImage.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/storage/RepoImage.java @@ -11,6 +11,7 @@ */ public class RepoImage extends IVdcQueryable implements Serializable { private static final long serialVersionUID = 566928138057530047L; + private static final int SHORT_HASH_END_INDEX = 7; private Guid storagePoolId; private Guid repoDomainId; private String repoImageId; @@ -99,15 +100,19 @@ */ public String getRepoImageTitle() { if (repoImageName != null) { - // To provide an hint about the image id and at the same time - // maintain the image title short we just report 7 characters + // To provide a hint about the image id and at the same time maintain + // the image title short we just report SHORT_HASH_END_INDEX characters // of the id (similarly to what git does with hashes). - return repoImageName + " (" + repoImageId.substring(0, 7) + ")"; + return repoImageName + " (" + getShortHash() + ")"; } else { return repoImageId; } } + public String getShortHash() { + return repoImageId.substring(0, SHORT_HASH_END_INDEX); + } + /** * @param size * the size to set For future use. diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ExportRepoImageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ExportRepoImageModel.java index fddbf34..b2a8161 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ExportRepoImageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ExportRepoImageModel.java @@ -76,7 +76,7 @@ } @Override - public boolean showImportAsTemplateOptions() { + public boolean isImportModel() { return false; } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportExportRepoImageBaseModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportExportRepoImageBaseModel.java index d438720..978a456 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportExportRepoImageBaseModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportExportRepoImageBaseModel.java @@ -288,6 +288,6 @@ } } - public abstract boolean showImportAsTemplateOptions(); + public abstract boolean isImportModel(); } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportRepoImageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportRepoImageModel.java index 0a25f14..fb3b022 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportRepoImageModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/ImportRepoImageModel.java @@ -41,9 +41,9 @@ } public void setRepoImages(List<RepoImage> repoImages) { - ArrayList<EntityModel> entities = new ArrayList<EntityModel>(); + ArrayList<EntityModel> entities = new ArrayList<>(); for (RepoImage i : repoImages) { - entities.add(new EntityModel(i)); + entities.add(new RepoImageModel(i)); } setEntities(entities); } @@ -66,7 +66,7 @@ } @Override - public boolean showImportAsTemplateOptions() { + public boolean isImportModel() { return true; } @@ -88,6 +88,7 @@ importParameters.setSourceStorageDomainId(sourceStorageDomain.getId()); // destination + importParameters.setDiskAlias(((RepoImageModel) entity).getDiskImageAlias()); importParameters.setStoragePoolId(((StoragePool) getDataCenter().getSelectedItem()).getId()); importParameters.setStorageDomainId(((StorageDomain) getStorageDomain().getSelectedItem()).getId()); importParameters.setClusterId(((StorageDomain) getStorageDomain().getSelectedItem()).getId()); diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/RepoImageModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/RepoImageModel.java new file mode 100644 index 0000000..37e4eaf --- /dev/null +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/RepoImageModel.java @@ -0,0 +1,30 @@ +package org.ovirt.engine.ui.uicommonweb.models.storage; + +import org.ovirt.engine.core.common.businessentities.storage.RepoImage; +import org.ovirt.engine.ui.uicommonweb.models.EntityModel; + +public class RepoImageModel extends EntityModel<RepoImage> { + + public static final String GLANCE_DISK_ALIAS_PREFIX = "GlanceDisk-"; //$NON-NLS-1$ + + private String diskImageAlias; + + public RepoImageModel(RepoImage repoImage) { + super(repoImage); + } + + public String getDiskImageAlias() { + if (diskImageAlias == null) { + diskImageAlias = getGlanceDiskDefaultAlias(); + } + return diskImageAlias; + } + + public void setDiskImageAlias(String diskImageAlias) { + this.diskImageAlias = diskImageAlias; + } + + public String getGlanceDiskDefaultAlias() { + return GLANCE_DISK_ALIAS_PREFIX + getEntity().getShortHash(); + } +} diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java index fb00788..85aa1fb 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/ApplicationConstants.java @@ -1751,6 +1751,9 @@ @DefaultStringValue("Type") String typeStorage(); + @DefaultStringValue("(Click to Edit)") + String clickToEdit(); + // Storage General @DefaultStringValue("Size") String sizeStorageGeneral(); diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java index 339b266..607f085 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.webadmin.section.main.view.popup.storage; +import com.google.gwt.cell.client.FieldUpdater; import org.ovirt.engine.core.common.businessentities.Quota; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; @@ -17,14 +18,17 @@ import org.ovirt.engine.ui.common.widget.editor.generic.EntityModelCheckBoxEditor; import org.ovirt.engine.ui.common.widget.renderer.NameRenderer; import org.ovirt.engine.ui.common.widget.table.column.AbstractDiskSizeColumn; +import org.ovirt.engine.ui.common.widget.table.column.AbstractEditTextColumn; import org.ovirt.engine.ui.common.widget.table.column.AbstractEntityModelTextColumn; import org.ovirt.engine.ui.uicommonweb.models.EntityModel; import org.ovirt.engine.ui.uicommonweb.models.ListModel; import org.ovirt.engine.ui.uicommonweb.models.storage.ImportExportRepoImageBaseModel; +import org.ovirt.engine.ui.uicommonweb.models.storage.RepoImageModel; import org.ovirt.engine.ui.uicompat.Event; import org.ovirt.engine.ui.uicompat.IEventListener; import org.ovirt.engine.ui.uicompat.PropertyChangedEventArgs; import org.ovirt.engine.ui.webadmin.ApplicationConstants; +import org.ovirt.engine.ui.webadmin.ApplicationTemplates; import org.ovirt.engine.ui.webadmin.gin.AssetProvider; import org.ovirt.engine.ui.webadmin.section.main.presenter.popup.storage.ImportExportImagePopupPresenterWidget; @@ -87,6 +91,8 @@ private final static ApplicationConstants constants = AssetProvider.getConstants(); + private final static ApplicationTemplates templates = AssetProvider.getTemplates(); + @Inject public ImportExportImagePopupView(EventBus eventBus) { super(eventBus); @@ -108,6 +114,33 @@ imageListPanel = new SimplePanel(); + initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); + driver.initialize(this); + } + + @Override + public void edit(final ImportExportRepoImageBaseModel model) { + driver.edit(model); + + importAsTemplateEditor.setVisible(model.isImportModel()); + clusterEditor.setVisible(model.isImportModel()); + + model.getPropertyChangedEvent().addListener(new IEventListener<PropertyChangedEventArgs>() { + @Override + public void eventRaised(Event<? extends PropertyChangedEventArgs> ev, + Object sender, + PropertyChangedEventArgs args) { + if ("ImportExportEntities".equals(args.propertyName) //$NON-NLS-1$ + && model.getEntities() != null) { + imageList.setRowData(model.getEntities()); + } + } + }); + + initTable(model); + } + + private void initTable(ImportExportRepoImageBaseModel model) { imageList = new EntityModelCellTable<>(SelectionMode.NONE, true); imageList.addColumn(new AbstractEntityModelTextColumn<Object>() { @Override @@ -120,6 +153,10 @@ return constants.unknown(); } }, constants.fileNameIso()); + if (model.isImportModel()) { + imageList.addColumn(new DiskAliasTextColumn(new DiskAliasFieldUpdater()), + templates.sub(constants.diskSnapshotAlias(), constants.clickToEdit())); + } imageList.addColumn(new AbstractEntityModelTextColumn<Object>() { @Override public String getText(Object image) { @@ -135,7 +172,7 @@ @Override protected Long getRawValue(EntityModel object) { if (object.getEntity() instanceof RepoImage) { - return ((RepoImage) (object.getEntity())).getSize(); + return ((RepoImage) object.getEntity()).getSize(); } else if (object.getEntity() instanceof DiskImage) { return ((DiskImage) (object.getEntity())).getSizeInGigabytes(); } @@ -145,27 +182,6 @@ imageList.setWidth("100%", true); //$NON-NLS-1$ imageListPanel.setWidget(imageList); - - initWidget(ViewUiBinder.uiBinder.createAndBindUi(this)); - driver.initialize(this); - } - - @Override - public void edit(final ImportExportRepoImageBaseModel model) { - driver.edit(model); - - importAsTemplateEditor.setVisible(model.showImportAsTemplateOptions()); - clusterEditor.setVisible(model.showImportAsTemplateOptions()); - - model.getPropertyChangedEvent().addListener(new IEventListener<PropertyChangedEventArgs>() { - @Override - public void eventRaised(Event<? extends PropertyChangedEventArgs> ev, Object sender, PropertyChangedEventArgs args) { - if ("ImportExportEntities".equals(args.propertyName) //$NON-NLS-1$ - && model.getEntities() != null) { - imageList.setRowData(model.getEntities()); - } - } - }); } @Override @@ -182,4 +198,22 @@ messagePanel.add(new Label(message)); } + private static final class DiskAliasTextColumn extends AbstractEditTextColumn<RepoImageModel> { + + private DiskAliasTextColumn(DiskAliasFieldUpdater diskAliasFieldUpdater) { + super(diskAliasFieldUpdater); + } + + @Override + public String getValue(RepoImageModel repoImageModel) { + return repoImageModel.getDiskImageAlias(); + } + } + + private static final class DiskAliasFieldUpdater implements FieldUpdater<RepoImageModel, String> { + @Override + public void update(int i, RepoImageModel repoImageModel, String diskAlias) { + repoImageModel.setDiskImageAlias(diskAlias); + } + } } -- To view, visit https://gerrit.ovirt.org/41394 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia25b0e38e577ebe745ccbc898b5af07f35e2847b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Idan Shaby <ish...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches