KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > javacoding > jspider > core > storage > impl > ResourceDAOImpl


1 package net.javacoding.jspider.core.storage.impl;
2
3 import net.javacoding.jspider.core.storage.ResourceDAO;
4 import net.javacoding.jspider.core.storage.exception.InvalidStateTransitionException;
5 import net.javacoding.jspider.core.storage.spi.ResourceDAOSPI;
6 import net.javacoding.jspider.core.storage.spi.StorageSPI;
7 import net.javacoding.jspider.core.event.impl.*;
8 import net.javacoding.jspider.core.logging.Log;
9 import net.javacoding.jspider.core.model.*;
10 import net.javacoding.jspider.core.util.URLUtil;
11 import net.javacoding.jspider.api.model.*;
12
13 import java.net.URL JavaDoc;
14 import java.util.Date JavaDoc;
15
16 /**
17  * $Id: ResourceDAOImpl.java,v 1.1 2003/04/11 16:37:05 vanrogu Exp $
18  */

19 class ResourceDAOImpl implements ResourceDAO {
20
21     protected int counter;
22     protected Log log;
23     protected StorageSPI storage;
24     protected ResourceDAOSPI spi;
25
26     protected int folderCounter;
27
28     public ResourceDAOImpl ( Log log, StorageSPI storage, ResourceDAOSPI spi ) {
29         this.log = log;
30         this.storage = storage;
31         this.spi = spi;
32         this.counter = 0;
33         this.folderCounter = 0;
34     }
35
36     public Resource registerURL(URL JavaDoc url) {
37         FolderInternal folder = ensureFolders(url);
38         int id = ++counter;
39         ResourceInternal resource = spi.getResource(url);
40         if (resource == null) {
41             SiteInternal site = storage.getSiteDAO().find(URLUtil.getSiteURL(url));
42             if (site == null) {
43                 log.warn("unable to register resource " + url + " because Site object wasn't found");
44             } else {
45                 resource = new ResourceInternal(storage, id, site, url, new Date JavaDoc(), folder);
46                 spi.create(id, resource);
47             }
48         }
49         return resource;
50     }
51
52     public void registerURLReference(URL JavaDoc url, URL JavaDoc referer) {
53         spi.registerURLReference(url, referer);
54     }
55
56     public Resource[] getAllResources() {
57         return spi.findAllResources();
58     }
59
60     public Resource[] getRefereringResources(Resource resource) {
61         ResourceInternal ri = TypeTranslator.translate(resource);
62         return spi.getRefereringResources(ri);
63     }
64
65     public Resource[] getReferencedResources(Resource resource) {
66         ResourceInternal ri = TypeTranslator.translate(resource);
67         return spi.getReferencedResources(ri);
68     }
69
70     public ResourceReference[] getIncomingReferences(Resource resource) {
71         return new ResourceReference[0];
72     }
73
74     public ResourceReference[] getOutgoingReferences(Resource resource) {
75         ResourceInternal ri = TypeTranslator.translate(resource);
76         return spi.getOutgoingReferences(ri);
77     }
78
79     public Resource[] getRootResources(Site site) {
80         SiteInternal si = (SiteInternal)site;
81         return spi.getRootResources(si);
82     }
83
84     public Resource[] getBySite(Site site) {
85         SiteInternal si = TypeTranslator.translate(site);
86         return spi.getBySite(si);
87     }
88
89     public Resource[] findByFolder(Folder folder) {
90         FolderInternal fi = TypeTranslator.translate(folder);
91         return spi.findByFolder(fi);
92     }
93
94     public Resource getResource(URL JavaDoc url) {
95         return spi.getResource(url);
96     }
97
98     public void setSpidered(URL JavaDoc url, URLSpideredOkEvent event) {
99         spi.setSpidered(url, event);
100     }
101
102     public void setIgnoredForParsing(URL JavaDoc url) throws InvalidStateTransitionException {
103         spi.setIgnoredForParsing(url);
104     }
105
106     public void setIgnoredForFetching(URL JavaDoc url, URLFoundEvent event) throws InvalidStateTransitionException {
107         spi.setIgnoredForFetching(url, event);
108     }
109
110     public void setForbidden(URL JavaDoc url, URLFoundEvent event) throws InvalidStateTransitionException {
111         spi.setForbidden(url, event);
112     }
113
114     public void setError(URL JavaDoc url, ResourceParsedErrorEvent event) throws InvalidStateTransitionException {
115         spi.setError(url, event);
116     }
117
118     public void setParsed(URL JavaDoc url, ResourceParsedOkEvent event) throws InvalidStateTransitionException {
119         spi.setParsed(url, event);
120     }
121
122     public void setError(URL JavaDoc url, URLSpideredErrorEvent event) throws InvalidStateTransitionException {
123         spi.setError(url, event);
124     }
125
126
127     protected FolderInternal ensureFolders(URL JavaDoc url) {
128         URL JavaDoc siteURL = URLUtil.getSiteURL(url);
129         SiteInternal site = storage.getSiteDAO().find(siteURL);
130
131         String JavaDoc[] folderNames = URLUtil.getFolderNames(url);
132
133         FolderInternal folder = null;
134         if (folderNames.length > 0) {
135             folder = (FolderInternal)site.getRootFolder(folderNames[0]);
136             if (folder == null) {
137                 int id = ++folderCounter;
138                 folder = storage.getFolderDAO().createFolder(id, site, folderNames[0]);
139             }
140             if ( folderNames.length > 1 ) {
141               folder = ensureRecursively(folder, folderNames, 1);
142             }
143         }
144         return folder;
145     }
146
147     protected FolderInternal ensureRecursively(FolderInternal folder, String JavaDoc[] folderNames, int depth) {
148         FolderInternal subFolder = (FolderInternal)folder.getFolder(folderNames[depth]);
149         if (subFolder == null) {
150             int id = ++folderCounter;
151             subFolder = storage.getFolderDAO().createFolder(id, folder, folderNames[depth]);
152         }
153         if ((depth + 1) < folderNames.length) {
154             subFolder = ensureRecursively(subFolder, folderNames, depth + 1);
155         }
156         return subFolder;
157     }
158 }
159
Popular Tags