/* * Copyright (c) 2013-2014 EMC Corporation * All Rights Reserved */ package com.emc.storageos.systemservices.impl.iso; import com.emc.storageos.svcs.errorhandling.resources.APIException; import com.emc.storageos.model.property.PropertiesMetadata; import com.emc.storageos.model.property.PropertyMetadata; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.Map; /** * Class used to create ISO 9660 image. */ public class CreateISO { private static final Logger _log = LoggerFactory .getLogger(CreateISO.class); /** * Method that creates ISO 9660 image having properties file directly under root * directory. * * @param propertyInfo Properties to be copied to iso image. * @return ISO image as byte array */ public static byte[] getBytes(Map<String, String> ovfPropertiesMap, Map<String, String> mutatedPropertiesMap) { String ovfProperties = formatProperties(ovfPropertiesMap); String overrideProperties = formatProperties(mutatedPropertiesMap); ISOBuffer isoBuffer = new ISOBuffer(); isoBuffer.addFile(ISOConstants.CONTROLLER_OVF_FILE_NAME, ovfProperties.getBytes()); isoBuffer.addFile(ISOConstants.OVERRIDES_FILE_NAME, overrideProperties.getBytes()); return isoBuffer.createISO(); } private static String formatProperties(Map<String, String> properties) { StringBuffer props = new StringBuffer(); PropertyMetadata metadata; String equal = "="; String newLine = "\n"; // Getting properties metadata Map<String, PropertyMetadata> metadataMap = PropertiesMetadata.getGlobalMetadata(); if (metadataMap == null) { _log.warn("Properties metadata not found"); throw APIException.internalServerErrors.targetIsNullOrEmpty("Properties metadata"); } // Looping through each property, checking if it is visible to all nodes for (Map.Entry<String, String> entry : properties.entrySet()) { // Check if this property is visible to all nodes metadata = metadataMap.get(entry.getKey()); if (metadata != null && !metadata.getControlNodeOnly()) { props.append(entry.getKey()); props.append(equal); props.append(entry.getValue()); props.append(newLine); } else { _log.info("Property metadata not found or control only: " + entry.getKey()); } } return props.toString(); } }