Maor Lipchuk has uploaded a new change for review.

Change subject: core: Add support for copied disk template
......................................................................

core: Add support for copied disk template

Add support for copied disk Template so an unregistered Template can be
registered with its copied disks

Change-Id: Id7514146d26792a361e47d1de820f5233ff9bf40
Bug-Url: https://bugzilla.redhat.com/1138136
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java
2 files changed, 59 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/33/35933/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
index fcbeff6..71d2687 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImagesHandler.java
@@ -429,7 +429,7 @@
         return returnValue;
     }
 
-    private static DiskImage isImageExist(Guid storagePoolId, DiskImage image) 
{
+    public static DiskImage isImageExist(Guid storagePoolId, DiskImage image) {
         DiskImage fromIrs = null;
         try {
             Guid storageDomainId = image.getStorageIds().get(0);
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java
index 17702f3..0e81f46 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmTemplateFromConfigurationCommand.java
@@ -10,8 +10,12 @@
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.OvfEntityData;
 import org.ovirt.engine.core.common.businessentities.VmTemplate;
+import org.ovirt.engine.core.common.businessentities.image_storage_domain_map;
 import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.utils.ovf.OvfReaderException;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -98,12 +102,66 @@
     public void executeCommand() {
         super.executeCommand();
         if (isImagesAlreadyOnTarget()) {
+            setCopiedImages();
             
getUnregisteredOVFDataDao().removeEntity(ovfEntityData.getEntityId(), null);
         }
         setActionReturnValue(getVmTemplate().getId());
         setSucceeded(true);
     }
 
+    private void setCopiedImages() {
+        List<OvfEntityData> ovfEntityDataList =
+                
getUnregisteredOVFDataDao().getByEntityIdAndStorageDomain(ovfEntityData.getEntityId(),
 null);
+        List<DiskImage> copiedImagesList = initializeListForCopiedImage();
+        for (OvfEntityData ovfEntityDataFetched : ovfEntityDataList) {
+            setValidCopiedStorageDomain(copiedImagesList, getImages(), 
ovfEntityDataFetched.getStorageDomainId());
+        }
+        insertNewCopiedDiskImage(copiedImagesList);
+    }
+
+    private List<DiskImage> initializeListForCopiedImage() {
+        List<DiskImage> clonedDiskImages = (ArrayList)getImages().clone();
+        ArrayList<Guid> storageDomains = new ArrayList<>();
+        for (DiskImage clonedDiskImage : clonedDiskImages) {
+            clonedDiskImage.setStorageIds(storageDomains);
+        }
+        return clonedDiskImages;
+    }
+
+    private void setValidCopiedStorageDomain(List<DiskImage> 
copiedImagesList,List<DiskImage> originalmages, Guid StorageDomainId) {
+        List<DiskImage> clonedDiskImages = (ArrayList)getImages().clone();
+        int index = 0;
+        for (DiskImage clonedDiskImage : clonedDiskImages) {
+            if 
(originalmages.get(index).getStorageIds().get(0).equals(StorageDomainId)) {
+                continue;
+            }
+            if (ImagesHandler.isImageExist(getStoragePoolId(), 
clonedDiskImage) != null) {
+                clonedDiskImage.getStorageIds().add(StorageDomainId);
+            }
+            index++;
+        }
+    }
+
+    private void insertNewCopiedDiskImage(final List<DiskImage> diskImages) {
+        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
+
+            @Override
+            public Void runInTransaction() {
+                for (DiskImage diskImage : diskImages) {
+                    for (Guid storageDomainId : diskImage.getStorageIds()) {
+                        image_storage_domain_map image_storage_domain_map =
+                                new 
image_storage_domain_map(diskImage.getImageId(),
+                                        storageDomainId,
+                                        diskImage.getQuotaId(),
+                                        diskImage.getDiskProfileId());
+                        
DbFacade.getInstance().getImageStorageDomainMapDao().save(image_storage_domain_map);
+                    }
+                }
+                return null;
+            }
+        });
+    }
+
     @Override
     public AuditLogType getAuditLogTypeValue() {
         return getSucceeded() ? 
AuditLogType.TEMPLATE_IMPORT_FROM_CONFIGURATION_SUCCESS :


-- 
To view, visit http://gerrit.ovirt.org/35933
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id7514146d26792a361e47d1de820f5233ff9bf40
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to