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