Author: thorsten
Date: Mon Dec 21 14:12:43 2009
New Revision: 892828

URL: http://svn.apache.org/viewvc?rev=892828&view=rev
Log:
DROIDS-68 HandlerFactory fails with multithreaded implementation
Reporter/patch: Javier Puerto

Thanks Javier


Added:
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ExceptionReportHandler.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ReportHandler.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ExceptionCrawlingDroid.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ReportCrawlingDroid.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SaveCrawlingDroid.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SysoutCrawlingDroid.java
Modified:
    
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingDroid.java
    
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingWorker.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/DroidsFactory.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerDroid.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerWorker.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/SimpleRuntime.java
    
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/TestSimpleDroid.java

Modified: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingDroid.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingDroid.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingDroid.java
 Mon Dec 21 14:12:43 2009
@@ -18,28 +18,25 @@
 
 import java.net.URI;
 import java.net.URISyntaxException;
-import java.util.ArrayList;
 import java.util.Collection;
-import java.util.concurrent.TimeUnit;
 
 import org.apache.droids.AbstractDroid;
 import org.apache.droids.LinkTask;
-import org.apache.droids.api.*;
+import org.apache.droids.api.Link;
+import org.apache.droids.api.TaskMaster;
+import org.apache.droids.api.TaskQueue;
+import org.apache.droids.api.Worker;
 import org.apache.droids.exception.InvalidTaskException;
-import org.apache.droids.helper.factories.HandlerFactory;
 import org.apache.droids.helper.factories.ParserFactory;
 import org.apache.droids.helper.factories.ProtocolFactory;
 import org.apache.droids.helper.factories.URLFiltersFactory;
-import org.apache.droids.impl.MultiThreadedTaskMaster;
-import org.apache.droids.impl.SimpleTaskQueue;
 
-public class CrawlingDroid extends AbstractDroid<Link> 
+public abstract class CrawlingDroid extends AbstractDroid<Link> 
 {
   private Collection<String> initialLocations;
 
   ProtocolFactory protocolFactory;
   ParserFactory parserFactory;
-  HandlerFactory handlerFactory;
   URLFiltersFactory filtersFactory;
   
   public CrawlingDroid( TaskQueue<Link> queue, TaskMaster<Link> taskMaster )
@@ -76,9 +73,7 @@
     log.info( "FINISHED!!!" );
   }
 
-  public CrawlingWorker getNewWorker() {
-    return new CrawlingWorker( this );
-  }
+  public abstract Worker<Link> getNewWorker();
 
   public ProtocolFactory getProtocolFactory() {
     return protocolFactory;
@@ -96,14 +91,6 @@
     this.parserFactory = parserFactory;
   }
 
-  public HandlerFactory getHandlerFactory() {
-    return handlerFactory;
-  }
-
-  public void setHandlerFactory(HandlerFactory handlerFactory) {
-    this.handlerFactory = handlerFactory;
-  }
-
   public URLFiltersFactory getFiltersFactory() {
     return filtersFactory;
   }
@@ -111,25 +98,5 @@
   public void setFiltersFactory(URLFiltersFactory filtersFactory) {
     this.filtersFactory = filtersFactory;
   }
-  
-  //------------------------------------------------------------------
-  //------------------------------------------------------------------
-  
-  public static void main( String[] args ) throws Exception
-  {
-    MultiThreadedTaskMaster<Link> taskMaster = new 
MultiThreadedTaskMaster<Link>();
-    taskMaster.setMaxThreads( 3 );
-    
-    TaskQueue<Link> queue = new SimpleTaskQueue<Link>();
-    
-    Collection<String> locations = new ArrayList<String>();
-    locations.add( args[0] );
-
-    CrawlingDroid simple = new CrawlingDroid( queue, taskMaster );
-    simple.setInitialLocations( locations );
-    simple.init();
-    simple.start();  // TODO? perhaps start internally calls init()?
-    simple.getTaskMaster().awaitTermination(0, TimeUnit.SECONDS);
-  }
 }
 

Modified: 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingWorker.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingWorker.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingWorker.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/main/java/org/apache/droids/robot/crawler/CrawlingWorker.java
 Mon Dec 21 14:12:43 2009
