]> source.dussan.org Git - pf4j.git/commitdiff
added more methods in PluginManager
authorDecebal Suiu <decebal.suiu@gmail.com>
Tue, 13 Nov 2012 08:54:59 +0000 (10:54 +0200)
committerDecebal Suiu <decebal.suiu@gmail.com>
Tue, 13 Nov 2012 08:54:59 +0000 (10:54 +0200)
demo/plugin1/pom.xml
pf4j/src/main/java/ro/fortsoft/pf4j/DefaultPluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/Plugin.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginClassLoader.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginDescriptor.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginManager.java
pf4j/src/main/java/ro/fortsoft/pf4j/PluginWrapper.java

index 8d475d54146d42ec0ffe15b69812c06eaff72250..f6b639f986d076f6a8e9234c919388215f478007 100644 (file)
@@ -21,7 +21,6 @@
         </license>
     </licenses>
 
-
     <properties>
         <plugin.id>welcome-plugin</plugin.id>
         <plugin.class>ro.fortsoft.pf4j.demo.welcome.WelcomePlugin</plugin.class>
index 2b36357cfe6ef81dca8cd32deffaa9d924ec86ca..34b3987552f00c5ab02a250088a78d451f6a28d7 100644 (file)
@@ -76,6 +76,11 @@ public class DefaultPluginManager implements PluginManager {
      */
     private List<PluginWrapper> disabledPlugins;
     
+    /**
+     * A list with started plugins.
+     */
+    private List<PluginWrapper> startedPlugins;
+    
     private UberClassLoader uberClassLoader;
 
     /**
@@ -93,15 +98,19 @@ public class DefaultPluginManager implements PluginManager {
      */
     public DefaultPluginManager(File pluginsDirectory) {
         this.pluginsDirectory = pluginsDirectory;
+        
         plugins = new HashMap<String, PluginWrapper>();
         pluginClassLoaders = new HashMap<String, PluginClassLoader>();
         pathToIdMap = new HashMap<String, String>();
         unresolvedPlugins = new ArrayList<PluginWrapper>();
         resolvedPlugins = new ArrayList<PluginWrapper>();
         disabledPlugins = new ArrayList<PluginWrapper>();
+        startedPlugins = new ArrayList<PluginWrapper>();
         pluginDescriptorFinder = new DefaultPluginDescriptorFinder();
         uberClassLoader = new UberClassLoader();
         extensionFinder = new DefaultExtensionFinder(uberClassLoader);
+        
+        System.setProperty("pf4j.pluginsDir", pluginsDirectory.getAbsolutePath());
     }
 
     /**
@@ -127,6 +136,10 @@ public class DefaultPluginManager implements PluginManager {
                return disabledPlugins;
        }
 
+       public List<PluginWrapper> getStartedPlugins() {
+               return startedPlugins;
+       }
+       
     /**
      * Start all active plugins.
      */
@@ -136,6 +149,7 @@ public class DefaultPluginManager implements PluginManager {
             try {
                LOG.info("Start plugin '" + pluginWrapper.getDescriptor().getPluginId() + "'");
                                pluginWrapper.getPlugin().start();
+                               startedPlugins.add(pluginWrapper);
                        } catch (PluginException e) {
                                LOG.error(e.getMessage(), e);
                        }
index 22498d78275901496cb2274a338a61daa4ac81cf..80221ac4cec3e49ed4118dd194e2496fd755134c 100644 (file)
@@ -31,7 +31,7 @@ public abstract class Plugin {
     /**
      * Wrapper of the plugin.
      */
-    PluginWrapper wrapper;
+    protected PluginWrapper wrapper;
 
     /**
      * Constructor to be used by plugin manager for plugin instantiation.
index 2f7ce1eac393b939d9843106d9c3d39fd86da686..80832bcc147b43e01fc1de0595d7cf4953403b37 100644 (file)
@@ -21,7 +21,7 @@ import java.util.List;
  * 
  * @author Decebal Suiu
  */
-class PluginClassLoader extends URLClassLoader {
+public class PluginClassLoader extends URLClassLoader {
 
        private static final String JAVA_PACKAGE_PREFIX = "java.";
        private static final String JAVAX_PACKAGE_PREFIX = "javax.";
index aa2c4950b39c631871fe0f7a4e4f04bf869882e5..a666b7a1b6175e85a0e04a4c512b9bb9ff31b9cd 100644 (file)
@@ -27,7 +27,7 @@ import org.apache.commons.lang.builder.ToStringStyle;
  *
  * @author Decebal Suiu
  */
-class PluginDescriptor {
+public class PluginDescriptor {
 
        private String pluginId;
     private String pluginClass;
index c8e4fe92d396dae662345d280dd4e2292b0920dc..5e89b6bb296dfee89834b9c763287b44c3e3ee7b 100644 (file)
@@ -27,6 +27,21 @@ public interface PluginManager {
      */
     public List<PluginWrapper> getPlugins();
 
+    /**
+     * Retrieves all resolved plugins (with resolved dependency).
+     */
+       public List<PluginWrapper> getResolvedPlugins();
+
+       /**
+        * Retrieves all unresolved plugins (with unresolved dependency).
+        */
+       public List<PluginWrapper> getUnresolvedPlugins();
+       
+    /**
+     * Retrieves all started plugins.
+     */
+    public List<PluginWrapper> getStartedPlugins();
+
     /**
      * Load plugins.
      */
index a1a636894f39f91922ba1399eec9d135ba3222a5..b3a5a01b321ce902c64db6ff971d1bb439027e11 100644 (file)
@@ -15,6 +15,8 @@ package ro.fortsoft.pf4j;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Modifier;
 
+import org.apache.commons.lang.builder.EqualsBuilder;
+import org.apache.commons.lang.builder.HashCodeBuilder;
 import org.apache.commons.lang.builder.ToStringBuilder;
 import org.apache.commons.lang.builder.ToStringStyle;
 
@@ -91,6 +93,24 @@ public class PluginWrapper {
     }
 
     @Override
+       public int hashCode() {
+       return new HashCodeBuilder().append(descriptor.getPluginId())
+               .toHashCode();
+       }
+
+       @Override
+       public boolean equals(Object obj) {
+               if (!(obj instanceof PluginWrapper)) {
+                       return false;
+               }
+               
+               PluginWrapper wrapper = (PluginWrapper) obj;
+               
+               return new EqualsBuilder().append(descriptor.getPluginId(), wrapper.getDescriptor().getPluginId())
+                       .isEquals();
+       }
+
+       @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
             .append("descriptor", descriptor)