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

搜索引擎

开发平台:

Java

  1. package net.javacoding.jspider.core.storage.impl;
  2. import net.javacoding.jspider.core.storage.ResourceDAO;
  3. import net.javacoding.jspider.core.storage.exception.InvalidStateTransitionException;
  4. import net.javacoding.jspider.core.storage.spi.ResourceDAOSPI;
  5. import net.javacoding.jspider.core.storage.spi.StorageSPI;
  6. import net.javacoding.jspider.core.event.impl.*;
  7. import net.javacoding.jspider.core.logging.Log;
  8. import net.javacoding.jspider.core.model.*;
  9. import net.javacoding.jspider.core.util.URLUtil;
  10. import net.javacoding.jspider.api.model.*;
  11. import java.net.URL;
  12. import java.util.Date;
  13. /**
  14.  * $Id: ResourceDAOImpl.java,v 1.1 2003/04/11 16:37:05 vanrogu Exp $
  15.  */
  16. class ResourceDAOImpl implements ResourceDAO {
  17.     protected int counter;
  18.     protected Log log;
  19.     protected StorageSPI storage;
  20.     protected ResourceDAOSPI spi;
  21.     protected int folderCounter;
  22.     public ResourceDAOImpl  ( Log log, StorageSPI storage, ResourceDAOSPI spi ) {
  23.         this.log = log;
  24.         this.storage = storage;
  25.         this.spi = spi;
  26.         this.counter = 0;
  27.         this.folderCounter = 0;
  28.     }
  29.     public Resource registerURL(URL url) {
  30.         FolderInternal folder = ensureFolders(url);
  31.         int id = ++counter;
  32.         ResourceInternal resource = spi.getResource(url);
  33.         if (resource == null) {
  34.             SiteInternal site = storage.getSiteDAO().find(URLUtil.getSiteURL(url));
  35.             if (site == null) {
  36.                 log.warn("unable to register resource " + url + " because Site object wasn't found");
  37.             } else {
  38.                 resource = new ResourceInternal(storage, id, site, url, new Date(), folder);
  39.                 spi.create(id, resource);
  40.             }
  41.         }
  42.         return resource;
  43.     }
  44.     public void registerURLReference(URL url, URL referer) {
  45.         spi.registerURLReference(url, referer);
  46.     }
  47.     public Resource[] getAllResources() {
  48.         return spi.findAllResources();
  49.     }
  50.     public Resource[] getRefereringResources(Resource resource) {
  51.         ResourceInternal ri = TypeTranslator.translate(resource);
  52.         return spi.getRefereringResources(ri);
  53.     }
  54.     public Resource[] getReferencedResources(Resource resource) {
  55.         ResourceInternal ri = TypeTranslator.translate(resource);
  56.         return spi.getReferencedResources(ri);
  57.     }
  58.     public ResourceReference[] getIncomingReferences(Resource resource) {
  59.         return new ResourceReference[0];
  60.     }
  61.     public ResourceReference[] getOutgoingReferences(Resource resource) {
  62.         ResourceInternal ri = TypeTranslator.translate(resource);
  63.         return spi.getOutgoingReferences(ri);
  64.     }
  65.     public Resource[] getRootResources(Site site) {
  66.         SiteInternal si = (SiteInternal)site;
  67.         return spi.getRootResources(si);
  68.     }
  69.     public Resource[] getBySite(Site site) {
  70.         SiteInternal si = TypeTranslator.translate(site);
  71.         return spi.getBySite(si);
  72.     }
  73.     public Resource[] findByFolder(Folder folder) {
  74.         FolderInternal fi = TypeTranslator.translate(folder);
  75.         return spi.findByFolder(fi);
  76.     }
  77.     public Resource getResource(URL url) {
  78.         return spi.getResource(url);
  79.     }
  80.     public void setSpidered(URL url, URLSpideredOkEvent event) {
  81.         spi.setSpidered(url, event);
  82.     }
  83.     public void setIgnoredForParsing(URL url) throws InvalidStateTransitionException {
  84.         spi.setIgnoredForParsing(url);
  85.     }
  86.     public void setIgnoredForFetching(URL url, URLFoundEvent event) throws InvalidStateTransitionException {
  87.         spi.setIgnoredForFetching(url, event);
  88.     }
  89.     public void setForbidden(URL url, URLFoundEvent event) throws InvalidStateTransitionException {
  90.         spi.setForbidden(url, event);
  91.     }
  92.     public void setError(URL url, ResourceParsedErrorEvent event) throws InvalidStateTransitionException {
  93.         spi.setError(url, event);
  94.     }
  95.     public void setParsed(URL url, ResourceParsedOkEvent event) throws InvalidStateTransitionException {
  96.         spi.setParsed(url, event);
  97.     }
  98.     public void setError(URL url, URLSpideredErrorEvent event) throws InvalidStateTransitionException {
  99.         spi.setError(url, event);
  100.     }
  101.     protected FolderInternal ensureFolders(URL url) {
  102.         URL siteURL = URLUtil.getSiteURL(url);
  103.         SiteInternal site = storage.getSiteDAO().find(siteURL);
  104.         String[] folderNames = URLUtil.getFolderNames(url);
  105.         FolderInternal folder = null;
  106.         if (folderNames.length > 0) {
  107.             folder = (FolderInternal)site.getRootFolder(folderNames[0]);
  108.             if (folder == null) {
  109.                 int id = ++folderCounter;
  110.                 folder = storage.getFolderDAO().createFolder(id, site, folderNames[0]);
  111.             }
  112.             if ( folderNames.length > 1 ) {
  113.               folder = ensureRecursively(folder, folderNames, 1);
  114.             }
  115.         }
  116.         return folder;
  117.     }
  118.     protected FolderInternal ensureRecursively(FolderInternal folder, String[] folderNames, int depth) {
  119.         FolderInternal subFolder = (FolderInternal)folder.getFolder(folderNames[depth]);
  120.         if (subFolder == null) {
  121.             int id = ++folderCounter;
  122.             subFolder = storage.getFolderDAO().createFolder(id, folder, folderNames[depth]);
  123.         }
  124.         if ((depth + 1) < folderNames.length) {
  125.             subFolder = ensureRecursively(subFolder, folderNames, depth + 1);
  126.         }
  127.         return subFolder;
  128.     }
  129. }