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

Reply via email to