[jdom-interest] JDOMBean

Jason Hunter jhunter at collab.net
Wed Jun 21 12:10:46 PDT 2000


Looks slick, Alex.  I'll be happy to put it in the contrib directory. 
Could you please complete the Javadoc comments (including adding the
usage to the class Javadoc entry), put it under our standard license,
and send it to me?  The package org.jdom.contrib.jsp sounds like a good
place to put it.  (I'll move the other contribs under org.jdom.contrib
as well.)

I'm thinking it might be smart to make a jdom-contrib module with write
access for people involved in contributed projects.  We're already
planning a jdom-test module to host the testing effort.  Any opinions?

-jh-

Alex Chaffee wrote:
> 
> Here's a bean I just whipped up so you can easily use JDOM in a
> Servlet or JSP.  It's a light wrapper that also keeps a cache of
> already-parsed files, and checks to see if they've changed on disk,
> and reloads if they have.  (I know there's some sort of swap-out or
> weak-reference stuff either in JDOM or coming soon, so this may be a
> redundant feature.)
> 
> Usage in JSP (take your pick):
> 
> <jsp:useBean id="jdom" class="JDOMBean" scope="application">
>  <% jdom.setFileRoot(application.getRealPath("")); %>
> </jsp:useBean>
> 
> or
> 
> <jsp:useBean id="jdom" class="JDOMBean" scope="application">
>  <jsp:setProperty name="jdom" property="fileRoot" value='<%=application.getRealPath("")%>' />
> </jsp:useBean>
> 
> then
> 
> <%
> Element root = jdom.getRootElement("news.xml");
> %>
> 
> or
> 
> <%
> Document doc = jdom.getDocument("news.xml");
> %>
> 
> and you're playing with JDOM.
> 
> You can also set the parser in the constructor (maybe it should be a
> property too).
> 
> So, does this qualify for the contrib directory?
> 
>  - Alex
> 
> --
> Alex Chaffee                       mailto:alex at jguru.com
> jGuru - Java News and FAQs         http://www.jguru.com/alex/
> Creator of Gamelan                 http://www.gamelan.com/
> Founder of Purple Technology       http://www.purpletech.com/
> Curator of Stinky Art Collective   http://www.stinky.com/
> 
> import java.io.File;
> import java.io.IOException;
> import java.io.PrintStream;
> import java.util.Iterator;
> import java.util.*;
> import org.jdom.Document;
> import org.jdom.Element;
> import org.jdom.JDOMException;
> import org.jdom.input.SAXBuilder;
> import org.jdom.output.XMLOutputter;
> 
> public class JDOMBean {
> 
>     /** Default SAX Driver class to use */
>     private static final String DEFAULT_SAX_DRIVER_CLASS =
>         "org.apache.xerces.parsers.SAXParser";
> 
>     /** SAX Driver Class to use */
>     private String saxDriverClass = DEFAULT_SAX_DRIVER_CLASS;
> 
>     /** <code>{@link SAXBuilder}</code> instance to use */
>     private SAXBuilder builder;
> 
>     /** file cache **/
>     private Map files = new HashMap();
> 
>     /** where to locate files **/
>     private File fileRoot;
> 
>     public JDOMBean() {
>         init();
>     }
> 
>     public JDOMBean(String saxDriverClass) {
>         this.saxDriverClass = saxDriverClass;
>         init();
>     }
> 
>     /**
>      * <p>
>      * This will create an instance of <code>{@link SAXBuilder}</code>
>      *   for use in the rest of this program.
>      * </p>
>      *
>      * @param saxDriverClass <code>String</code> name of driver class to use.
>      */
>     public void init() {
>         builder = new SAXBuilder(saxDriverClass);
>     }
> 
>     // todo: pathname normalization (remove ./ and foo/../ and so forth)
>     public Document getDocument(String filename) throws JDOMException {
>         FileInfo info = (FileInfo) files.get(filename);
>         File file = getFile(filename);
>         if (info == null ||
>             info.modified < file.lastModified())
>         {
>             Document doc = builder.build(file);
>             info = new FileInfo(filename, file.lastModified(), doc);
>             files.put(filename, info);
>         }
>         return info.document;
>     }
> 
>     public Element getRootElement(String file) throws JDOMException {
>         Document doc = getDocument(file);
>         if (doc != null) return doc.getRootElement();
>         return null;
>     }
> 
>     public void setFileRoot(String root) {
>         if (!root.endsWith("/")) {
>             root = root + "/";
>         }
>         this.fileRoot = new File(root);
>     }
> 
>     public String getFileRoot() {
>         if (fileRoot == null) return null;
>         else return fileRoot.getAbsolutePath();
>     }
> 
>     private File getFile(String filename) {
>         File file;
>         if (fileRoot == null) {
>             return new File(filename);
>         }
>         else {
>             return new File(fileRoot, filename);
>         }
>     }
> 
>     class FileInfo {
>         String name;
>         long modified;
>         Document document;
>         public FileInfo(String name, long modified, Document document) {
>             this.name = name;
>             this.modified = modified;
>             this.document = document;
>         }
>     }
> 
>     // test
>     public static void main(String[] args) throws IOException, JDOMException {
>         int i=0;
>         JDOMBean bean;
>         if (args[i].equals("-parser")) {
>             ++i;
>             bean = new JDOMBean(args[i]);
>             i++;
>         }
>         else {
>             bean = new JDOMBean();
>         }
> 
>         XMLOutputter out = new XMLOutputter();
> 
>         for (; i<args.length; ++i) {
>             Document doc = bean.getDocument(args[i]);
>             out.output(doc, System.out);
>         }
>     }
> 
> }
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhost.com



More information about the jdom-interest mailing list