@@ -31,11 +31,13 @@
 import org.apache.droids.api.Worker;
 import org.apache.droids.exception.DroidsException;
 import org.apache.droids.helper.Loggable;
+import org.apache.droids.helper.factories.HandlerFactory;
 import org.apache.droids.helper.factories.URLFiltersFactory;
 
 public class CrawlingWorker extends Loggable implements Worker<Link> 
 {
   private final CrawlingDroid droid;
+  HandlerFactory handlerFactory;
   
   public CrawlingWorker( CrawlingDroid droid )
   {
@@ -93,7 +95,7 @@
   protected void handle(ContentEntity entity, Link link) 
       throws DroidsException, IOException
   {
-    droid.getHandlerFactory().handle(link.getURI(), entity);
+    getHandlerFactory().handle(link.getURI(), entity);
   }
   
   protected Collection<Link> getFilteredOutlinks( Parse parse )
@@ -110,5 +112,13 @@
     }
     return filtered.values();
   }
+  
+  public HandlerFactory getHandlerFactory() {
+    return handlerFactory;
+  }
+
+  public void setHandlerFactory(HandlerFactory handlerFactory) {
+    this.handlerFactory = handlerFactory;
+  }
 }
 

Modified: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/DroidsFactory.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/DroidsFactory.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/DroidsFactory.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/DroidsFactory.java
 Mon Dec 21 14:12:43 2009
@@ -32,15 +32,20 @@
 import org.apache.droids.helper.factories.ProtocolFactory;
 import org.apache.droids.helper.factories.URLFiltersFactory;
 import org.apache.droids.impl.DefaultTaskExceptionHandler;
+import org.apache.droids.impl.ExceptionCrawlingDroid;
+import org.apache.droids.impl.ReportCrawlingDroid;
+import org.apache.droids.impl.SaveCrawlingDroid;
 import org.apache.droids.impl.SequentialTaskMaster;
 import org.apache.droids.impl.SimpleTaskQueue;
