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
