View Javadoc

1   package org.andromda.core.common;
2   
3   import java.io.IOException;
4   import java.io.StringReader;
5   import java.util.ArrayList;
6   import java.util.Collection;
7   
8   import javax.swing.text.MutableAttributeSet;
9   import javax.swing.text.html.HTML.Tag;
10  import javax.swing.text.html.HTMLEditorKit.ParserCallback;
11  import javax.swing.text.html.parser.ParserDelegator;
12  
13  
14  /***
15   * A utility object useful for reading an HTML string (originating 
16   * from the contents of an XMI documentation element) and for translating
17   * that string into an HTML paragraph.
18   * 
19   * <p> The list of paragraphs can be used in a Velocity template
20   * to generate JavaDoc documentation for a class, an attribute or a 
21   * method. </p>
22   * 
23   * <p> This is a very simple HTML analyzer class that builds upon the
24   * Swing HTMLEditor toolkit. </p>
25   *  
26   * @author Matthias Bohlen
27   *
28   */
29  public class HTMLAnalyzer
30  {
31      /***
32       * <p>Translates an HTML string into a list of HTMLParagraphs.</p>
33       * @param html the HTML string to be analyzed
34       * @return Collection the list of paragraphs found in the HTML string
35       * @throws IOException if something goes wrong
36       */
37      public Collection htmlToParagraphs(String html) throws IOException
38      {
39          ParserDelegator pd = new ParserDelegator();
40          pd.parse(new StringReader(html), new MyParserCallback(), true);
41          return paragraphs;
42      }
43  
44      private ArrayList paragraphs = new ArrayList();
45  
46      private class MyParserCallback extends ParserCallback
47      {
48          private HTMLParagraph currentParagraph = null;
49  
50          public void handleSimpleTag(
51              Tag tag,
52              MutableAttributeSet attribs,
53              int pos)
54          {
55              appendWord("<" + tag + ">");
56          }
57  
58          public void handleStartTag(
59              Tag tag,
60              MutableAttributeSet attribs,
61              int pos)
62          {
63              if (tag.equals(Tag.P))
64              {
65                  currentParagraph = new HTMLParagraph(66);
66              }
67              else
68              {
69                  appendWord("<" + tag + ">");
70              }
71          }
72  
73          public void handleEndTag(Tag tag, int pos)
74          {
75              if (tag.equals(Tag.P))
76              {
77                  paragraphs.add(currentParagraph);
78                  currentParagraph = null;
79              }
80              else
81              {
82                  appendWord("</" + tag + ">");
83              }
84          }
85  
86          public void handleText(char[] text, int pos)
87          {
88              appendText(text);
89          }
90          
91          private void appendWord(String string)
92          {
93              if (currentParagraph != null)
94              {
95                  currentParagraph.appendWord(string);
96              }
97          }
98  
99          private void appendText(String string)
100         {
101             if (currentParagraph != null)
102             {
103                 currentParagraph.appendText(string);
104             }
105         }
106 
107         private void appendText(char[] text)
108         {
109             if (currentParagraph != null)
110             {
111                 currentParagraph.appendText(new String(text));
112             }
113         }
114     }
115 }