OSDN Git Service

c945cd3424a5d705482e9163483c1b40854d636c
[jindolf/JinArchiver.git] / src / main / java / jp / sourceforge / jindolf / archiver / TopicData.java
1 /*\r
2  * topic data\r
3  *\r
4  * Copyright(c) 2008 olyutorskii\r
5  */\r
6 \r
7 package jp.sourceforge.jindolf.archiver;\r
8 \r
9 import java.io.IOException;\r
10 import java.io.Writer;\r
11 import java.util.LinkedList;\r
12 import java.util.List;\r
13 import jp.sourceforge.jindolf.parser.DecodedContent;\r
14 \r
15 /**\r
16  * テキスト行の集合。\r
17  */\r
18 public abstract class TopicData{\r
19 \r
20     private static final DecodedContent BREAK = new DecodedContent("\n");\r
21 \r
22     private final List<DecodedContent> lineList =\r
23             new LinkedList<DecodedContent>();\r
24 \r
25     /**\r
26      * コンストラクタ。\r
27      */\r
28     protected TopicData(){\r
29         super();\r
30         return;\r
31     }\r
32 \r
33     /**\r
34      * 行を追加する。\r
35      * @param content 行を構成する文字列\r
36      */\r
37     public void addLine(DecodedContent content){\r
38         this.lineList.add(content);\r
39         return;\r
40     }\r
41 \r
42     /**\r
43      * 行ブレークを追加する。\r
44      */\r
45     public void addBreak(){\r
46         this.lineList.add(BREAK);\r
47         return;\r
48     }\r
49 \r
50     /**\r
51      * 行数を取得する。\r
52      * @return 行数\r
53      */\r
54     public int getLineNum(){\r
55         return this.lineList.size();\r
56     }\r
57 \r
58     /**\r
59      * 最初の行を取得する。\r
60      * @return 最初の行\r
61      */\r
62     public DecodedContent get1stLine(){\r
63         return this.lineList.get(0);\r
64     }\r
65 \r
66     /**\r
67      * 1行li要素をXML出力する。\r
68      * @param writer 出力先\r
69      * @throws IOException 出力エラー\r
70      */\r
71     public void dumpLines(Writer writer) throws IOException{\r
72         DecodedContent lastLine = null;\r
73         DecodedContent lastContent = null;\r
74 \r
75         for(DecodedContent content : this.lineList){\r
76             lastContent = content;\r
77             if(content == BREAK){\r
78                 if(lastLine != null){\r
79                     writer.append("</li>\n");\r
80                     lastLine = null;\r
81                 }else{\r
82                     writer.append("<li/>\n");\r
83                 }\r
84             }else{\r
85                 if(lastLine == null){\r
86                     writer.append("<li>");\r
87                 }\r
88                 XmlUtils.dumpDecodedContent(writer, content);\r
89                 lastLine = content;\r
90             }\r
91         }\r
92 \r
93         if(lastLine != null){\r
94             writer.append("</li>\n");\r
95         }else if(lastContent == BREAK){\r
96             writer.append("<li/>\n");\r
97         }\r
98 \r
99         return;\r
100     }\r
101 \r
102     /**\r
103      * 要素をXML出力する。\r
104      * @param writer 出力先\r
105      * @throws IOException 出力エラー\r
106      */\r
107     public abstract void dumpXml(Writer writer) throws IOException;\r
108 \r
109 }\r