Author: dlanglais Date: 2010-03-17 09:40:41 +0100 (Wed, 17 Mar 2010) New Revision: 248 Log: Quelques modifs visant ?\195?\160 rendre persistants les choix des plugins charg?\195?\169s ou non au d?\195?\169marrage... C'est assez brouillon... Pour r?\195?\169sumer : - le dossier plugins ?\195?\160 la racine de MapStorageManager contient un fichier .properties : - Ce fichier contient la localisation de tous les plugins (.jar) ?\195?\160 charger ou non au d?\195?\169marrage (true ou false). Actuellement, lorsque l'on va chercher un plugin manuellement dans l'application, celui-ci sera charg?\195?\169 automatiquement au prochain d?\195?\169marrage, sauf si l'on modifie manuellement le fichier .properties pour supprimer le jar ou en le mettant ?\195?\160 false. - ce fichier liste l'ensemble des plugins (Classe), ?\195?\160 charger ou non au d?\195?\169marrage. Via le pluginManager, lorsque l'on active/d?\195?\169sactive un plugin, celui-ci est charg?\195?\169/d?\195?\169charg?\195?\169 directement, mais aussi gardera cette configuration pour le prochain d?\195?\169marrage. Contrairement aux boutons charger/d?\195?\169charger qui ne le font que pour la session en cours... C'est tr?\195?\168s facilement am?\195?\169liorable. Modified: trunk/msm-pluginmanager/src/main/java/org/nuiton/mapstoragemanager/plugins/pluginmanager/PluginManager.jaxx trunk/msm/src/main/java/org/nuiton/mapstoragemanager/Main.java trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/PluginLoader.java trunk/msm/src/main/java/org/nuiton/mapstoragemanager/ui/gui/ApplicationEngine.java Modified: trunk/msm/src/main/java/org/nuiton/mapstoragemanager/Main.java =================================================================== --- trunk/msm/src/main/java/org/nuiton/mapstoragemanager/Main.java 2010-03-17 06:39:07 UTC (rev 247) +++ trunk/msm/src/main/java/org/nuiton/mapstoragemanager/Main.java 2010-03-17 08:40:41 UTC (rev 248) @@ -59,6 +59,7 @@ SwingUtil.loadUIConfig(MsmConfig.APPLICATION_PROPERTIES, null); final MainUI ui = MainUI.getInstance(); + ui.getEngine().loadPlugins(); SwingUtilities.invokeLater(new Runnable() { Modified: trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/PluginLoader.java =================================================================== --- trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/PluginLoader.java 2010-03-17 06:39:07 UTC (rev 247) +++ trunk/msm/src/main/java/org/nuiton/mapstoragemanager/core/PluginLoader.java 2010-03-17 08:40:41 UTC (rev 248) @@ -1,6 +1,9 @@ package org.nuiton.mapstoragemanager.core; import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; @@ -8,16 +11,17 @@ import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Properties; import java.util.ServiceLoader; import java.util.Set; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.mapstoragemanager.plugins.BigTable; import org.nuiton.mapstoragemanager.plugins.Exporter; import org.nuiton.mapstoragemanager.plugins.Importer; -//import org.nuiton.mapstoragemanager.plugins.Monitoring; import org.nuiton.mapstoragemanager.plugins.Plugin; /** @@ -30,18 +34,19 @@ * Logger. */ private static final Log LOG = LogFactory.getLog(PluginLoader.class); - /** - * The BigTable Set Loader. + * Properties, to store properties about plugins. */ -// private ServiceLoader<BigTable> bigTableSetLoader; -// private ServiceLoader<Importer> importerSetLoader; -// private ServiceLoader<Exporter> exporterSetLoader; + private static Properties properties; + /** + * Properties File path, to load and save properties about plugins. + */ + private static File propertiesFile; /** * Map Identifiant - BigTable implementation. */ - private Map<String, Plugin> plugins = new HashMap<String, Plugin>(); + private static Map<String, Plugin> plugins = new HashMap<String, Plugin>(); /** * Class constructor. @@ -55,8 +60,33 @@ super(new URL[]{new File(pluginsFolderPath).toURI().toURL()}, classLoader); - for (File file : new File(pluginsFolderPath).listFiles()) { - if (file.getAbsolutePath().endsWith(".jar")) { + /** Load properties file of the folder. */ + properties = new Properties(); + try { + propertiesFile = new File(pluginsFolderPath, ".properties"); + properties.load(new FileInputStream(propertiesFile)); + } catch (IOException ex) { +// LOG.error(ex, ex); + } + + /** For each file if the propertie is not false */ +// for (File file : new File(pluginsFolderPath).listFiles()) { +// String fileProp = (String) properties.get(file.getPath()); +// if(fileProp == null) { +// fileProp = ""; +// } +// if (!fileProp.equals("false") +// && file.getAbsolutePath().endsWith(".jar")) { +// loadPlugin(file); +// } +// } + + /** For each properties keys with value is true, load the file */ + Set<Object> props = properties.keySet(); + for (Object property : props) { + if(property.toString().endsWith(".jar") + && properties.get(property).equals("true")) { + File file = new File(property.toString()); loadPlugin(file); } } @@ -86,8 +116,6 @@ ServiceLoader.load(Importer.class, this); ServiceLoader<Exporter> exporterSetLoader = ServiceLoader.load(Exporter.class, this); -// ServiceLoader<Monitoring> monitoringSetLoader = -// ServiceLoader.load(Monitoring.class, this); ServiceLoader<Plugin> pluginSetLoader = ServiceLoader.load(Plugin.class, this); @@ -95,25 +123,32 @@ * Add plugin in the plugin's map. */ for (BigTable bigTable : bigTableSetLoader) { - bigTable.load(); - plugins.put(bigTable.getPluginName(), bigTable); + controlLoadPlugin(bigTable); +// bigTable.load(); +// plugins.put(bigTable.getPluginName(), bigTable); } for (Importer importer : importerSetLoader) { - importer.load(); - plugins.put(importer.getPluginName(), importer); + controlLoadPlugin(importer); +// importer.load(); +// plugins.put(importer.getPluginName(), importer); } for (Exporter exporter : exporterSetLoader) { - exporter.load(); - plugins.put(exporter.getPluginName(), exporter); + controlLoadPlugin(exporter); +// exporter.load(); +// plugins.put(exporter.getPluginName(), exporter); } -// for (Monitoring monitor : monitoringSetLoader) { -// monitor.load(); -// plugins.put(monitor.getPluginName(), monitor); -// } for (Plugin plugin : pluginSetLoader) { - plugin.load(); - plugins.put(plugin.getPluginName(), plugin); + controlLoadPlugin(plugin); +// plugin.load(); +// plugins.put(plugin.getPluginName(), plugin); } + + properties.put(file.getPath(), "true"); + try { + properties.store(new FileOutputStream(propertiesFile), null); + } catch (IOException ex) { +// LOG.error(ex, ex); + } } /** @@ -134,15 +169,6 @@ return s; } -// /** -// * Returns the BigTable Set Loader. -// * @return the BigTable Set Loader -// * @deprecated Use {@link #getAllBigTable()} -// */ -// public final ServiceLoader<BigTable> getBigTableSetLoader() { -// return bigTableSetLoader; -// } - /** * Returns a plugin implementation according to an identifiant. * @param id the identifiant - typically the plugins name -. @@ -185,4 +211,45 @@ public final Set<String> getAllPluginNames() { return plugins.keySet(); } + + /** + * Set active or not a plugin at startup. + * + */ + public static final void setActive(Plugin plugin, boolean active) { + + properties.put(plugin.getPluginName(), Boolean.toString(active)); + try { + properties.store(new FileOutputStream(propertiesFile), null); + } catch (IOException ex) { +// LOG.error(ex, ex); + } + + if (active == true) { + plugin.load(); + } else { + plugin.unload(); + } + } + + public static void controlLoadPlugin(Plugin plugin) { + if (!"false".equals(properties.getProperty(plugin.getPluginName()))) { + plugins.put(plugin.getPluginName(), plugin); + plugin.load(); + properties.put(plugin.getPluginName(), "true"); + try { + properties.store(new FileOutputStream(propertiesFile), null); + } catch (IOException ex) { + // LOG.error(ex, ex); + } + } else { + plugins.put(plugin.getPluginName(), plugin); + properties.put(plugin.getPluginName(), "false"); + try { + properties.store(new FileOutputStream(propertiesFile), null); + } catch (IOException ex) { + // LOG.error(ex, ex); + } + } + } } Modified: trunk/msm/src/main/java/org/nuiton/mapstoragemanager/ui/gui/ApplicationEngine.java =================================================================== --- trunk/msm/src/main/java/org/nuiton/mapstoragemanager/ui/gui/ApplicationEngine.java 2010-03-17 06:39:07 UTC (rev 247) +++ trunk/msm/src/main/java/org/nuiton/mapstoragemanager/ui/gui/ApplicationEngine.java 2010-03-17 08:40:41 UTC (rev 248) @@ -55,26 +55,27 @@ */ private static final File MSM_BASEDIR = new File(new File("").getAbsolutePath()).getParentFile(); + /** + * msm plugin dir. + */ + private static final File MSM_PLUGINS_DIR = + new File(MSM_BASEDIR, "plugins/"); /** * Constructor. */ private ApplicationEngine() { -// String basedir = new File("").getAbsolutePath(); -// msmBasedir = new File(basedir).getParentFile(); lastPath = MSM_BASEDIR.toString(); + } + /** + * Load plugins for plugins directory. + */ + public void loadPlugins() { try { - String toPlugin = "plugins/"; - String pluginsFolderPath = - new File(MSM_BASEDIR, toPlugin).getPath(); - - LOG.info("msmBasedir : " + MSM_BASEDIR + '\n' - + "pluginsFolderPath : " + pluginsFolderPath); - - pluginLoader = new PluginLoader(pluginsFolderPath, - this.getClass().getClassLoader()); + pluginLoader = new PluginLoader(MSM_PLUGINS_DIR.getPath(), + this.getClass().getClassLoader()); } catch (MalformedURLException ex) { LOG.error(ex, ex); } Modified: trunk/msm-pluginmanager/src/main/java/org/nuiton/mapstoragemanager/plugins/pluginmanager/PluginManager.jaxx =================================================================== --- trunk/msm-pluginmanager/src/main/java/org/nuiton/mapstoragemanager/plugins/pluginmanager/PluginManager.jaxx 2010-03-17 06:39:07 UTC (rev 247) +++ trunk/msm-pluginmanager/src/main/java/org/nuiton/mapstoragemanager/plugins/pluginmanager/PluginManager.jaxx 2010-03-17 08:40:41 UTC (rev 248) @@ -1,4 +1,4 @@ -<Application id='pluginManagerFrame' width='640' height='480' implements='Plugin' > +<Application id='pluginManagerFrame' width='640' height='480' implements='Plugin' onWindowClosing=''> <!-- include java files for treatment --> <script> @@ -25,6 +25,7 @@ if (instance == null){ instance = new PluginManager(); } + instance.setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); return instance; } @@ -88,7 +89,8 @@ buttonActivate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - //TODO; + + PluginLoader.setActive(plugin, true); buttonActivate.setEnabled(false); buttonDesactivate.setEnabled(true); } @@ -97,7 +99,8 @@ buttonDesactivate.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { - //TODO; + + PluginLoader.setActive(plugin, false); buttonActivate.setEnabled(true); buttonDesactivate.setEnabled(false); } @@ -174,6 +177,7 @@ @Override public void actionPerformed(ActionEvent e) { PluginManager.getInstance().setVisible(true); + PluginManager.getInstance().refreshPluginList(); } }); menuPluginMSM.add(menuItemPlugin);