Author: ab
Date: Thu Feb  2 02:58:16 2006
New Revision: 374348

URL: http://svn.apache.org/viewcvs?rev=374348&view=rev
Log:
Add functionality to run individual classes in plugins.

Add a user-friendly shortcut to bin/nutch (the "plugin" command).

Fix missing setConf() in Http plugins.

Modified:
    lucene/nutch/trunk/bin/nutch
    lucene/nutch/trunk/src/java/org/apache/nutch/plugin/PluginRepository.java
    
lucene/nutch/trunk/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/Http.java
    
lucene/nutch/trunk/src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java

Modified: lucene/nutch/trunk/bin/nutch
URL: 
http://svn.apache.org/viewcvs/lucene/nutch/trunk/bin/nutch?rev=374348&r1=374347&r2=374348&view=diff
==============================================================================
--- lucene/nutch/trunk/bin/nutch (original)
+++ lucene/nutch/trunk/bin/nutch Thu Feb  2 02:58:16 2006
@@ -41,6 +41,7 @@
   echo "  index             run the indexer on parsed segments and linkdb"
   echo "  merge             merge several segment indexes"
   echo "  dedup             remove duplicates from a set of segment indexes"
+  echo "  plugin            load a plugin and run one of its classes main()"
   echo "  server            run a search server"
   echo "  namenode          run the NDFS namenode"
   echo "  datanode          run an NDFS datanode"
@@ -150,6 +151,8 @@
   CLASS=org.apache.nutch.indexer.DeleteDuplicates
 elif [ "$COMMAND" = "merge" ] ; then
   CLASS=org.apache.nutch.indexer.IndexMerger
+elif [ "$COMMAND" = "plugin" ] ; then
+  CLASS=org.apache.nutch.plugin.PluginRepository
 elif [ "$COMMAND" = "server" ] ; then
   CLASS='org.apache.nutch.searcher.DistributedSearch$Server'
 elif [ "$COMMAND" = "namenode" ] ; then

Modified: 
lucene/nutch/trunk/src/java/org/apache/nutch/plugin/PluginRepository.java
URL: 
http://svn.apache.org/viewcvs/lucene/nutch/trunk/src/java/org/apache/nutch/plugin/PluginRepository.java?rev=374348&r1=374347&r2=374348&view=diff
==============================================================================
--- lucene/nutch/trunk/src/java/org/apache/nutch/plugin/PluginRepository.java 
(original)
+++ lucene/nutch/trunk/src/java/org/apache/nutch/plugin/PluginRepository.java 
Thu Feb  2 02:58:16 2006
@@ -19,6 +19,7 @@
 // JDK imports
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -376,5 +377,47 @@
         map.put(plugin.getPluginId(), plugin);
       }
       return map;
+    }
+
+    /**
+     * Loads all necessary dependencies for a selected plugin, and then
+     * runs one of the classes' main() method.
+     * @param args plugin ID (needs to be activated in the configuration), and
+     * the class name. The rest of arguments is passed to the main method of 
the
+     * selected class.
+     * @throws Exception
+     */
+    public static void main(String[] args) throws Exception {
+      if (args.length < 2) {
+        System.err.println("Usage: PluginRepository pluginId className [arg1 
arg2 ...]");
+        return;
+      }
+      NutchConf conf = new NutchConf();
+      PluginRepository repo = new PluginRepository(conf);
+      // args[0] - plugin ID
+      PluginDescriptor d = repo.getPluginDescriptor(args[0]);
+      if (d == null) {
+        System.err.println("Plugin '" + args[0] + "' not present or 
inactive.");
+        return;
+      }
+      ClassLoader cl = d.getClassLoader();
+      // args[1] - class name
+      Class clazz = null;
+      try {
+        clazz = Class.forName(args[1], true, cl);
+      } catch (Exception e) {
+        System.err.println("Could not load the class '" + args[1] + ": " + 
e.getMessage());
+        return;
+      }
+      Method m = null;
+      try {
+        m = clazz.getMethod("main", new Class[]{args.getClass()});
+      } catch (Exception e) {
+        System.err.println("Could not find the 'main(String[])' method in 
class " + args[1] + ": " + e.getMessage());
+        return;
+      }
+      String[] subargs = new String[args.length - 2];
+      System.arraycopy(args, 2, subargs, 0, subargs.length);
+      m.invoke(null, new Object[]{subargs});
     }
 }

Modified: 
lucene/nutch/trunk/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/Http.java
URL: 
http://svn.apache.org/viewcvs/lucene/nutch/trunk/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/Http.java?rev=374348&r1=374347&r2=374348&view=diff
==============================================================================
--- 
lucene/nutch/trunk/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/Http.java
 (original)
+++ 
lucene/nutch/trunk/src/plugin/protocol-http/src/java/org/apache/nutch/protocol/http/Http.java
 Thu Feb  2 02:58:16 2006
@@ -50,7 +50,9 @@
   }
 
   public static void main(String[] args) throws Exception {
-    main(new Http(), args);
+    Http http = new Http();
+    http.setConf(new NutchConf());
+    main(http, args);
   }
 
   protected Response getResponse(URL url, CrawlDatum datum, boolean redirect)

Modified: 
lucene/nutch/trunk/src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java
URL: 
http://svn.apache.org/viewcvs/lucene/nutch/trunk/src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java?rev=374348&r1=374347&r2=374348&view=diff
==============================================================================
--- 
lucene/nutch/trunk/src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java
 (original)
+++ 
lucene/nutch/trunk/src/plugin/protocol-httpclient/src/java/org/apache/nutch/protocol/httpclient/Http.java
 Thu Feb  2 02:58:16 2006
@@ -86,7 +86,9 @@
   }
 
   public static void main(String[] args) throws Exception {
-    main(new Http(), args);
+    Http http = new Http();
+    http.setConf(new NutchConf());
+    main(http, args);
   }
 
   protected Response getResponse(URL url, CrawlDatum datum, boolean redirect)


Reply via email to