01: // GhostResourceIndexer.java
02: // $Id: GhostResourceIndexer.java,v 1.6 2000/08/16 21:37:54 ylafon Exp $
03: // (c) COPYRIGHT MIT and INRIA, 1997.
04: // Please first read the full copyright statement in file COPYRIGHT.html
05:
06: package org.w3c.tools.resources.indexer;
07:
08: import java.util.Hashtable;
09:
10: import java.io.File;
11:
12: import org.w3c.tools.resources.ContainerResource;
13: import org.w3c.tools.resources.InvalidResourceException;
14: import org.w3c.tools.resources.RequestInterface;
15: import org.w3c.tools.resources.Resource;
16: import org.w3c.tools.resources.ResourceContext;
17: import org.w3c.tools.resources.ResourceReference;
18:
19: public class GhostResourceIndexer extends SampleResourceIndexer {
20:
21: /**
22: * Try to create a resource for the given file.
23: * This method makes its best efforts to try to build a default
24: * resource out of a file.
25: * @param directory The directory the file is in.
26: * @param name The name of the file.
27: * @param defs Any default attribute values that should be provided
28: * to the created resource at initialization time.
29: * @return A Resource instance, or <strong>null</strong> if the given
30: * file can't be truned into a resource given our configuration
31: * database.
32: */
33:
34: public Resource createResource(ContainerResource container,
35: RequestInterface request, File directory, String name,
36: Hashtable defs) {
37: File file = new File(directory, name);
38: // Okay, dispatch on wether it is a file or a directory.
39: Resource result = null;
40: if (file.isDirectory())
41: result = createDirectoryResource(directory, request, name,
42: defs);
43: else
44: result = createFileResource(directory, request, name, defs);
45:
46: if (result == null)
47: result = createVirtualResource(directory, request, name,
48: defs);
49: if (result != null)
50: return result;
51: // Try the super indexer if available:
52: String super Indexer = getSuperIndexer();
53: if (super Indexer == null)
54: return null;
55: IndexerModule m = null;
56: m = (IndexerModule) getContext().getModule(IndexerModule.NAME);
57: ResourceReference rri = m.getIndexer(super Indexer);
58: if (rri == null)
59: return null;
60: try {
61: ResourceIndexer p = (ResourceIndexer) rri.lock();
62: return ((p != null) ? p.createResource(container, request,
63: directory, name, defs) : null);
64: } catch (InvalidResourceException ex) {
65: return null;
66: } finally {
67: rri.unlock();
68: }
69: }
70:
71: }
|