public <PluginInterfaceType> Iterable<PluginInterfaceType> getRegisteredPlugins(Class<PluginInterfaceType> pluginInterfaceClass) { ArrayList<PluginInterfaceType> rslt = new ArrayList<PluginInterfaceType>(); synchronized (this) { if (pluginInterfaceClass != IPluginsProvider.class) for (IPluginsProvider pluginsProvider : getRegisteredLocalPlugins(IPluginsProvider.class)) for (PluginInterfaceType plugin : getRegisteredPlugins(pluginInterfaceClass, pluginsProvider)) rslt.add(plugin); for (PluginInterfaceType plugin : getRegisteredPlugins(pluginInterfaceClass, localPluginsProvider)) rslt.add(plugin); } return rslt; }// END Method getRegisteredPlugins
@Override public Iterable<String> getPluginImplementationsAddresses(String pluginInterfaceName) { Collection<String> rslt = new ArrayList<String>(); for (String implementationAddress : persistenceDriver.getPluginImplementationsAddresses(pluginInterfaceName)) rslt.add(implementationAddress); if (!pluginInterfaceName.equals(IEquivalentPluginInterfaceAdapter.class.getName()) && !pluginInterfaceName.equals(IPluginsProvider.class.getName())) for (IEquivalentPluginInterfaceAdapter adapter : PluginsManager.getSingleton().getRegisteredLocalPlugins(IEquivalentPluginInterfaceAdapter.class)) if (adapter.getPluginInterface().getName().equals(pluginInterfaceName)) for (String implementationAddress : persistenceDriver.getPluginImplementationsAddresses(adapter.getPluginInterface().getName())) rslt.add(implementationAddress); return rslt; }// END Method getPluginImplementationsAddresses
@Override public boolean existPluginInterface(String pluginInterfaceName) { boolean rslt = persistenceDriver.existPluginInterface(pluginInterfaceName); if (!pluginInterfaceName.equals(IEquivalentPluginInterfaceAdapter.class.getName()) && !pluginInterfaceName.equals(IPluginsProvider.class.getName())) for (IEquivalentPluginInterfaceAdapter adapter : PluginsManager.getSingleton().getRegisteredLocalPlugins(IEquivalentPluginInterfaceAdapter.class)) if (adapter.getPluginInterface().getName().equals(pluginInterfaceName)) rslt = rslt || persistenceDriver.existPluginInterface(adapter.getPluginEquivalentInterface().getName()); return rslt; }// END Méthode existPluginInterface
@Override public boolean existPluginImplementation(String pluginInterfaceName, String pluginImplementationAddress) { boolean rslt = persistenceDriver.existPluginImplementation(pluginInterfaceName, pluginImplementationAddress); if (!pluginInterfaceName.equals(IEquivalentPluginInterfaceAdapter.class.getName()) && !pluginInterfaceName.equals(IPluginsProvider.class.getName())) for (IEquivalentPluginInterfaceAdapter adapter : PluginsManager.getSingleton().getRegisteredLocalPlugins(IEquivalentPluginInterfaceAdapter.class)) if (adapter.getPluginInterface().getName().equals(pluginInterfaceName)) rslt = rslt || persistenceDriver.existPluginImplementation(adapter.getPluginEquivalentInterface().getName(), pluginImplementationAddress); return rslt; }// END Méthode existPluginImplementation
@Override public <PluginInterfaceType> PluginInterfaceType getPlugin(Class<PluginInterfaceType> pluginInterfaceType, String pluginImplementationAddress) { PluginInterfaceType rslt = null; try { String implementationClassName = pluginImplementationAddress.substring((getScheme() + ":").length()); Class<?> implementationClass = getClass().getClassLoader().loadClass(implementationClassName); Object instance = implementationClass.newInstance(); if (pluginInterfaceType.isInstance(instance)) rslt = (PluginInterfaceType) instance; else for (IEquivalentPluginInterfaceAdapter adapter : PluginsManager.getSingleton().getRegisteredLocalPlugins(IEquivalentPluginInterfaceAdapter.class)) if (adapter.getPluginInterface() == pluginInterfaceType && adapter.getPluginEquivalentInterface().isInstance(instance)) rslt = (PluginInterfaceType) adapter.adaptPluginInstance(instance); } catch (ClassNotFoundException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } catch (InstantiationException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } catch (IllegalAccessException ex) { Logger.getLogger(getClass().getName()).log(Level.SEVERE, null, ex); } return rslt; }// END Method getPlugin
@Override public <PluginInterfaceType> PluginInterfaceType getPlugin(Class<PluginInterfaceType> pluginInterfaceClass, String pluginImplementationAddress) { PluginInterfaceType rslt = null; synchronized (PluginsManager.this) { if (pluginInterfaceClass != IPluginsProvider.class) for (IPluginsProvider pluginsProvider : getRegisteredLocalPlugins(IPluginsProvider.class)) if (pluginImplementationAddress.startsWith(pluginsProvider.getScheme() + ":")) { rslt = pluginsProvider.getPlugin(pluginInterfaceClass, pluginImplementationAddress); break; } if (pluginImplementationAddress.startsWith(localPluginsProvider.getScheme() + ":")) rslt = localPluginsProvider.getPlugin(pluginInterfaceClass, pluginImplementationAddress); } return rslt; }// END Method getPlugin