You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@velocity.apache.org by nb...@apache.org on 2003/07/22 20:34:29 UTC

cvs commit: jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/servlet ServletToolboxManager.java

nbubna      2003/07/22 11:34:29

  Modified:    src/java/org/apache/velocity/tools/view
                        XMLToolboxManager.java
               src/java/org/apache/velocity/tools/view/servlet
                        ServletToolboxManager.java
  Log:
  load toolbox using Digester instead of dom4j (and a few very minor changes)
  
  Revision  Changes    Path
  1.4       +19 -96    jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/XMLToolboxManager.java
  
  Index: XMLToolboxManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/XMLToolboxManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- XMLToolboxManager.java	28 May 2003 00:17:15 -0000	1.3
  +++ XMLToolboxManager.java	22 Jul 2003 18:34:27 -0000	1.4
  @@ -62,13 +62,11 @@
   import java.util.Iterator;
   import java.util.List;
   import java.util.Map;
  -import org.dom4j.Document;
  -import org.dom4j.Element;
  -import org.dom4j.Node;
  -import org.dom4j.datatype.InvalidSchemaException;
  -import org.dom4j.io.SAXReader;
   
  +import org.apache.commons.digester.Digester;
  +import org.apache.commons.digester.RuleSet;
   import org.apache.velocity.app.Velocity;
  +import org.apache.velocity.tools.view.ToolboxRuleSet;
   import org.apache.velocity.tools.view.context.ToolboxContext;
   
   
  @@ -123,15 +121,10 @@
   public abstract class XMLToolboxManager implements ToolboxManager
   {
   
  -    public static final String BASE_NODE        = "toolbox";
  -    public static final String ELEMENT_TOOL     = "tool";
  -    public static final String ELEMENT_DATA     = "data";
  -    public static final String ELEMENT_KEY      = "key";
  -    public static final String ELEMENT_CLASS    = "class";
  -    public static final String ELEMENT_VALUE    = "value";
  -    public static final String ATTRIBUTE_TYPE   = "type";
  -
       private List toolinfo;
  +    private Map toolbox;
  +
  +    private static RuleSet ruleSet = new ToolboxRuleSet();
   
   
       /**
  @@ -140,23 +133,21 @@
       public XMLToolboxManager()
       {
           toolinfo = new ArrayList();
  +        toolbox = new HashMap();
       }
   
   
  -
       // ------------------------------- ToolboxManager interface ------------
   
  -
       public void addTool(ToolInfo info)
       {
           toolinfo.add(info);
  +        Velocity.info("Added "+info.getKey()+" ("+info.getClassname()+") to the toolbox.");
       }
   
   
       public ToolboxContext getToolboxContext(Object initData)
       {
  -        Map toolbox = new HashMap();
  -
           Iterator i = toolinfo.iterator();
           while(i.hasNext())
           {
  @@ -168,22 +159,11 @@
       }
   
   
  -
       // ------------------------------- toolbox loading methods ------------
   
  -
  -    /**
  -     * Default implementation logs messages to Velocity's log system
  -     */
  -    protected void log(String s) {
  -       Velocity.info("XMLToolboxManager - "+s);
  -    }
  -
  -
       /**
        * <p>Reads an XML document from an {@link InputStream}
  -     * using <a href="http://dom4j.org">dom4j</a> and
  -     * sets up the toolbox from that.</p>
  +     * and sets up the toolbox from that.</p>
        *
        * The DTD for toolbox schema is:
        * <pre>
  @@ -201,78 +181,21 @@
        */
       public void load(InputStream input) throws Exception
       {
  -        log("Loading toolbox...");
  -        Document document = new SAXReader().read(input);
  -        List elements = document.selectNodes("//"+BASE_NODE+"/*");
  -
  -        int elementsRead = 0;
  -        Iterator i = elements.iterator();
  -        while(i.hasNext())
  -        {
  -            Element e = (Element)i.next();
  -            if (readElement(e)) {
  -                elementsRead++;
  -            }
  -        }
  -
  -        log("Toolbox loaded.  Read "+elementsRead+" elements.");
  -    }
  -
  -
  -    /**
  -     * Delegates the reading of an element's ToolInfo
  -     * and adds the returned instance to the tool list.
  -     */
  -    protected boolean readElement(Element e) throws Exception
  -    {
  -        String name = e.getName();
  -
  -        ToolInfo info = null;
  -
  -        if (name.equalsIgnoreCase(ELEMENT_TOOL))
  -        {
  -            info = readToolInfo(e);
  -        }
  -        else if (name.equalsIgnoreCase(ELEMENT_DATA)) 
  -        {
  -            info = readDataInfo(e);
  -        }
  -        else 
  -        {
  -            log("Could not read element: "+name);
  -            return false;
  -        }
  -
  -        addTool(info);
  -        log("Added "+info.getClassname()+" as "+info.getKey());
  -        return true;
  -    }
  -
  -
  -    protected ToolInfo readToolInfo(Element e) throws Exception
  -    {
  -        Node n = e.selectSingleNode(ELEMENT_KEY);
  -        String key = n.getText();
  +        Velocity.debug("XMLToolboxManager: Loading toolbox...");
   
  -        n = e.selectSingleNode(ELEMENT_CLASS);
  -        String classname = n.getText();
  +        Digester digester = new Digester();
  +        digester.setValidating(false);
  +        digester.push(this);
  +        digester.addRuleSet(getRuleSet());
  +        digester.parse(input);
   
  -        return new ViewToolInfo(key, classname);
  +        Velocity.debug("XMLToolboxManager: Toolbox loaded.");
       }
   
   
  -    protected ToolInfo readDataInfo(Element e) throws Exception
  +    protected RuleSet getRuleSet()
       {
  -        Node n = e.selectSingleNode(ELEMENT_KEY);
  -        String key = n.getText();
  -
  -        n = e.selectSingleNode(ELEMENT_VALUE);
  -        String value = n.getText();
  -
  -        String type = e.attributeValue(ATTRIBUTE_TYPE, DataInfo.TYPE_STRING);
  -
  -        return new DataInfo(key, type, value);
  +        return ruleSet;
       }
  -
   
   }
  
  
  
  1.5       +29 -109   jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java
  
  Index: ServletToolboxManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-velocity-tools/src/java/org/apache/velocity/tools/view/servlet/ServletToolboxManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- ServletToolboxManager.java	28 May 2003 00:17:16 -0000	1.4
  +++ ServletToolboxManager.java	22 Jul 2003 18:34:28 -0000	1.5
  @@ -56,9 +56,9 @@
   package org.apache.velocity.tools.view.servlet;
   
   
  -import java.io.IOException;
  -import java.io.FileNotFoundException;
   import java.io.InputStream;
  +import java.io.PrintWriter;
  +import java.io.StringWriter;
   
   import java.util.List;
   import java.util.Iterator;
  @@ -69,15 +69,15 @@
   import javax.servlet.http.HttpSession;
   import javax.servlet.ServletContext;
   
  -import org.dom4j.Element;
  -import org.dom4j.Node;
  -
  +import org.apache.commons.digester.Digester;
  +import org.apache.commons.digester.RuleSet;
   import org.apache.velocity.app.Velocity;
   import org.apache.velocity.tools.view.DataInfo;
   import org.apache.velocity.tools.view.ToolInfo;
   import org.apache.velocity.tools.view.XMLToolboxManager;
   import org.apache.velocity.tools.view.context.ToolboxContext;
   import org.apache.velocity.tools.view.context.ViewContext;
  +import org.apache.velocity.tools.view.servlet.ServletToolboxRuleSet;
   
   
   /**
  @@ -139,13 +139,12 @@
   
       // --------------------------------------------------- Properties ---------
   
  -    public static final String ELEMENT_SCOPE = "scope";
  -    public static final String ELEMENT_CREATE_SESSION = "create-session";
  -
  -    public static final String VALUE_YES  = "yes";
  -    public static final String VALUE_NO   = "no";
  +    public static final String REQUEST_SCOPE = "request";
  +    public static final String SESSION_SCOPE = "session";
  +    public static final String APPLICATION_SCOPE = "application";
   
  -    public static final String SESSION_TOOLS_KEY = "org.apache.velocity.tools.view.tools.ServletToolboxManager.SessionTools";
  +    public static final String SESSION_TOOLS_KEY = 
  +        "org.apache.velocity.tools.view.tools.ServletToolboxManager.SessionTools";
   
       private ServletContext servletContext;
       private Map appTools;
  @@ -154,6 +153,7 @@
       private boolean createSession;
   
       private static HashMap managersMap = new HashMap();
  +    private static RuleSet servletRuleSet = new ServletToolboxRuleSet();
   
   
       // --------------------------------------------------- Constructor --------
  @@ -173,6 +173,8 @@
       }
   
   
  +    // -------------------------------------------- Public Methods ------------
  +
       /**
        * ServletToolboxManager factory method.
        * This method will ensure there is exactly one ServletToolboxManager
  @@ -205,7 +207,8 @@
   
                   if (is != null)
                   {
  -                    Velocity.info("Using toolbox configuration file '" + toolboxFile +"'");
  +                    Velocity.info("ServletToolboxManager: Using config file '" + 
  +                                  toolboxFile +"'");
   
                       toolboxManager = new ServletToolboxManager(servletContext);
                       toolboxManager.load(is);
  @@ -213,7 +216,7 @@
                       // remember it
                       managersMap.put(pathname, toolboxManager);
   
  -                    Velocity.info("Toolbox setup complete.");
  +                    Velocity.info("ServletToolboxManager: Toolbox setup complete.");
                   }
               }
               catch(Exception e)
  @@ -222,8 +225,8 @@
   
                   // if this happens, it probably deserves
                   // to have the stack trace logged
  -                java.io.StringWriter sw = new java.io.StringWriter();
  -                e.printStackTrace(new java.io.PrintWriter(sw));
  +                StringWriter sw = new StringWriter();
  +                e.printStackTrace(new PrintWriter(sw));
                   Velocity.error(sw.toString());
               }
               finally
  @@ -240,9 +243,7 @@
           }
           return toolboxManager;
       }
  -    
   
  -    // --------------------------------------------------- Methods ------------
   
       /**
        * <p>Sets whether or not to create a new session when none exists for the
  @@ -264,98 +265,15 @@
       public void setCreateSession(boolean b)
       {
           createSession = b;
  +        Velocity.debug("ServletToolboxManager: create-session is set to " + b);
       }
   
   
  -    /**
  -     * Overrides XMLToolboxManager
  -     */
  -    protected void log(String s) 
  -    {
  -        Velocity.info("ServletToolboxManager: " + s);
  -    }
  -
  -
  -    /**
  -     * Overrides XMLToolboxManager to handle the create-session element.
  -     */
  -    protected boolean readElement(Element e) throws Exception
  -    {
  -        String name = e.getName();
  -
  -        ToolInfo info = null;
  -
  -        if (name.equalsIgnoreCase(ELEMENT_TOOL))
  -        {
  -            info = readToolInfo(e);
  -        }
  -        else if (name.equalsIgnoreCase(ELEMENT_DATA)) 
  -        {
  -            info = readDataInfo(e);
  -        }
  -        else if (name.equalsIgnoreCase(ELEMENT_CREATE_SESSION))
  -        {
  -            readCreateSession(e);
  -            return true;
  -        }
  -        else
  -        {
  -            log("Unreadable element: "+name);
  -            return false;
  -        }
  -
  -        addTool(info);
  -        log("Added "+info.getClassname()+" as "+info.getKey());
  -        return true;
  -    }
  -
  -
  -    /**
  -     * Reads the value for create-session.
  -     *
  -     * @see #setCreateSession(boolean)
  -     */
  -    protected boolean readCreateSession(Element e) throws Exception
  -    {
  -        String csValue = e.getText();
  -        if (VALUE_YES.equalsIgnoreCase(csValue))
  -        {
  -            setCreateSession(true);
  -        }
  -        else if (VALUE_NO.equalsIgnoreCase(csValue))
  -        {
  -            setCreateSession(false);
  -        }
  -        else
  -        {
  -            log("Unknown value for create-session.  Valid options are 'yes' or 'no'.");
  -            return false;
  -        }
  -        log("create-session is set to "+createSession);
  -        return true;
  -    }
  -
  +    // ------------------------------ XMLToolboxManager Overrides -------------
   
  -    /**
  -     * Overrides XMLToolboxManager to read a {@link ServletToolInfo}
  -     * instead of a {@link org.apache.velocity.tools.view.ViewToolInfo}.
  -     */
  -    protected ToolInfo readToolInfo(Element e) throws Exception
  +    protected RuleSet getRuleSet()
       {
  -        Node n = e.selectSingleNode(ELEMENT_KEY);
  -        String key = n.getText();
  -
  -        n = e.selectSingleNode(ELEMENT_CLASS);
  -        String classname = n.getText();
  -        
  -        String scope = ServletToolInfo.REQUEST_SCOPE;
  -        n = e.selectSingleNode(ELEMENT_SCOPE);
  -        if (n != null)
  -        {
  -            scope = n.getText();
  -        }
  -
  -        return new ServletToolInfo(key, classname, scope);
  +        return servletRuleSet;
       }
   
   
  @@ -374,15 +292,15 @@
           {
               ServletToolInfo stInfo = (ServletToolInfo)info;
               
  -            if (stInfo.getScope().equalsIgnoreCase(ServletToolInfo.REQUEST_SCOPE))
  +            if (REQUEST_SCOPE.equalsIgnoreCase(stInfo.getScope()))
               {
                   requestToolInfo.add(stInfo);
               }
  -            else if (stInfo.getScope().equalsIgnoreCase(ServletToolInfo.SESSION_SCOPE))
  +            else if (SESSION_SCOPE.equalsIgnoreCase(stInfo.getScope()))
               {
                   sessionToolInfo.add(stInfo);
               }
  -            else if (stInfo.getScope().equalsIgnoreCase(ServletToolInfo.APPLICATION_SCOPE))
  +            else if (APPLICATION_SCOPE.equalsIgnoreCase(stInfo.getScope()))
               {
                   //add application scoped tools to appTools and
                   //initialize them with the ServletContext
  @@ -390,7 +308,9 @@
               }
               else
               {
  -                log("Unknown scope: "+stInfo.getScope()+" "+stInfo.getKey()+" will be request scoped.");
  +                Velocity.warn("ServletToolboxManager: Unknown scope '" +
  +                              stInfo.getScope() + "' - " + stInfo.getKey() + 
  +                              " will be request scoped.");
                   requestToolInfo.add(stInfo);
               }
           }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: velocity-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: velocity-dev-help@jakarta.apache.org