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