From dddab8618c542f11896c2f7b3b258850a8c01ff1 Mon Sep 17 00:00:00 2001
From: Simon Rettberg
Date: Tue, 26 Jun 2018 10:26:57 +0200
Subject: Move ResourceLoader to dozmod -- is client specific
---
pom.xml | 6 -
src/main/java/org/openslx/util/ResourceLoader.java | 176 ---
src/main/java/org/openslx/util/vm/VboxConfig.java | 15 +-
.../master-sync-shared/xml/VirtualBox-settings.xsd | 1489 ++++++++++++++++++++
4 files changed, 1499 insertions(+), 187 deletions(-)
delete mode 100644 src/main/java/org/openslx/util/ResourceLoader.java
create mode 100644 src/main/resources/master-sync-shared/xml/VirtualBox-settings.xsd
diff --git a/pom.xml b/pom.xml
index 68c9315..3f867de 100644
--- a/pom.xml
+++ b/pom.xml
@@ -110,12 +110,6 @@
2.8.1
compile
-
- commons-io
- commons-io
- 2.5
- compile
-
org.lz4
lz4-java
diff --git a/src/main/java/org/openslx/util/ResourceLoader.java b/src/main/java/org/openslx/util/ResourceLoader.java
deleted file mode 100644
index 7f829fc..0000000
--- a/src/main/java/org/openslx/util/ResourceLoader.java
+++ /dev/null
@@ -1,176 +0,0 @@
-package org.openslx.util;
-
-import java.awt.Color;
-import java.awt.Component;
-import java.awt.Font;
-import java.awt.Graphics2D;
-import java.awt.Image;
-import java.awt.RenderingHints;
-import java.awt.font.FontRenderContext;
-import java.awt.geom.Rectangle2D;
-import java.awt.image.BufferedImage;
-import java.io.InputStream;
-import java.net.URL;
-import java.nio.charset.StandardCharsets;
-import java.util.HashMap;
-import java.util.Map;
-
-import javax.swing.Icon;
-import javax.swing.ImageIcon;
-
-import org.apache.commons.io.IOUtils;
-import org.apache.log4j.Logger;
-
-/**
- * Helper class for loading resources.
- * This should be error safe loaders with a fall back in case the
- * requested resource can't be found, or isn't of the expected type.
- */
-public class ResourceLoader
-{
-
- /**
- * Logger for this class
- */
- private final static Logger LOGGER = Logger.getLogger( ResourceLoader.class );
-
- /**
- * Load the given resource as an ImageIcon.
- * This is guaranteed to never throw an Exception and always return
- * an ImageIcon. If the requested resource could not be loaded,
- * an icon is generated, containing an error message. If even that
- * fails, an empty icon is returned.
- *
- * @param path Resource path to load
- * @param description Icon description
- * @return ImageIcon instance
- */
- public static ImageIcon getIcon( String path, String description )
- {
- URL url = ResourceLoader.class.getResource( path );
- if ( url == null ) {
- LOGGER.error( "Resource not found: " + path );
- } else {
- try {
- return new ImageIcon( url, description );
- } catch ( Exception e ) {
- LOGGER.error( "Resource not loadable: " + path );
- }
- }
- // If we reach here loading failed, create image containing error
- // message
- try {
- return errorIcon( "Invalid Resource: " + path );
- } catch ( Throwable t ) {
- return new ImageIcon();
- }
- }
-
- public static Icon getIcon( String path, String description, int maxHeight, Component context )
- {
- ImageIcon icon = getIcon( path, description );
- return getScaledIcon( icon, maxHeight, context );
- }
-
- /**
- * Load the given resource as an ImageIcon.
- * This is guaranteed to never throw an Exception and always return
- * an ImageIcon. If the requested resource could not be loaded,
- * an icon is generated, containing an error message. If even that
- * fails, an empty icon is returned.
- *
- * @param path Resource path to load
- * @return ImageIcon instance
- */
- public static ImageIcon getIcon( String path )
- {
- return getIcon( path, path );
- }
-
- /**
- * Helper that will create an icon with given text.
- *
- * @param errorText Text to render to icon
- * @return the icon
- */
- private static ImageIcon errorIcon( String errorText )
- {
- Font font = new Font( "Tahoma", Font.PLAIN, 20 );
-
- // get dimensions of text
- FontRenderContext frc = new FontRenderContext( null, true, true );
- Rectangle2D bounds = font.getStringBounds( errorText, frc );
- int w = (int)bounds.getWidth();
- int h = (int)bounds.getHeight();
-
- // create a BufferedImage object
- BufferedImage image = new BufferedImage( w, h, BufferedImage.TYPE_INT_RGB );
- Graphics2D g = image.createGraphics();
-
- // set color and other parameters
- g.setColor( Color.WHITE );
- g.fillRect( 0, 0, w, h );
- g.setColor( Color.RED );
- g.setFont( font );
-
- g.drawString( errorText, (float)bounds.getX(), (float) -bounds.getY() );
-
- g.dispose();
- return new ImageIcon( image, "ERROR" );
- }
-
- /**
- * Tries to load the given resource treating it as a text file
- *
- * @param path Resource path to load
- * @return content of the loaded resource as String
- */
- public static String getTextFile( String path )
- {
- String fileContent = null;
- try ( InputStream stream = ResourceLoader.class.getResourceAsStream( path ) ) {
- fileContent = IOUtils.toString( stream, StandardCharsets.UTF_8 );
- } catch ( Exception e ) {
- LOGGER.error( "IO error while trying to load resource '" + path + "'. See trace: ", e );
- }
-
- if ( fileContent != null ) {
- return fileContent;
- } else {
- return "Resource '" + path + "' not found.";
- }
- }
-
- public static InputStream getStream( String path )
- {
- return ResourceLoader.class.getResourceAsStream( path );
- }
-
- private static final Map iconCache = new HashMap<>();
-
- public static Icon getScaledIcon( Icon icon, int height, Component context )
- {
- if ( icon == null )
- return null;
- ImageIcon cached = iconCache.get( icon );
- if ( cached != null && cached.getIconHeight() == height )
- return cached;
- // Generate?
- float iHeight = icon.getIconHeight();
- float tHeight = height;
- if ( iHeight <= tHeight )
- return icon; // Small enough
- // Scale down:
- BufferedImage image = new BufferedImage( icon.getIconWidth(), icon.getIconHeight(),
- BufferedImage.TYPE_INT_ARGB );
- Graphics2D g = image.createGraphics();
- g.setRenderingHint( RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
- g.setRenderingHint( RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON );
- icon.paintIcon( context, g, 0, 0 );
- ImageIcon scaledIcon = new ImageIcon( image.getScaledInstance(
- (int) ( icon.getIconWidth() * ( tHeight / iHeight ) ), (int) ( tHeight ), Image.SCALE_SMOOTH ) );
- iconCache.put( icon, scaledIcon );
- return scaledIcon;
- }
-
-}
diff --git a/src/main/java/org/openslx/util/vm/VboxConfig.java b/src/main/java/org/openslx/util/vm/VboxConfig.java
index f69faac..4ef5cf2 100644
--- a/src/main/java/org/openslx/util/vm/VboxConfig.java
+++ b/src/main/java/org/openslx/util/vm/VboxConfig.java
@@ -4,6 +4,7 @@ import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import javax.xml.XMLConstants;
@@ -16,7 +17,6 @@ import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import org.apache.log4j.Logger;
-import org.openslx.util.ResourceLoader;
import org.openslx.util.XmlHelper;
import org.openslx.util.vm.VmMetaData.DriveBusType;
import org.openslx.util.vm.VmMetaData.HardDisk;
@@ -80,7 +80,7 @@ public class VboxConfig
* configuration file.
* Will validate the given file against the VirtualBox XSD schema and only proceed if it is
* valid.
- *
+ *
* @param file the VirtualBox machine configuration file
* @throws IOException if an error occurs while reading the file
* @throws UnsupportedVirtualizerFormatException if the given file is not a valid VirtualBox
@@ -91,9 +91,14 @@ public class VboxConfig
// first validate xml
try {
SchemaFactory factory = SchemaFactory.newInstance( XMLConstants.W3C_XML_SCHEMA_NS_URI );
- Schema schema = factory.newSchema( new StreamSource( ResourceLoader.getStream( "/xml/VirtualBox-settings.xsd" ) ) );
- Validator validator = schema.newValidator();
- validator.validate( new StreamSource( file ) );
+ InputStream xsdStream = VboxConfig.class.getResourceAsStream( "/master-sync-shared/xml/VirtualBox-settings.xsd" );
+ if ( xsdStream == null ) {
+ LOGGER.warn( "Cannot validate Vbox XML: No XSD found in JAR" );
+ } else {
+ Schema schema = factory.newSchema( new StreamSource( xsdStream ) );
+ Validator validator = schema.newValidator();
+ validator.validate( new StreamSource( file ) );
+ }
} catch ( SAXException e ) {
LOGGER.error( "Selected vbox file was not validated against the XSD schema: " + e.getMessage() );
throw new UnsupportedVirtualizerFormatException( "Invalid VirtualBox machine configuration file!" );
diff --git a/src/main/resources/master-sync-shared/xml/VirtualBox-settings.xsd b/src/main/resources/master-sync-shared/xml/VirtualBox-settings.xsd
new file mode 100644
index 0000000..aa38646
--- /dev/null
+++ b/src/main/resources/master-sync-shared/xml/VirtualBox-settings.xsd
@@ -0,0 +1,1489 @@
+
+
+
+
+
+
+
+ Oracle VM VirtualBox Settings Schema (common definitions).
+ Copyright (c) 2004-2017 Oracle Corporation
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
--
cgit v1.2.3-55-g7522