Author: gcrieloue Date: 2010-01-26 17:41:42 +0100 (Tue, 26 Jan 2010) New Revision: 17 Added: trunk/src/main/java/org/nuiton/mapstoragemanager/core/BigTableLoader.java trunk/src/main/java/org/nuiton/mapstoragemanager/core/TestServiceLoader.java Log: Ajout d'une classe BigTableLoader destin?\195?\169e ?\195?\160 remplacer les classes Core et PluginLoader. En effet, BigTableLoader utilise ServiceLoader qui permet de simplifier grandement les choses. Added: trunk/src/main/java/org/nuiton/mapstoragemanager/core/BigTableLoader.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/core/BigTableLoader.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/core/BigTableLoader.java 2010-01-26 16:41:42 UTC (rev 17) @@ -0,0 +1,83 @@ +package org.nuiton.mapstoragemanager.core; + +import java.io.File; +import java.net.MalformedURLException; +import java.net.URL; +import java.net.URLClassLoader; +import java.util.ServiceLoader; + +import org.nuiton.mapstoragemanager.plugins.BigTable; + +/** + * + * @author Crieloue Gilles + * + */ +public class BigTableLoader extends URLClassLoader{ + + /** + * The BigTable Set Loader. + */ + private ServiceLoader<BigTable> bigTableSetLoader; + + /** + * Class constructor. + * @param pluginsFolderPath the plugins folder path + * @param classLoader the parent classloader + * @throws MalformedURLException if the plugin folder is not found + */ + public BigTableLoader(final String pluginsFolderPath, + final ClassLoader classLoader) throws MalformedURLException { + + super(new URL[]{new File(pluginsFolderPath).toURI().toURL()}, + classLoader); + + for (File file : new File(pluginsFolderPath).listFiles()) { + if (file.getAbsolutePath().endsWith(".jar")) { + try { + this.addURL(file.toURI().toURL()); + } catch (MalformedURLException e) { + e.printStackTrace(); + } + } + } + + bigTableSetLoader = ServiceLoader.load(BigTable.class, this); + } + + /** + * Returns a string displaying all the available BigTable implementations. + * @return a string displaying all the available BigTable implementations + */ + public final String getBigTable() { + + String s = "Available Plugins :\n"; + + s += "\t* "; + if (!bigTableSetLoader.iterator().hasNext()) { + s += "No plugin."; + } + else { + for (BigTable bt : bigTableSetLoader) { + s += bt.getClass().getName(); + bt.put("key", "value"); + if (bt.get("key").equals("value")) { + s += " (working)" + "\n"; + } + else { + s += " (not working)" + "\n"; + } + } + } + return s; + } + + /** + * Returns the BigTable Set Loader. + * @return the BigTable Set Loader + */ + public final ServiceLoader<BigTable> getBigTableSetLoader() { + return bigTableSetLoader; + } + +} Added: trunk/src/main/java/org/nuiton/mapstoragemanager/core/TestServiceLoader.java =================================================================== --- trunk/src/main/java/org/nuiton/mapstoragemanager/core/TestServiceLoader.java (rev 0) +++ trunk/src/main/java/org/nuiton/mapstoragemanager/core/TestServiceLoader.java 2010-01-26 16:41:42 UTC (rev 17) @@ -0,0 +1,20 @@ +package org.nuiton.mapstoragemanager.core; + +import java.net.MalformedURLException; + +public class TestServiceLoader { + public TestServiceLoader(){ + try { + BigTableLoader p = new BigTableLoader("plugins", this.getClass().getClassLoader()); + System.out.println(p.getBigTable()); + } catch (MalformedURLException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + } + + public static void main(String[] args) { + + TestServiceLoader t = new TestServiceLoader(); + } +}