summaryrefslogblamecommitdiffstats
path: root/src/main/java/org/openslx/util/vm/OvfConfig.java
blob: a7a5c752ca59d9f93531952aff2e46160499b93a (plain) (tree)





















                                                

                                                                

                                                              
   



                                                                               



                                                                          
                                    
 
                                                                                               
                                                                  




                                                                                                           
                                                    
                       






                                                                                
           
                                                                          
                                                        

                                                                                                       
                 
                                               
                        




                                                                             


           



                                              
                                        
                     

                                                                                                          




                                  
package org.openslx.util.vm;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;

import javax.xml.XMLConstants;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
import javax.xml.xpath.XPathExpressionException;

import org.apache.log4j.Logger;
import org.openslx.util.Util;
import org.openslx.util.XmlHelper;
import org.openslx.util.vm.VmMetaData.HardDisk;
import org.w3c.dom.Document;
import org.xml.sax.SAXException;

/**
 * Class handling the parsing of a .ovf machine description file
 * For now only a dummy for conversion and will be replaced in
 * the image upload flow after converting the ovf to vmx.
 */
public class OvfConfig {
	private static final Logger LOGGER = Logger.getLogger(OvfConfig.class);

	// key information set during initial parsing of the XML file
	private String osName = new String();
	private ArrayList<HardDisk> hddsArray = new ArrayList<HardDisk>();

	// XPath and DOM parsing related members
	private Document doc = null;

	public OvfConfig(File file) throws IOException, UnsupportedVirtualizerFormatException {
		LOGGER.debug("Entering OvfConfig class creation");
		doc = XmlHelper.parseDocumentFromStream(new FileInputStream(file));
		doc = XmlHelper.removeFormattingNodes(doc);
		if (doc == null)
			throw new UnsupportedVirtualizerFormatException(
					"Could not create DOM from given ovf machine configuration file!");
		LOGGER.debug("DOM creation worked");
		init();
	}

	/**
	 * Main initialization functions parsing the document created during the
	 * constructor.
	 * 
	 * @throws UnsupportedVirtualizerFormatException
	 */
	private void init() throws UnsupportedVirtualizerFormatException {
		LOGGER.debug("Entering OvfConfig init");
		if (Util.isEmptyString(getDisplayName())) {
			throw new UnsupportedVirtualizerFormatException("Machine doesn't have a name");
		}
		LOGGER.debug(getDisplayName());
		// try {
		// 	setHdds();
		// } catch ( XPathExpressionException e ) {
		// 	LOGGER.debug( "Could not initialize VBoxConfig", e );
		// 	return;
		// }
	}

	/**
	 * Getter for the display name
	 *
	 * @return the display name of this VM
	 */
	public String getDisplayName() {
		try {
			return XmlHelper.XPath.compile("/Envelope/VirtualSystem/Name").evaluate(this.doc);
		} catch (XPathExpressionException e) {
			return "";
		}
	}

}