Oved Ourfali has uploaded a new change for review. Change subject: core+webadmin: importing glance image as a template ......................................................................
core+webadmin: importing glance image as a template This patch allows to import a glance image as a new template. The template properties are identical to the Blank template. The only disk in this new template is a copy of the glance image. Currently, the glance image is imported once as a disk, and then this disk is being copied to the template. Future optimizations can be done on that. Change-Id: I537094bf9f738335833330665d29a1d39c65678d Signed-off-by: Oved Ourfali <oourf...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCommand.java A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCopyImageTaskHandler.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportRepoImageParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java 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/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 M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.java M frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.ui.xml 11 files changed, 320 insertions(+), 11 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/23223/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java index 9275879..a2d290c 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CreateImageTemplateCommand.java @@ -66,7 +66,7 @@ getReturnValue().getInternalVdsmTaskIdList().add( createTask(taskId, vdsReturnValue.getCreationInfo(), - VdcActionType.AddVmTemplate, + getParameters().getParentCommand(), VdcObjectType.Storage, getParameters().getStorageDomainId(), getParameters().getDestinationStorageDomainId())); 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 1fb7fba..4db4ae2 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 @@ -1,5 +1,9 @@ package org.ovirt.engine.core.bll; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + import org.ovirt.engine.core.bll.provider.OpenStackImageException; import org.ovirt.engine.core.bll.provider.OpenStackImageProviderProxy; import org.ovirt.engine.core.bll.provider.ProviderProxyFactory; @@ -19,11 +23,6 @@ import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Guid; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Map; @SuppressWarnings("unused") @NonTransactiveCommandAttribute @@ -52,10 +51,13 @@ @Override protected List<SPMAsyncTaskHandler> initTaskHandlers() { - return Arrays.<SPMAsyncTaskHandler> asList( - new ImportRepoImageCreateTaskHandler(this), - new ImportRepoImageCopyTaskHandler(this) - ); + List<SPMAsyncTaskHandler> taskHandlers = new ArrayList<SPMAsyncTaskHandler>(); + taskHandlers.add(0, new ImportRepoImageCreateTaskHandler(this)); + taskHandlers.add(1, new ImportRepoImageCopyTaskHandler(this)); + if (getParameters().getImportAsTemplate()) { + taskHandlers.add(2, new ImportRepoImageCopyImageTaskHandler(this)); + } + return taskHandlers; } /* Overridden stubs declared as public in order to implement ITaskHandlerCommand */ diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCopyImageTaskHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCopyImageTaskHandler.java new file mode 100644 index 0000000..0a33efa --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportRepoImageCopyImageTaskHandler.java @@ -0,0 +1,192 @@ +package org.ovirt.engine.core.bll; + +import java.util.ArrayList; +import java.util.List; + +import org.ovirt.engine.core.bll.job.ExecutionHandler; +import org.ovirt.engine.core.bll.tasks.SPMAsyncTaskHandler; +import org.ovirt.engine.core.bll.utils.VmDeviceUtils; +import org.ovirt.engine.core.common.VdcObjectType; +import org.ovirt.engine.core.common.action.AddVmTemplateParameters; +import org.ovirt.engine.core.common.action.CreateImageTemplateParameters; +import org.ovirt.engine.core.common.action.ImportRepoImageParameters; +import org.ovirt.engine.core.common.action.RemoveDiskParameters; +import org.ovirt.engine.core.common.action.VdcActionType; +import org.ovirt.engine.core.common.action.VdcReturnValueBase; +import org.ovirt.engine.core.common.asynctasks.AsyncTaskType; +import org.ovirt.engine.core.common.businessentities.DiskImage; +import org.ovirt.engine.core.common.businessentities.DiskInterface; +import org.ovirt.engine.core.common.businessentities.ImageStatus; +import org.ovirt.engine.core.common.businessentities.Permissions; +import org.ovirt.engine.core.common.businessentities.StorageDomain; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.VmDeviceGeneralType; +import org.ovirt.engine.core.common.businessentities.VmDeviceId; +import org.ovirt.engine.core.common.businessentities.VmStatic; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.common.businessentities.VolumeFormat; +import org.ovirt.engine.core.common.businessentities.VolumeType; +import org.ovirt.engine.core.common.utils.VmDeviceType; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; + + +public class ImportRepoImageCopyImageTaskHandler implements SPMAsyncTaskHandler { + + private final CommandBase<? extends ImportRepoImageParameters> enclosingCommand; + + private StorageDomain destinationStorageDomain; + + public ImportRepoImageCopyImageTaskHandler(CommandBase<? extends ImportRepoImageParameters> enclosingCommand) { + this.enclosingCommand = enclosingCommand; + } + + @Override + public void execute() { + if (enclosingCommand.getParameters().getTaskGroupSuccess()) { + + VmTemplate blankTemplate = enclosingCommand.getVmTemplateDAO().get(VmTemplateHandler.BLANK_VM_TEMPLATE_ID); + VmStatic masterVm = new VmStatic(blankTemplate); + String vmTemplateName = Guid.newGuid().toString(); + AddVmTemplateParameters parameters = new AddVmTemplateParameters(masterVm, vmTemplateName, "Glance imported template"); + VDSGroup vdsGroup = getVdsGroup(); + + if (vdsGroup != null) { + masterVm.setVdsGroupId(vdsGroup.getId()); + } + + VdcReturnValueBase addVmTemplateReturnValue = + Backend.getInstance().runInternalAction(VdcActionType.AddVmTemplate, parameters, ExecutionHandler.createDefaultContexForTasks(enclosingCommand.getExecutionContext())); + + if (addVmTemplateReturnValue.getActionReturnValue() != null) { + Guid templateId = (Guid) addVmTemplateReturnValue.getActionReturnValue(); + enclosingCommand.getParameters().setNewTemplateId(templateId); + VmTemplateHandler.lockVmTemplateInTransaction(templateId, enclosingCommand.getCompensationContext()); + + // That's the downloaded image + DiskImage diskImage = enclosingCommand.getParameters().getDiskImage(); + ArrayList<Guid> storageIds = new ArrayList<>(); + storageIds.add(enclosingCommand.getParameters().getStorageDomainId()); + diskImage.setStorageIds(storageIds); + diskImage.setStoragePoolId(enclosingCommand.getParameters().getStoragePoolId()); + diskImage.setId(enclosingCommand.getParameters().getImageGroupID()); + diskImage.setDiskInterface(DiskInterface.VirtIO); + + if (diskImage.getVolumeFormat() == VolumeFormat.RAW && + getDestinationStorageDomain().getStorageType().isBlockDomain()) { + diskImage.setVolumeType(VolumeType.Preallocated); + } else { + diskImage.setVolumeType(VolumeType.Sparse); + } + + VdcReturnValueBase createImageTemplateReturnValue = + Backend.getInstance().runInternalAction(VdcActionType.CreateImageTemplate, + getCreateImageTemplateParameters(diskImage, parameters.getEntityInfo().getId(), vmTemplateName), + ExecutionHandler.createDefaultContexForTasks(enclosingCommand.getExecutionContext())); + + enclosingCommand.getReturnValue().getVdsmTaskIdList().addAll(createImageTemplateReturnValue.getInternalVdsmTaskIdList()); + + ExecutionHandler.setAsyncJob(enclosingCommand.getExecutionContext(), true); + + if (createImageTemplateReturnValue.getActionReturnValue() != null) { + enclosingCommand.getParameters().setTemplateDiskImage(((DiskImage) createImageTemplateReturnValue.getActionReturnValue())); + } + } + } + } + + protected VDSGroup getVdsGroup() { + VDSGroup vdsGroup = null; + List<VDSGroup> vdsGroups = DbFacade.getInstance().getVdsGroupDao().getAllForStoragePool(enclosingCommand.getParameters().getStoragePoolId()); + if (!vdsGroups.isEmpty()) { + vdsGroup = vdsGroups.get(0); + } + + return vdsGroup; + } + + protected StorageDomain getDestinationStorageDomain() { + if (destinationStorageDomain == null) { + destinationStorageDomain = DbFacade.getInstance().getStorageDomainDao().get( + enclosingCommand.getParameters().getStorageDomainId()); + } + return destinationStorageDomain; + } + + protected CreateImageTemplateParameters getCreateImageTemplateParameters(DiskImage diskImage, Guid templateId, String templateName) { + CreateImageTemplateParameters parameters = new CreateImageTemplateParameters( + diskImage.getImageId(), templateId, templateName, Guid.Empty); + parameters.setStoragePoolId(enclosingCommand.getParameters().getStoragePoolId()); + parameters.setStorageDomainId(enclosingCommand.getParameters().getStorageDomainId()); + parameters.setImageGroupID(enclosingCommand.getParameters().getImageGroupID()); + parameters.setQuotaId(enclosingCommand.getParameters().getQuotaId()); + parameters.setParentCommand(VdcActionType.ImportRepoImage); + parameters.setParentParameters(enclosingCommand.getParameters()); + parameters.setDestinationStorageDomainId(getDestinationStorageDomain().getId()); + parameters.setDiskAlias(templateName + "-disk"); + + return parameters; + } + + @Override + public void endSuccessfully() { + DiskImage templateDiskImage = enclosingCommand.getParameters().getTemplateDiskImage(); + Guid templateId = enclosingCommand.getParameters().getNewTemplateId(); + VmDeviceUtils.addManagedDevice(new VmDeviceId(templateDiskImage.getId(), + templateId), + VmDeviceGeneralType.DISK, + VmDeviceType.DISK, + null, + true, + Boolean.FALSE, + null); + + MultiLevelAdministrationHandler.addPermission(new Permissions( + enclosingCommand.getCurrentUser().getId(), PredefinedRoles.DISK_OPERATOR.getId(), + templateDiskImage.getId(), VdcObjectType.Disk)); + + ImagesHandler.updateImageStatus(templateDiskImage.getImageId(), ImageStatus.OK); + ImagesHandler.updateImageStatus(enclosingCommand.getParameters().getDiskImage().getImageId(), ImageStatus.OK); + VmTemplateHandler.unlockVmTemplate(templateId); + enclosingCommand.getReturnValue().setSucceeded(true); + } + + @Override + public void endWithFailure() { + + Guid templateId = enclosingCommand.getParameters().getNewTemplateId(); + + // If the template was created we need to remove it + if (templateId != null) { + // Unlocking the template + VmTemplateHandler.unlockVmTemplate(templateId); + + // Removing the template + DbFacade.getInstance().getVmTemplateDao().remove(enclosingCommand.getVmTemplateId()); + } + // cleaning up leftovers from previous handlers + compensate(); + + enclosingCommand.getReturnValue().setSucceeded(true); + } + + @Override + public void compensate() { + // Unlocking image before deletion + ImagesHandler.updateImageStatus(enclosingCommand.getParameters().getDiskImage().getImageId(), ImageStatus.OK); + VdcReturnValueBase vdcReturnValue = Backend.getInstance().runInternalAction(VdcActionType.RemoveDisk, + new RemoveDiskParameters(enclosingCommand.getParameters().getImageGroupID())); + enclosingCommand.getReturnValue().getVdsmTaskIdList().addAll(vdcReturnValue.getInternalVdsmTaskIdList()); + } + + @Override + public AsyncTaskType getTaskType() { + return null; // No implementation - handled by the command + } + + @Override + public AsyncTaskType getRevertTaskType() { + return AsyncTaskType.deleteImage; + } + +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportRepoImageParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportRepoImageParameters.java index 36eb304..78fd0a2 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportRepoImageParameters.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ImportRepoImageParameters.java @@ -12,6 +12,9 @@ private DiskImage diskImage; private Guid sourceStorageDomainId; + private Guid newTemplateId; + private DiskImage templateDiskImage; + private boolean importAsTemplate; public String getSourceRepoImageId() { return sourceRepoImageId; @@ -19,6 +22,14 @@ public void setSourceRepoImageId(String sourceRepoImageId) { this.sourceRepoImageId = sourceRepoImageId; + } + + public void setImportAsTemplate(boolean importAsTemplate) { + this.importAsTemplate = importAsTemplate; + } + + public boolean getImportAsTemplate() { + return importAsTemplate; } public Guid getSourceStorageDomainId() { @@ -37,4 +48,20 @@ this.diskImage = diskImage; } + public Guid getNewTemplateId() { + return newTemplateId; + } + + public void setNewTemplateId(Guid newTemplateId) { + this.newTemplateId = newTemplateId; + } + + public DiskImage getTemplateDiskImage() { + return templateDiskImage; + } + + public void setTemplateDiskImage(DiskImage templateDiskImage) { + this.templateDiskImage = templateDiskImage; + } + } diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java index 9b873f2..2ab2676 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/businessentities/VmStatic.java @@ -110,6 +110,52 @@ setAllowConsoleReconnect(vmStatic.isAllowConsoleReconnect()); } + public VmStatic(VmBase vmBase) { + super(vmBase.getId(), + vmBase.getVdsGroupId(), + vmBase.getOsId(), + vmBase.getCreationDate(), + vmBase.getDescription(), + vmBase.getComment(), + vmBase.getMemSizeMb(), + vmBase.getNumOfSockets(), + vmBase.getCpuPerSocket(), + vmBase.getNumOfMonitors(), + vmBase.getSingleQxlPci(), + vmBase.getDomain(), + vmBase.getTimeZone(), + vmBase.getVmType(), + vmBase.getUsbPolicy(), + vmBase.isFailBack(), + vmBase.getDefaultBootSequence(), + vmBase.getNiceLevel(), + vmBase.getCpuShares(), + vmBase.getPriority(), + vmBase.isAutoStartup(), + vmBase.isStateless(), + vmBase.getIsoPath(), + vmBase.getOrigin(), + vmBase.getKernelUrl(), + vmBase.getKernelParams(), + vmBase.getInitrdUrl(), + vmBase.getQuotaId(), + vmBase.isSmartcardEnabled(), + vmBase.isDeleteProtected(), + vmBase.getSsoMethod(), + vmBase.getTunnelMigration(), + vmBase.getVncKeyboardLayout(), + vmBase.getMinAllocatedMem(), + vmBase.isRunAndPause(), + vmBase.getCreatedByUserId()); + setName(vmBase.getName()); + vmtGuid = Guid.Empty; + setNumOfMonitors(vmBase.getNumOfMonitors()); + setDefaultDisplayType(vmBase.getDefaultDisplayType()); + setDedicatedVmForVds(vmBase.getDedicatedVmForVds()); + setMigrationSupport(vmBase.getMigrationSupport()); + setAllowConsoleReconnect(vmBase.isAllowConsoleReconnect()); + } + public String getCustomProperties() { return customProperties; } 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 38964bb..201ee31 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 @@ -1603,4 +1603,7 @@ @DefaultStringValue("Override SPICE proxy") String defineSpiceProxyEnable(); + @DefaultStringValue("Import as Template") + String importAsTemplate(); + } 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 b133b9d..756d976 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 @@ -74,4 +74,9 @@ } }, this); } + + @Override + public boolean showImportAsTemplateOption() { + 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 0b645ea..cd0d173 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 @@ -39,6 +39,15 @@ protected static UIConstants constants = ConstantsManager.getInstance().getConstants(); protected List<EntityModel> entities; + private EntityModel<Boolean> importAsTemplate; + + public EntityModel getImportAsTemplate() { + return importAsTemplate; + } + + public void setImportAsTemplate(EntityModel importAsTemplate) { + this.importAsTemplate = importAsTemplate; + } private ListModel dataCenter; private ListModel storageDomain; @@ -113,6 +122,8 @@ setQuota(new ListModel()); getQuota().setIsEmpty(true); + setImportAsTemplate(new EntityModel()); + getImportAsTemplate().setEntity(false); setOkCommand(new UICommand("Ok", this)); //$NON-NLS-1$ getOkCommand().setTitle(constants.ok()); @@ -236,4 +247,7 @@ } } } + + public abstract boolean showImportAsTemplateOption(); + } 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 227dd7f..953d981 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 @@ -55,6 +55,11 @@ } @Override + public boolean showImportAsTemplateOption() { + return true; + } + + @Override public void executeCommand(UICommand command) { super.executeCommand(command); @@ -81,6 +86,8 @@ importParameters.setQuotaId(selectedQuota.getId()); } + importParameters.setImportAsTemplate((Boolean) getImportAsTemplate().getEntity()); + actionParameters.add(importParameters); } 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 ff2fb3f..ccd9bb9 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 @@ -17,9 +17,11 @@ 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.Align; import org.ovirt.engine.ui.common.widget.dialog.SimpleDialogPanel; import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable; import org.ovirt.engine.ui.common.widget.editor.EntityModelCellTable.SelectionMode; +import org.ovirt.engine.ui.common.widget.editor.EntityModelCheckBoxEditor; 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.table.column.DiskSizeColumn; @@ -67,6 +69,11 @@ @UiField(provided = true) SimplePanel imageListPanel; + @UiField(provided = true) + @Path(value = "importAsTemplate.entity") + @WithElementId("importAsTemplate") + public EntityModelCheckBoxEditor importAsTemplateEditor; + @Ignore EntityModelCellTable<ListModel> imageList; @@ -100,6 +107,9 @@ } }); quotaEditor.setLabel(constants.quota()); + + importAsTemplateEditor = new EntityModelCheckBoxEditor(Align.RIGHT); + importAsTemplateEditor.setLabel(constants.importAsTemplate()); imageListPanel = new SimplePanel(); @@ -149,6 +159,8 @@ public void edit(final ImportExportRepoImageBaseModel model) { driver.edit(model); + importAsTemplateEditor.setVisible(model.showImportAsTemplateOption()); + model.getPropertyChangedEvent().addListener(new IEventListener() { @Override public void eventRaised(Event ev, Object sender, EventArgs args) { diff --git a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.ui.xml b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.ui.xml index d946090..3ae2c25 100644 --- a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.ui.xml +++ b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/popup/storage/ImportExportImagePopupView.ui.xml @@ -23,10 +23,11 @@ <e:ListModelListBoxEditor ui:field="dataCenterEditor" /> <e:ListModelListBoxEditor ui:field="storageDomainEditor" /> <e:ListModelListBoxEditor ui:field="quotaEditor" /> + <e:EntityModelCheckBoxEditor ui:field="importAsTemplateEditor" /> <g:FlowPanel ui:field="messagePanel" visible="false" addStyleNames="{style.messagePanel}" /> <g:SimplePanel ui:field="imageListPanel" addStyleNames="{style.imageListPanel}" /> </g:FlowPanel> </d:content> </d:SimpleDialogPanel> -</ui:UiBinder> \ No newline at end of file +</ui:UiBinder> -- To view, visit http://gerrit.ovirt.org/23223 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I537094bf9f738335833330665d29a1d39c65678d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Oved Ourfali <oourf...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches