summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/openslx/util/vm/OvfConfig.java
diff options
context:
space:
mode:
authorStephan Schwär2020-10-08 02:34:02 +0200
committerStephan Schwär2020-10-08 02:34:02 +0200
commit2bfddcf3155679e50ff188abe377a20232128632 (patch)
tree043d66792c212737bbbaccee600d416e128d7abb /src/main/java/org/openslx/util/vm/OvfConfig.java
parentCreate Object of DockerMetaDataDummy (diff)
downloadmaster-sync-shared-2bfddcf3155679e50ff188abe377a20232128632.tar.gz
master-sync-shared-2bfddcf3155679e50ff188abe377a20232128632.tar.xz
master-sync-shared-2bfddcf3155679e50ff188abe377a20232128632.zip
Add meta and config files for ovf format
Diffstat (limited to 'src/main/java/org/openslx/util/vm/OvfConfig.java')
-rw-r--r--src/main/java/org/openslx/util/vm/OvfConfig.java107
1 files changed, 107 insertions, 0 deletions
diff --git a/src/main/java/org/openslx/util/vm/OvfConfig.java b/src/main/java/org/openslx/util/vm/OvfConfig.java
new file mode 100644
index 0000000..3055075
--- /dev/null
+++ b/src/main/java/org/openslx/util/vm/OvfConfig.java
@@ -0,0 +1,107 @@
+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 used to parse the xml to get the path of the vmdk
+ * from the ovf for sanity checking and cleanup after conversion.
+ */
+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.info("Entering OvfConfig class creation");
+ // first validate xml
+ // try {
+ // SchemaFactory factory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
+ // InputStream xsdStream = OvfConfig.class.getResourceAsStream( "/master-sync-shared/xml/ovf_1.1.1.xsd" );
+ // LOGGER.info("xsdStream creation worked");
+ // if ( xsdStream == null ) {
+ // LOGGER.warn( "Cannot validate ovf XML: No XSD found in JAR" );
+ // } else {
+ // LOGGER.info("Before schema creation");
+ // Schema schema = factory.newSchema( new StreamSource( xsdStream ) );
+ // LOGGER.info("Created schema class");
+ // Validator validator = schema.newValidator();
+ // LOGGER.info("Created validator class");
+ // validator.validate( new StreamSource( file ) );
+ // LOGGER.info("Validated");
+ // }
+ // } catch ( SAXException e ) {
+ // LOGGER.error( "Selected ovf file was not validated against the XSD schema: " + e.getMessage() );
+ // }
+ LOGGER.info("XSD validation worked.");
+ // valid xml, try to create the DOM
+ 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.info("DOM creation worked");
+ init();
+ }
+
+ /**
+ * Main initialization functions parsing the document created during the constructor.
+ * @throws UnsupportedVirtualizerFormatException
+ */
+ private void init() throws UnsupportedVirtualizerFormatException
+ {
+ LOGGER.info("Entering OvfConfig init");
+ if ( Util.isEmptyString( getDisplayName() ) ) {
+ throw new UnsupportedVirtualizerFormatException( "Machine doesn't have a name" );
+ }
+ LOGGER.info( 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 "";
+ }
+ }
+
+} \ No newline at end of file