DecideOnSpideringTask.java
上传用户:qing5858
上传日期:2015-10-27
资源大小:6056k
文件大小:3k
源码类别:

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.task.work;
  2. import net.javacoding.jspider.api.event.resource.ResourceForbiddenEvent;
  3. import net.javacoding.jspider.api.event.resource.ResourceIgnoredForFetchingEvent;
  4. import net.javacoding.jspider.api.model.*;
  5. import net.javacoding.jspider.core.SpiderContext;
  6. import net.javacoding.jspider.core.dispatch.EventDispatcher;
  7. import net.javacoding.jspider.core.event.impl.URLFoundEvent;
  8. import net.javacoding.jspider.core.rule.Ruleset;
  9. import net.javacoding.jspider.core.storage.Storage;
  10. import net.javacoding.jspider.core.task.WorkerTask;
  11. import net.javacoding.jspider.core.util.URLUtil;
  12. import java.net.URL;
  13. /**
  14.  *
  15.  * $Id: DecideOnSpideringTask.java,v 1.21 2003/04/10 16:19:13 vanrogu Exp $
  16.  *
  17.  * @author G黱ther Van Roey
  18.  */
  19. public class DecideOnSpideringTask extends BaseWorkerTaskImpl {
  20.     protected Storage storage;
  21.     protected URLFoundEvent event;
  22.     protected EventDispatcher eventDispatcher;
  23.     public DecideOnSpideringTask(SpiderContext context, URLFoundEvent urlFoundEvent) {
  24.         super(context, WorkerTask.WORKERTASK_THINKERTASK);
  25.         this.event = urlFoundEvent;
  26.         this.eventDispatcher = context.getEventDispatcher();
  27.         this.storage = context.getStorage();
  28.     }
  29.     public void prepare() {
  30.     }
  31.     public synchronized void execute() {
  32.         URL url = event.getURL();
  33.         URL foundURL = event.getFoundURL();
  34.         URL currentSiteURL = URLUtil.getSiteURL(url);
  35.         URL siteURL = URLUtil.getSiteURL(foundURL);
  36.         Site currentSite = null;
  37.         if ( currentSiteURL != null ) {
  38.             currentSite = storage.getSiteDAO().find(currentSiteURL);
  39.         }
  40.         Site site = storage.getSiteDAO().find(siteURL);
  41.         Resource foundResource = storage.getResourceDAO().getResource(foundURL);
  42.         Ruleset spiderRules = context.getSiteSpiderRules(site);
  43.         Decision spiderDecision = spiderRules.applyRules(context, currentSite, foundURL);
  44.         storage.getDecisionDAO().saveSpiderDecision(foundResource, spiderDecision);
  45.         switch (spiderDecision.getDecision()) {
  46.             case Decision.RULE_IGNORE:
  47.                 storage.getResourceDAO().setIgnoredForFetching(foundURL, event);
  48.                 eventDispatcher.dispatch(new ResourceIgnoredForFetchingEvent(foundResource));
  49.                 break;
  50.             case Decision.RULE_FORBIDDEN:
  51.                 storage.getResourceDAO().setForbidden(foundURL, event);
  52.                 eventDispatcher.dispatch(new ResourceForbiddenEvent(foundResource));
  53.                 break;
  54.             case Decision.RULE_ACCEPT:
  55.             case Decision.RULE_DONTCARE:
  56.             default:
  57.                 context.getAgent().scheduleForSpidering(foundURL);
  58.                 break;
  59.         }
  60.     }
  61. }