View Javadoc

1   package org.andromda.core.common;
2   
3   import java.util.ArrayList;
4   import java.util.Collection;
5   import java.util.Iterator;
6   import java.util.StringTokenizer;
7   
8   /***
9    * A utility object useful for formatting html paragraph output.
10   * 
11   * <p> Represents a paragraph, made of lines. The whole
12   * paragraph has a limit for the line width.
13   * Words can be added, the class will reformat the
14   * paragraph according to max. line width. </p>
15   * 
16   * @author Matthias Bohlen
17   *
18   */
19  public class HTMLParagraph
20  {
21      private ArrayList lines = new ArrayList();
22      private StringBuffer currentLine = new StringBuffer();
23      private int maxLineWidth;
24  
25      /***
26       * <p>Constructs an HTMLParagraph with a specified maximum line
27       * width.</p>
28       * @param lineWidth maximum line width
29       */
30      public HTMLParagraph(int lineWidth)
31      {
32          this.maxLineWidth = lineWidth;
33      }
34  
35      /***
36       * <p>Appends another word to this paragraph.</p>
37       * @param word the word
38       */
39      public void appendWord(String word)
40      {
41          if ((currentLine.length() + word.length() + 1) > maxLineWidth)
42          {
43              nextLine();
44          }
45          currentLine.append(" ");
46          currentLine.append(word);
47      }
48  
49      /***
50       * <p>Appends a bunch of words to the paragraph.</p>
51       * @param text the text to add to the paragraph
52       */
53      public void appendText(String text)
54      {
55          if ((currentLine.length() + text.length() + 1) <= maxLineWidth)
56          {
57              currentLine.append(" ");
58              currentLine.append(text);
59              return;
60          }
61  
62          StringTokenizer st = new StringTokenizer(text);
63          while (st.hasMoreTokens())
64          {
65              appendWord(st.nextToken());
66          }
67      }
68  
69      /***
70       * <p>Returns the lines in this paragraph.</p>
71       * @return Collection the lines as collection of Strings
72       */
73      public Collection getLines()
74      {
75          if (currentLine.length() > 0)
76          {
77              nextLine();
78          }
79          
80          return lines;
81      }
82      
83      /***
84       * @see java.lang.Object#toString()
85       */
86      public String toString()
87      {
88          StringBuffer st = new StringBuffer();
89          for (Iterator it = getLines().iterator();  it.hasNext(); )
90          {
91              st.append((String)it.next());
92              st.append("\n");
93          }
94          return st.toString();
95      }
96  
97      private void nextLine()
98      {
99          lines.add(currentLine.toString());
100         currentLine = new StringBuffer();
101     }
102 }