From: SeokYeon Hwang Date: Tue, 2 Feb 2016 10:42:02 +0000 (+0900) Subject: plugin: simplify plugin loader X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=f6a352810c8c95e069e7c328b3dcb00f2817efc8;p=sdk%2Femulator%2Femulator-manager.git plugin: simplify plugin loader We can use EMPluginLoader itself as a classloader. All we need is a child-first searching for resources. Change-Id: Iaecbb3ea15c4599da869a365dee0106a3602951c Signed-off-by: SeokYeon Hwang --- diff --git a/src/org/tizen/emulator/manager/plugin/EMPlugin.java b/src/org/tizen/emulator/manager/plugin/EMPlugin.java index 5a112b2..614f121 100644 --- a/src/org/tizen/emulator/manager/plugin/EMPlugin.java +++ b/src/org/tizen/emulator/manager/plugin/EMPlugin.java @@ -30,7 +30,6 @@ package org.tizen.emulator.manager.plugin; import java.io.File; -import java.net.URLClassLoader; import java.util.ArrayList; import java.util.jar.Attributes; @@ -77,7 +76,7 @@ public class EMPlugin { private String packageVersion; private final File pluginJar; private final Attributes attr; - private URLClassLoader loader; + private ClassLoader loader; private final ArrayList exItemList = new ArrayList(); private EMPlugin parentPlugin; @@ -99,13 +98,7 @@ public class EMPlugin { } public boolean initEMPlugin(Platform platform) { - ClassLoader parentLoader = null; - if (platform.getParentPlatform() != null) { - parentPlugin = platform.getParentPlatform().getPlugin(); - parentLoader = parentPlugin.getLoader(); - } - - loader = EMPluginLoader.makeLoader(pluginJar, parentLoader); + loader = EMPluginLoader.makeLoader(pluginJar, platform.getParentPlatform()); if (loader == null) { return false; } @@ -161,7 +154,7 @@ public class EMPlugin { return null; } - public URLClassLoader getLoader() { + public ClassLoader getLoader() { return loader; } diff --git a/src/org/tizen/emulator/manager/plugin/EMPluginLoader.java b/src/org/tizen/emulator/manager/plugin/EMPluginLoader.java index 37c7286..8426764 100644 --- a/src/org/tizen/emulator/manager/plugin/EMPluginLoader.java +++ b/src/org/tizen/emulator/manager/plugin/EMPluginLoader.java @@ -1,12 +1,12 @@ /* * Emulator Manager * - * Copyright (C) 2013 Samsung Electronics Co., Ltd. All rights reserved. + * Copyright (C) 2013 - 2016 Samsung Electronics Co., Ltd. All rights reserved. * * Contact: - * JiHye Kim + * JiHye Kim + * Minkee Lee * SeokYeon Hwang - * YeongKyoon Lee * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License @@ -38,40 +38,35 @@ import java.util.jar.Attributes; import java.util.jar.JarFile; import org.tizen.emulator.manager.logging.EMLogger; -import org.tizen.emulator.manager.resources.StringResources; +import org.tizen.emulator.manager.platform.Platform; -public class EMPluginLoader { +public class EMPluginLoader extends URLClassLoader { + private EMPluginLoader(URL url) throws MalformedURLException { + super(new URL[] { url }); + } + + private EMPluginLoader(URL url, ClassLoader parent) throws MalformedURLException { + super(new URL[] { url }, parent); + } - public static URLClassLoader makeLoader(File plugin, ClassLoader parent) { + public static ClassLoader makeLoader(File plugin, Platform parent) { URL url = null; - URLClassLoader loader; + try { url = plugin.toURI().toURL(); - } catch (MalformedURLException e) { - EMLogger.getLogger().warning("Failed to load url from jar file: " + e.getMessage()); //$NON-NLS-1$ - return null; - } - - if (url == null) { - EMLogger.getLogger().warning("Failed to load url from jar file." + //$NON-NLS-1$ - StringResources.NEW_LINE + plugin.getAbsolutePath()); - return null; - } + if (url == null) { + throw new MalformedURLException(); + } - URL[] urls = new URL[1]; - urls[0] = url; - if (parent == null) { - loader = URLClassLoader.newInstance(urls); - } else { - loader = URLClassLoader.newInstance(urls, parent); - } + if (parent == null) { + return new EMPluginLoader(url); + } - if (loader == null) { - EMLogger.getLogger().warning("Failed to create instance of URLClassLoader."); //$NON-NLS-1$ + return new EMPluginLoader(url, parent.getPlugin().getLoader()); + } catch (MalformedURLException e) { + EMLogger.getLogger().warning("Failed to load url from jar file: " + e.getMessage()); //$NON-NLS-1$ return null; } - - return loader; } public static Attributes makeAttributes(File pluginJar) { @@ -103,4 +98,15 @@ public class EMPluginLoader { return attr; } -} + + @Override + public URL getResource(String name) { + // child first resource searching + URL url = findResource(name); + if (url != null) { + return url; + } + + return super.getResource(name); + } +} \ No newline at end of file diff --git a/src/org/tizen/emulator/manager/plugin/ExtensionItem.java b/src/org/tizen/emulator/manager/plugin/ExtensionItem.java index 874ccad..460699d 100644 --- a/src/org/tizen/emulator/manager/plugin/ExtensionItem.java +++ b/src/org/tizen/emulator/manager/plugin/ExtensionItem.java @@ -29,16 +29,15 @@ package org.tizen.emulator.manager.plugin; -import java.net.URLClassLoader; import org.tizen.emulator.manager.logging.EMLogger; public class ExtensionItem { private String exPoint; private String pointClass; - private URLClassLoader loader; + private ClassLoader loader; private Object instance; - public ExtensionItem(String ex, String pointClass, URLClassLoader loader){ + public ExtensionItem(String ex, String pointClass, ClassLoader loader){ this.exPoint = ex; this.loader = loader; this.pointClass = pointClass; diff --git a/src/org/tizen/emulator/manager/plugin/PluginImageResources.java b/src/org/tizen/emulator/manager/plugin/PluginImageResources.java index ba3c9df..78b15ac 100644 --- a/src/org/tizen/emulator/manager/plugin/PluginImageResources.java +++ b/src/org/tizen/emulator/manager/plugin/PluginImageResources.java @@ -31,8 +31,6 @@ package org.tizen.emulator.manager.plugin; import java.io.IOException; import java.io.InputStream; -import java.net.URL; -import java.net.URLClassLoader; import java.util.HashMap; import java.util.Map; @@ -171,20 +169,16 @@ class ImageRegistry { return null; } - private static URL findImageURL(EMPlugin plugin, String name, String shape, String extension) { - URL url = null; - URLClassLoader loader = plugin.getLoader(); + private static InputStream findImageURL(ClassLoader loader, String name, String shape, String extension) { + InputStream is = null; if (loader != null) { - url = loader.findResource("res/" + shape + "_" + name + "." + extension); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ - if (url == null) { + is = loader.getResourceAsStream("res/" + shape + "_" + name + "." + extension); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ + if (is == null) { // remove shape prefix - url = loader.findResource("res/" + name + "." + extension); //$NON-NLS-1$ //$NON-NLS-2$ - } - if (url == null && plugin.getParentPlugin() != null) { - url = findImageURL(plugin.getParentPlugin(), name, shape, extension); + is = loader.getResourceAsStream("res/" + name + "." + extension); //$NON-NLS-1$ //$NON-NLS-2$ } } - return url; + return is; } public static Image getImage(String name, String platformName, SKIN_SHAPE skinShape, String extension) { @@ -198,15 +192,7 @@ class ImageRegistry { if (i == null) { EMPlugin plugin = findPlugin(platformName); if (plugin != null) { - InputStream is = null; - URL url = findImageURL(plugin, name, shape, extension); - if (url != null) { - try { - is = url.openStream(); - } catch (IOException e) { - EMLogger.getLogger().warning(e.getMessage()); - } - } + InputStream is = findImageURL(plugin.getLoader(), name, shape, extension); if (is != null) { i = new Image(Display.getCurrent(), is); map.put(name + platformName + shape, i);