KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > java > plugin > tools > docgen > ClassPathPageSource


1 package org.java.plugin.tools.docgen;
2
3 import java.io.IOException JavaDoc;
4 import java.io.InputStreamReader JavaDoc;
5
6 import org.onemind.commons.java.util.FileUtils;
7 import org.onemind.jxp.CachedJxpPage;
8 import org.onemind.jxp.CachingPageSource;
9 import org.onemind.jxp.JxpPage;
10 import org.onemind.jxp.JxpPageNotFoundException;
11 import org.onemind.jxp.JxpPageParseException;
12 import org.onemind.jxp.parser.AstJxpDocument;
13 import org.onemind.jxp.parser.JxpParser;
14 import org.onemind.jxp.parser.ParseException;
15
16 /**
17  * JXP page source configured to load templates from the classpath.
18  * @version $Id: ClassPathPageSource.java,v 1.3 2005/09/18 11:53:30 ddimon Exp $
19  */

20 final class ClassPathPageSource extends CachingPageSource {
21     private final String JavaDoc base;
22     private final ClassLoader JavaDoc cl;
23     private final String JavaDoc encoding;
24
25     ClassPathPageSource(final String JavaDoc aBase, final String JavaDoc anEncoding) {
26         super();
27         base = aBase;
28         encoding = anEncoding;
29         cl = getClass().getClassLoader();
30     }
31
32     /**
33      * @see org.onemind.jxp.CachingPageSource#loadJxpPage(java.lang.String)
34      */

35     protected CachedJxpPage loadJxpPage(final String JavaDoc id)
36             throws JxpPageNotFoundException {
37         if (!hasJxpPage(id)) {
38             throw new JxpPageNotFoundException("page " + id + " not found"); //$NON-NLS-1$ //$NON-NLS-2$
39
}
40         return new CachedJxpPage(this, id);
41     }
42
43     /**
44      * @see org.onemind.jxp.CachingPageSource#parseJxpDocument(
45      * org.onemind.jxp.JxpPage)
46      */

47     protected AstJxpDocument parseJxpDocument(final JxpPage page)
48             throws JxpPageParseException {
49         try {
50             JxpParser parser;
51             if (encoding == null) {
52                 parser = new JxpParser(cl.getResourceAsStream(
53                         getStreamName(page.getName())));
54             } else {
55                 parser = new JxpParser(new InputStreamReader JavaDoc(
56                         cl.getResourceAsStream(getStreamName(page.getName())),
57                         encoding));
58             }
59             return parser.JxpDocument();
60         } catch (IOException JavaDoc ioe) {
61             throw new JxpPageParseException("problem parsing page " //$NON-NLS-1$
62
+ page.getName() + ": " + ioe.getMessage(), ioe); //$NON-NLS-1$
63
} catch (ParseException pe) {
64             throw new JxpPageParseException("problem parsing page " //$NON-NLS-1$
65
+ page.getName() + ": " + pe.getMessage(), pe); //$NON-NLS-1$
66
}
67     }
68
69     /**
70      * @see org.onemind.jxp.JxpPageSource#hasJxpPage(java.lang.String)
71      */

72     public boolean hasJxpPage(final String JavaDoc id) {
73         if (isJxpPageCached(id)) {
74             return true;
75         }
76         return cl.getResource(getStreamName(id)) != null;
77     }
78     
79     private String JavaDoc getStreamName(final String JavaDoc pageName) {
80         return FileUtils.concatFilePath(base, pageName);
81     }
82 }
83
Popular Tags