Annotation of java/classes/org/w3c/jigsaw/servlet/ServletIndexer.java, revision 1.2
1.1 bmahe 1: // ServletIndexer.java
1.2 ! bmahe 2: // $Id: ServletIndexer.java,v 1.1 1998/07/21 11:04:52 bmahe Exp $
1.1 bmahe 3: // (c) COPYRIGHT MIT and INRIA, 1998.
4: // Please first read the full copyright statement in file COPYRIGHT.html
5:
6: package org.w3c.jigsaw.servlet;
7:
8: import java.io.*;
9: import java.util.*;
10:
11: import javax.servlet.*;
12:
13: import org.w3c.tools.resources.*;
14: import org.w3c.tools.resources.indexer.*;
15:
16: /**
1.2 ! bmahe 17: * @version $Revision: 1.1 $
1.1 bmahe 18: * @author Benoît Mahé (bmahe@w3.org)
19: */
20: public class ServletIndexer extends SampleResourceIndexer {
21:
22: /**
23: * Copy one hastable in another one.
24: * @param fromdefs The source
25: * @param todefs The destination
26: */
27: protected void copyDefs(Hashtable fromdefs, Hashtable toDefs) {
28: Enumeration keys = fromdefs.keys();
29: while(keys.hasMoreElements()) {
30: Object key = keys.nextElement();
31: toDefs.put(keys, fromdefs.get(key));
32: }
33: }
34:
35: /**
36: * Create a default file resource for this file (that exists).
37: * @param directory The directory of the file.
38: * @param name The name of the file.
39: * @param defs A set of default attribute values.
40: * @return An instance of Resource, or <strong>null</strong> if
41: * we were unable to create it.
42: */
43:
44: protected Resource createFileResource(File directory,
45: RequestInterface req,
46: String name,
47: Hashtable defs)
48: {
49: if (! name.endsWith(".class"))
50: return super.createFileResource(directory, req, name, defs);
51: ResourceReference rr = null;
52: FramedResource template = null;
53:
54: // Check that at least one class is defined for all the extensions:
55: String exts[] = getFileExtensions(name) ;
56: if ( exts == null )
57: return null ;
58: for (int i = exts.length-1 ; i >= 0 ; i--) {
59: rr = getTemplateFor(exts[i]) ;
60: if ( rr != null )
61: break ;
62: }
63: if ( rr == null ) {
64: // Look for a default template:
65: if ((rr = loadExtension(defname)) == null)
66: return null ;
67: return super.createFileResource(directory, req, name, defs);
68: } else {
69: //this could become a servlet
70: Hashtable tempdefs = null;
71: if (defs != null)
72: tempdefs = (Hashtable) defs.clone();
73: else
74: tempdefs = new Hashtable(5) ;
75: if ( tempdefs.get("directory") == null )
76: tempdefs.put("directory", directory) ;
77: if ( tempdefs.get("context") == null )
78: tempdefs.put("context", getContext());
79: try {
80: template = (FramedResource) rr.lock();
81: if (template instanceof ServletWrapper) {
82: if (tempdefs.get("servlet-class") == null)
83: tempdefs.put("servlet-class", name);
84: int idx = name.lastIndexOf(".class");
85: String id = name.substring(0,idx);
86: tempdefs.put("identifier", id) ;
87: String url = (String) tempdefs.get("url");
88: if ((url != null) && (url.endsWith(".class"))) {
89: idx = url.lastIndexOf(".class");
90: tempdefs.put("url", url.substring(0, idx));
91: }
92: } else {
93: if ( tempdefs.get("identifier") == null )
94: tempdefs.put("identifier", name);
95: }
96: if (exts != null) {
97: // Merge with values defined by the extension:
98: for (int i = exts.length ; --i >= 0 ; )
99: mergeDefaultAttributes(template, exts[i], tempdefs) ;
100: }
1.2 ! bmahe 101: // Create, initialize and return the new resource
1.1 bmahe 102: try {
103: FramedResource cloned =
104: (FramedResource) template.getClone(tempdefs);
105: if (cloned instanceof ServletWrapper) {
106: ServletWrapper wrapper = (ServletWrapper) cloned;
107: // check the servlet class
108: if (! wrapper.isWrappingAServlet())
109: return null;
110: }
1.2 ! bmahe 111: //ok, the defs are good.
1.1 bmahe 112: copyDefs(tempdefs, defs);
113: return cloned;
114: } catch (Exception ex) {
115: ex.printStackTrace() ;
116: return null ;
117: }
118: } catch (InvalidResourceException ex) {
119: ex.printStackTrace();
120: return null;
121: } finally {
122: rr.unlock();
123: }
124: }
125: }
126: }
Webmaster