Maor Lipchuk has uploaded a new change for review.

Change subject: core: Adding support for OurMemoryTar
......................................................................

core: Adding support for OurMemoryTar

Adding a utility to retrieve OVF data of entities from a tar file.

Change-Id: Ie4fbc12337c16baca4be8a82d4a51b8b3ab0af4a
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
A 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/archivers/tar/OutMemoryTar.java
1 file changed, 100 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/39/29039/1

diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/archivers/tar/OutMemoryTar.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/archivers/tar/OutMemoryTar.java
new file mode 100644
index 0000000..2c26abf
--- /dev/null
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/archivers/tar/OutMemoryTar.java
@@ -0,0 +1,100 @@
+package org.ovirt.engine.core.utils.archivers.tar;
+
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
+import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
+import org.ovirt.engine.core.common.businessentities.OvfEntityData;
+import org.ovirt.engine.core.common.businessentities.VmEntityType;
+import org.ovirt.engine.core.compat.Guid;
+
+public class OutMemoryTar {
+    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";
+
+    public static List<OvfEntityData> unTar(byte[] tarByte, Guid 
storageDomainId) {
+        List<OvfEntityData> ovfEntityDataFromTar = new ArrayList<>();
+        InputStream tarInputStream = new ByteArrayInputStream(tarByte);
+        TarArchiveInputStream ovfDiskTarArchive = new 
TarArchiveInputStream(tarInputStream);
+        TarArchiveEntry tarEntry = null;
+        try {
+            tarEntry = ovfDiskTarArchive.getNextTarEntry();
+            String ovfData;
+            int offset = 0;
+            while (tarEntry != null) {
+                if (tarEntry.getName().contains(OVF_FILE_EXT)) {
+                    // Get Size of the file and create a byte array for the 
size.
+                    byte[] content = new byte[(int) tarEntry.getSize()];
+
+                    // Read file from the archive into byte array.
+                    ovfDiskTarArchive.read(content, offset, content.length - 
offset);
+                    ovfData = new String(content);
+
+                    // Get an ovf object.
+                    OvfEntityData ovfEntityData =
+                            initOvfEntityData(storageDomainId,
+                                    ovfData,
+                                    getVmEntityType(ovfData),
+                                    getEntityName(ovfData),
+                                    getEntityId(tarEntry));
+                    ovfEntityDataFromTar.add(ovfEntityData);
+                }
+                tarEntry = ovfDiskTarArchive.getNextTarEntry();
+            }
+        } catch (IOException e) {
+            e.printStackTrace();
+        } finally {
+            closeArchive(ovfDiskTarArchive);
+        }
+        return ovfEntityDataFromTar;
+    }
+
+    private static Guid getEntityId(TarArchiveEntry tarEntry) {
+        Guid entityId = 
Guid.createGuidFromString(tarEntry.getName().substring(0, 
tarEntry.getName().indexOf(".ovf")));
+        return entityId;
+    }
+
+    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 OvfEntityData initOvfEntityData(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;
+    }
+
+    private static void closeArchive(TarArchiveInputStream ovfDiskTarArchive) {
+        try {
+            ovfDiskTarArchive.close();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+    }
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ie4fbc12337c16baca4be8a82d4a51b8b3ab0af4a
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