+import org.apache.droids.impl.SimpleTaskQueueWithHistory;
+import org.apache.droids.impl.SysoutCrawlingDroid;
 import org.apache.droids.parse.html.HtmlParser;
 import org.apache.droids.protocol.http.HttpProtocol;
 import org.apache.droids.robot.crawler.CrawlingDroid;
 
 public class DroidsFactory
 {
-
+  
   public static ParserFactory createDefaultParserFactory() {
     ParserFactory parserFactory = new ParserFactory();
     HtmlParser htmlParser = new HtmlParser();
@@ -85,27 +90,77 @@
     return handlerFactory; 
   }
   
-  public static Droid<Link> createSimpleCrawlingDroid(
-      String targetURI, Handler testHandler) {
+  public static Droid<Link> createSimpleSaveCrawlingDroid(
+      String targetURI) {
+    ParserFactory parserFactory = createDefaultParserFactory();
+    ProtocolFactory protocolFactory = createDefaultProtocolFactory();
+    URLFiltersFactory filtersFactory = createDefaultURLFiltersFactory();
+
+    SimpleDelayTimer simpleDelayTimer = new SimpleDelayTimer();
+    simpleDelayTimer.setDelayMillis(100);
+    
+    SimpleTaskQueueWithHistory<Link> simpleQueue = new 
SimpleTaskQueueWithHistory<Link>(); 
+
+    SequentialTaskMaster<Link> taskMaster = new SequentialTaskMaster<Link>();
+    taskMaster.setDelayTimer( simpleDelayTimer );
+    taskMaster.setExceptionHandler(new DefaultTaskExceptionHandler());
+    
+    CrawlingDroid crawler = new SaveCrawlingDroid( simpleQueue, taskMaster );
+    crawler.setFiltersFactory(filtersFactory);
+    crawler.setParserFactory(parserFactory);
+    crawler.setProtocolFactory(protocolFactory);
+    
+    Collection<String> initialLocations = new ArrayList<String>();
+    initialLocations.add( targetURI );
+    crawler.setInitialLocations(initialLocations);
+    return crawler;
+  }
+  
+  public static Droid<Link> createSimpleReportCrawlingDroid(
+      String targetURI) {
     ParserFactory parserFactory = createDefaultParserFactory();
     ProtocolFactory protocolFactory = createDefaultProtocolFactory();
     URLFiltersFactory filtersFactory = createDefaultURLFiltersFactory();
-    HandlerFactory handlerFactory = createDefaultHandlerFactory(testHandler);
 
     SimpleDelayTimer simpleDelayTimer = new SimpleDelayTimer();
     simpleDelayTimer.setDelayMillis(100);
     
-    SimpleTaskQueue<Link> simpleQueue = new SimpleTaskQueue<Link>();
+    SequentialTaskMaster<Link> taskMaster = new SequentialTaskMaster<Link>();
+    taskMaster.setDelayTimer( simpleDelayTimer );
+    taskMaster.setExceptionHandler(new DefaultTaskExceptionHandler());
+    
+    SimpleTaskQueue<Link> queue = new SimpleTaskQueue<Link>();
+    
+    CrawlingDroid crawler = new ReportCrawlingDroid( queue, taskMaster );
+    crawler.setFiltersFactory(filtersFactory);
+    crawler.setParserFactory(parserFactory);
+    crawler.setProtocolFactory(protocolFactory);
+    
+    Collection<String> initialLocations = new ArrayList<String>();
+    initialLocations.add( targetURI );
+    crawler.setInitialLocations(initialLocations);
+    return crawler;
+  }
+  
+  public static Droid<Link> createSimpleExceptionCrawlingDroid(
+      String targetURI) {
+    ParserFactory parserFactory = createDefaultParserFactory();
+    ProtocolFactory protocolFactory = createDefaultProtocolFactory();
+    URLFiltersFactory filtersFactory = createDefaultURLFiltersFactory();
 
+    SimpleDelayTimer simpleDelayTimer = new SimpleDelayTimer();
+    simpleDelayTimer.setDelayMillis(100);
+    
+    SimpleTaskQueue<Link> queue = new SimpleTaskQueue<Link>();
+    
     SequentialTaskMaster<Link> taskMaster = new SequentialTaskMaster<Link>();
     taskMaster.setDelayTimer( simpleDelayTimer );
     taskMaster.setExceptionHandler(new DefaultTaskExceptionHandler());
     
-    CrawlingDroid crawler = new CrawlingDroid( simpleQueue, taskMaster );
+    CrawlingDroid crawler = new ExceptionCrawlingDroid( queue, taskMaster );
     crawler.setFiltersFactory(filtersFactory);
     crawler.setParserFactory(parserFactory);
     crawler.setProtocolFactory(protocolFactory);
-    crawler.setHandlerFactory(handlerFactory);
     
     Collection<String> initialLocations = new ArrayList<String>();
     initialLocations.add( targetURI );

Modified: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerDroid.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerDroid.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerDroid.java
 Mon Dec 21 14:12:43 2009
@@ -1,39 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.droids.examples;
-
-import org.apache.droids.api.Link;
-import org.apache.droids.api.TaskMaster;
-import org.apache.droids.api.TaskQueue;
-import org.apache.droids.robot.crawler.CrawlingDroid;
-
-public class IndexerDroid extends CrawlingDroid {
-  
-  public IndexerDroid(TaskQueue<Link> queue, TaskMaster<Link> taskMaster) {
-    super(queue, taskMaster);
-  }
-
-  private String updateUrl;
-  
-  public String getUpdateUrl() {
-    return updateUrl;
-  }
-
-  public void setUpdateUrl(String updateUrl) {
-    this.updateUrl = updateUrl;
-  }
-}

Modified: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerWorker.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerWorker.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerWorker.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/IndexerWorker.java
 Mon Dec 21 14:12:43 2009
@@ -1,40 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.droids.examples;
-
-import org.apache.droids.api.ContentEntity;
-import org.apache.droids.api.Handler;
-import org.apache.droids.api.Link;
-import org.apache.droids.robot.crawler.CrawlingWorker;
-
-public class IndexerWorker extends CrawlingWorker {
-
-  final Handler solrHandler;
-  
-  public IndexerWorker(IndexerDroid droid, Handler handler) {
-    super(droid);
-    
-    solrHandler = handler;
-  }
-
-
-  @Override
-  protected void handle(ContentEntity entity, Link link)
-  {
-    // TODO -- something different...
-  }
-}

Modified: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/SimpleRuntime.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/SimpleRuntime.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/SimpleRuntime.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/SimpleRuntime.java
 Mon Dec 21 14:12:43 2009
@@ -33,6 +33,7 @@
 import org.apache.droids.impl.DefaultTaskExceptionHandler;
 import org.apache.droids.impl.SequentialTaskMaster;
 import org.apache.droids.impl.SimpleTaskQueue;
+import org.apache.droids.impl.SysoutCrawlingDroid;
 import org.apache.droids.net.RegexURLFilter;
 import org.apache.droids.parse.html.HtmlParser;
 import org.apache.droids.protocol.http.DroidsHttpClient;
@@ -131,11 +132,10 @@
     taskMaster.setDelayTimer( simpleDelayTimer );
     taskMaster.setExceptionHandler( new DefaultTaskExceptionHandler() );
     
-    CrawlingDroid helloCrawler = new CrawlingDroid( simpleQueue, taskMaster );
+    CrawlingDroid helloCrawler = new SysoutCrawlingDroid( simpleQueue, 
taskMaster );
     helloCrawler.setFiltersFactory(filtersFactory);
     helloCrawler.setParserFactory(parserFactory);
     helloCrawler.setProtocolFactory(protocolFactory);
-    helloCrawler.setHandlerFactory(handlerFactory);
     
     Collection<String> initialLocations = new ArrayList<String>();
     initialLocations.add( targetURL );

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ExceptionReportHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ExceptionReportHandler.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ExceptionReportHandler.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ExceptionReportHandler.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,20 @@
+package org.apache.droids.examples.handler;
+
+import java.io.IOException;
+import java.net.URI;
+
+import org.apache.droids.api.ContentEntity;
+import org.apache.droids.exception.DroidsException;
+
+public class ExceptionReportHandler extends ReportHandler {
+
+  @Override
+  public void handle(URI uri, ContentEntity entity) throws IOException,
+      DroidsException {
+    super.handle(uri, entity);
+    if (uri.getPath().equals("/page3_html")) {
+      throw new RuntimeException("Oppsie!!!");
+    }
+  }
+  
+}

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ReportHandler.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ReportHandler.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ReportHandler.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/examples/handler/ReportHandler.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,34 @@
+package org.apache.droids.examples.handler;
+
+import java.io.IOException;
+import java.net.URI;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.Set;
+
+import org.apache.droids.api.ContentEntity;
+import org.apache.droids.api.Handler;
+import org.apache.droids.exception.DroidsException;
+
+public class ReportHandler implements Handler {
+
+  private static Set<String> report;
+  
+  static {
+    report = Collections.synchronizedSet(new HashSet<String>());
+  }
+  
+  @Override
+  public void handle(URI uri, ContentEntity entity) throws IOException,
+      DroidsException {
+    report.add(uri.toString());
+  }
+  
+  public static Set<String> getReport() {
+    return report;
+  }
+
+  public static void recycle() {
+    report.clear();
+  }
+}

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ExceptionCrawlingDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ExceptionCrawlingDroid.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ExceptionCrawlingDroid.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ExceptionCrawlingDroid.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,30 @@
+package org.apache.droids.impl;
+
+import java.net.URI;
+
+import org.apache.droids.DroidsFactory;
+import org.apache.droids.api.ContentEntity;
+import org.apache.droids.api.Handler;
+import org.apache.droids.api.Link;
+import org.apache.droids.api.TaskMaster;
+import org.apache.droids.api.TaskQueue;
+import org.apache.droids.api.Worker;
+import org.apache.droids.examples.handler.ExceptionReportHandler;
+import org.apache.droids.robot.crawler.CrawlingDroid;
+import org.apache.droids.robot.crawler.CrawlingWorker;
+
+public class ExceptionCrawlingDroid extends CrawlingDroid {
+
+  public ExceptionCrawlingDroid(TaskQueue<Link> queue, TaskMaster<Link> 
taskMaster) {
+    super(queue, taskMaster);
+  }
+
+  @Override
+  public Worker<Link> getNewWorker() {
+    final CrawlingWorker worker = new CrawlingWorker( this );
+    Handler testHandler = new ExceptionReportHandler();
+    
worker.setHandlerFactory(DroidsFactory.createDefaultHandlerFactory(testHandler));
+    return worker;
+  }
+
+}

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ReportCrawlingDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ReportCrawlingDroid.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ReportCrawlingDroid.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/ReportCrawlingDroid.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,27 @@
+package org.apache.droids.impl;
+
+import org.apache.droids.DroidsFactory;
+import org.apache.droids.api.Link;
+import org.apache.droids.api.TaskMaster;
+import org.apache.droids.api.TaskQueue;
+import org.apache.droids.api.Worker;
+import org.apache.droids.examples.handler.ReportHandler;
+import org.apache.droids.handle.Save;
+import org.apache.droids.handle.Sysout;
+import org.apache.droids.robot.crawler.CrawlingDroid;
+import org.apache.droids.robot.crawler.CrawlingWorker;
+
+public class ReportCrawlingDroid extends CrawlingDroid {
+
+  public ReportCrawlingDroid(TaskQueue<Link> queue, TaskMaster<Link> 
taskMaster) {
+    super(queue, taskMaster);
+  }
+
+  @Override
+  public Worker<Link> getNewWorker() {
+    final CrawlingWorker worker = new CrawlingWorker( this );
+    worker.setHandlerFactory(DroidsFactory.createDefaultHandlerFactory(new 
ReportHandler()));
+    return worker;
+  }
+
+}

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SaveCrawlingDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SaveCrawlingDroid.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SaveCrawlingDroid.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SaveCrawlingDroid.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,25 @@
+package org.apache.droids.impl;
+
+import org.apache.droids.DroidsFactory;
+import org.apache.droids.api.Link;
+import org.apache.droids.api.TaskMaster;
+import org.apache.droids.api.TaskQueue;
+import org.apache.droids.api.Worker;
+import org.apache.droids.handle.Save;
+import org.apache.droids.robot.crawler.CrawlingDroid;
+import org.apache.droids.robot.crawler.CrawlingWorker;
+
+public class SaveCrawlingDroid extends CrawlingDroid {
+
+  public SaveCrawlingDroid(TaskQueue<Link> queue, TaskMaster<Link> taskMaster) 
{
+    super(queue, taskMaster);
+  }
+
+  @Override
+  public Worker<Link> getNewWorker() {
+    final CrawlingWorker worker = new CrawlingWorker( this );
+    worker.setHandlerFactory(DroidsFactory.createDefaultHandlerFactory(new 
Save()));
+    return worker;
+  }
+
+}

Added: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SysoutCrawlingDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SysoutCrawlingDroid.java?rev=892828&view=auto
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SysoutCrawlingDroid.java
 (added)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/SysoutCrawlingDroid.java
 Mon Dec 21 14:12:43 2009
@@ -0,0 +1,26 @@
+package org.apache.droids.impl;
+
+import org.apache.droids.DroidsFactory;
+import org.apache.droids.api.Link;
+import org.apache.droids.api.TaskMaster;
+import org.apache.droids.api.TaskQueue;
+import org.apache.droids.api.Worker;
+import org.apache.droids.handle.Save;
+import org.apache.droids.handle.Sysout;
+import org.apache.droids.robot.crawler.CrawlingDroid;
+import org.apache.droids.robot.crawler.CrawlingWorker;
+
+public class SysoutCrawlingDroid extends CrawlingDroid {
+
+  public SysoutCrawlingDroid(TaskQueue<Link> queue, TaskMaster<Link> 
taskMaster) {
+    super(queue, taskMaster);
+  }
+
+  @Override
+  public Worker<Link> getNewWorker() {
+    final CrawlingWorker worker = new CrawlingWorker( this );
+    worker.setHandlerFactory(DroidsFactory.createDefaultHandlerFactory(new 
Sysout()));
+    return worker;
+  }
+
+}

Modified: 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/TestSimpleDroid.java
URL: 
http://svn.apache.org/viewvc/incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/TestSimpleDroid.java?rev=892828&r1=892827&r2=892828&view=diff
==============================================================================
--- 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/TestSimpleDroid.java
 (original)
+++ 
incubator/droids/trunk/droids-core/src/test/java/org/apache/droids/impl/TestSimpleDroid.java
 Mon Dec 21 14:12:43 2009
@@ -17,20 +17,16 @@
 package org.apache.droids.impl;
 
 import java.io.IOException;
-import java.net.URI;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.concurrent.TimeUnit;
 
 import junit.framework.Assert;
 
 import org.apache.droids.DroidsFactory;
-import org.apache.droids.api.ContentEntity;
 import org.apache.droids.api.Droid;
-import org.apache.droids.api.Handler;
 import org.apache.droids.api.Link;
 import org.apache.droids.api.TaskExceptionHandler;
 import org.apache.droids.api.TaskExceptionResult;
+import org.apache.droids.examples.handler.ReportHandler;
 import org.apache.droids.localserver.LocalHttpServer;
 import org.apache.droids.localserver.ResourceHandler;
 import org.junit.After;
@@ -61,31 +57,22 @@
     String baseURI = "http:/" + this.testserver.getServiceAddress();     
     String targetURI = baseURI + "/start_html";     
     
-    final List<URI> visitedLinks = new ArrayList<URI>();
-
-    Handler testHandler = new Handler() {
-
-      public void handle(URI uri, ContentEntity entity) {
-        visitedLinks.add(uri); 
-      }
-  
-    };
     
-    Droid<Link> droid = DroidsFactory.createSimpleCrawlingDroid(
-        targetURI, 
-        testHandler);    
+    Droid<Link> droid = 
DroidsFactory.createSimpleReportCrawlingDroid(targetURI);    
     
     droid.init();
     droid.start();
     droid.getTaskMaster().awaitTermination(30, TimeUnit.SECONDS);
     
-    Assert.assertFalse(visitedLinks.isEmpty());
-    Assert.assertEquals(5, visitedLinks.size());
-    Assert.assertEquals(new URI(baseURI + "/start_html"), visitedLinks.get(0));
-    Assert.assertEquals(new URI(baseURI + "/page1_html"), visitedLinks.get(1));
-    Assert.assertEquals(new URI(baseURI + "/page2_html"), visitedLinks.get(2));
-    Assert.assertEquals(new URI(baseURI + "/page3_html"), visitedLinks.get(3));
-    Assert.assertEquals(new URI(baseURI + "/page4_html"), visitedLinks.get(4));
+    Assert.assertFalse(ReportHandler.getReport().isEmpty());
+    Assert.assertEquals(5, ReportHandler.getReport().size());
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/start_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page1_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page2_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page3_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page4_html"));
+    
+    ReportHandler.recycle();
   }
   
   @Test
@@ -97,22 +84,8 @@
     String baseURI = "http:/" + this.testserver.getServiceAddress();     
     String targetURI = baseURI + "/start_html";     
     
-    final List<URI> visitedLinks = new ArrayList<URI>();
-
-    Handler testHandler = new Handler() {
-
-      public void handle(URI uri, ContentEntity entity) {
-        visitedLinks.add(uri);
-        if (uri.getPath().equals("/page3_html")) {
-          throw new RuntimeException("Oppsie!!!");
-        }
-      }
-  
-    };
-    
-    Droid<Link> droid = DroidsFactory.createSimpleCrawlingDroid(
-        targetURI, 
-        testHandler);    
+    Droid<Link> droid = DroidsFactory.createSimpleExceptionCrawlingDroid(
+        targetURI);    
     
     SequentialTaskMaster<Link> taskMaster = (SequentialTaskMaster<Link>) 
droid.getTaskMaster();
     taskMaster.setExceptionHandler(new TaskExceptionHandler() {
@@ -130,12 +103,14 @@
     droid.start();
     droid.getTaskMaster().awaitTermination(30, TimeUnit.SECONDS);
     
-    Assert.assertFalse(visitedLinks.isEmpty());
-    Assert.assertEquals(4, visitedLinks.size());
-    Assert.assertEquals(new URI(baseURI + "/start_html"), visitedLinks.get(0));
-    Assert.assertEquals(new URI(baseURI + "/page1_html"), visitedLinks.get(1));
-    Assert.assertEquals(new URI(baseURI + "/page2_html"), visitedLinks.get(2));
-    Assert.assertEquals(new URI(baseURI + "/page3_html"), visitedLinks.get(3));
+    Assert.assertFalse(ReportHandler.getReport().isEmpty());
+    Assert.assertEquals(4, ReportHandler.getReport().size());
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/start_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page1_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page2_html"));
+    Assert.assertTrue(ReportHandler.getReport().contains(baseURI + 
"/page3_html"));
+    
+    ReportHandler.recycle();
   }
 
 }


Reply via email to