Maor Lipchuk has uploaded a new change for review.

Change subject: core: Adding OVF utils
......................................................................

core: Adding OVF utils

Adding OVF utils to parse OVF strings into OvfEntityData

Change-Id: I3f36ccf2f865d11ef3baa1908346aa3aab1857d5
Signed-off-by: Maor Lipchuk <[email protected]>
---
A 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/OvfUtils.java
1 file changed, 84 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/47/29147/1

diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/OvfUtils.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/OvfUtils.java
new file mode 100644
index 0000000..2550d7f
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/OvfUtils.java
@@ -0,0 +1,84 @@
+package org.ovirt.engine.core.utils;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+import org.ovirt.engine.core.common.businessentities.OvfEntityData;
+import org.ovirt.engine.core.common.businessentities.VmEntityType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.archivers.tar.OutMemoryTar;
+
+public class OvfUtils {
+    private final static String TEMPLATE_ENTITY_TYPE = "<TemplateType>";
+    private final static String ENTITY_NAME = "<Name>";
+    private final static String END_ENTITY_NAME = "</Name>";
+    private final static String OVF_FILE_EXT = ".ovf";
+
+    private static String getEntityName(String ovfData) {
+        int beginIndexOfEntityName = ovfData.indexOf(ENTITY_NAME) + 
ENTITY_NAME.length();
+        int endIndexOfEntityName = ovfData.indexOf(END_ENTITY_NAME);
+        String entityName = ovfData.substring(beginIndexOfEntityName, 
endIndexOfEntityName);
+        return entityName;
+    }
+
+    private static VmEntityType getVmEntityType(String ovfData) {
+        VmEntityType vmEntityType = VmEntityType.VM;
+        int indexOfEntityType = ovfData.indexOf(TEMPLATE_ENTITY_TYPE);
+        if (indexOfEntityType != -1) {
+            vmEntityType = VmEntityType.TEMPLATE;
+        }
+        return vmEntityType;
+    }
+
+    private static Guid getEntityId(String fileName) {
+        return Guid.createGuidFromString(fileName.substring(0, 
fileName.indexOf(".ovf")));
+    }
+
+    private static OvfEntityData createOvfEntityData(Guid storageDomainId,
+            String ovfData,
+            VmEntityType vmEntityType,
+            String entityName,
+            Guid entityId) {
+        OvfEntityData ovfEntityData = new OvfEntityData();
+        ovfEntityData.setOvfData(ovfData);
+        ovfEntityData.setEntityType(vmEntityType);
+        ovfEntityData.setEntityName(entityName);
+        ovfEntityData.setStorageDomainId(storageDomainId);
+        ovfEntityData.setEntityId(entityId);
+        return ovfEntityData;
+    }
+
+    public static List<OvfEntityData> getOvfEntities(byte[] tarByte, Guid 
storageDomainId) {
+        List<OvfEntityData> ovfEntityDataFromTar = new ArrayList<>();
+        InputStream is = new ByteArrayInputStream(tarByte);
+
+        Map<String, String> filesFromTar;
+        try (OutMemoryTar memoryTar = new OutMemoryTar(is)) {
+            filesFromTar = memoryTar.unTar();
+        } catch (IOException e) {
+            throw new RuntimeException(String.format("Exception while getting 
OVFs files from tar file for domain %s",
+                    storageDomainId), e);
+        }
+
+        for (String fileName : filesFromTar.keySet()) {
+            if (fileName.contains(OVF_FILE_EXT)) {
+                String ovfData = filesFromTar.get(fileName);
+
+                // Creates an OVF entity data.
+                OvfEntityData ovfEntityData =
+                        createOvfEntityData(storageDomainId,
+                                ovfData,
+                                getVmEntityType(ovfData),
+                                getEntityName(ovfData),
+                                storageDomainId);
+                ovfEntityDataFromTar.add(ovfEntityData);
+            }
+        }
+
+        return ovfEntityDataFromTar;
+    }
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3f36ccf2f865d11ef3baa1908346aa3aab1857d5
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Maor Lipchuk <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to