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