package org.tizen.emulator.manager.plugin;
import java.io.File;
-import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.jar.Attributes;
private String packageVersion;
private final File pluginJar;
private final Attributes attr;
- private URLClassLoader loader;
+ private ClassLoader loader;
private final ArrayList<ExtensionItem> exItemList
= new ArrayList<ExtensionItem>();
private EMPlugin parentPlugin;
}
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;
}
return null;
}
- public URLClassLoader getLoader() {
+ public ClassLoader getLoader() {
return loader;
}
/*
* 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 <jihye1128.kim@samsung.com>
+ * JiHye Kim <jihye424.kim@samsung.com>
+ * Minkee Lee <minkee.lee@samsung.com>
* SeokYeon Hwang <syeon.hwang@samsung.com>
- * YeongKyoon Lee <yeongkyoon.lee@samsung.com>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
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) {
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
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;
import java.io.IOException;
import java.io.InputStream;
-import java.net.URL;
-import java.net.URLClassLoader;
import java.util.HashMap;
import java.util.Map;
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) {
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);