4 * Copyright(c) 2008 olyutorskii
\r
7 package jp.sourceforge.jindolf.archiver;
\r
9 import java.io.IOException;
\r
10 import java.io.Writer;
\r
11 import java.net.URI;
\r
12 import java.util.LinkedList;
\r
13 import java.util.List;
\r
14 import jp.sourceforge.jindolf.corelib.DisclosureType;
\r
15 import jp.sourceforge.jindolf.corelib.SysEventType;
\r
16 import jp.sourceforge.jindolf.parser.DecodedContent;
\r
21 public class PeriodData{
\r
23 private final VillageData parent;
\r
24 private final PeriodResource resource;
\r
25 private DecodedContent loginName = new DecodedContent("");
\r
26 private int commitMonth;
\r
27 private int commitDay;
\r
28 private int commitHour;
\r
29 private int commitMinute;
\r
30 private DisclosureType disclosureType = DisclosureType.HOT;
\r
31 private boolean hasMurderResult = false;
\r
33 private final List<TopicData> topicList = new LinkedList<TopicData>();
\r
38 * @param resource ロード元情報
\r
40 public PeriodData(VillageData parent, PeriodResource resource){
\r
42 this.parent = parent;
\r
43 this.resource = resource;
\r
51 public DecodedContent getLoginName(){
\r
52 return this.loginName;
\r
57 * @param loginName ログイン名
\r
59 public void setLoginName(DecodedContent loginName){
\r
60 this.loginName = loginName;
\r
68 public int getCommitMonth(){
\r
69 return this.commitMonth;
\r
74 * @param commitMonth コミット月
\r
76 public void setCommitMonth(int commitMonth){
\r
77 this.commitMonth = commitMonth;
\r
85 public int getCommitDay(){
\r
86 return this.commitDay;
\r
91 * @param commitDay コミット日
\r
93 public void setCommitDay(int commitDay){
\r
94 this.commitDay = commitDay;
\r
102 public int getCommitHour(){
\r
103 return this.commitHour;
\r
108 * @param commitHour コミット時
\r
110 public void setCommitHour(int commitHour){
\r
111 this.commitHour = commitHour;
\r
119 public int getCommitMinute(){
\r
120 return this.commitMinute;
\r
125 * @param commitMinute コミット分
\r
127 public void setCommitMinute(int commitMinute){
\r
128 this.commitMinute = commitMinute;
\r
136 public DisclosureType getDisclosureType(){
\r
137 return this.disclosureType;
\r
144 public void setDisclosureType(DisclosureType type){
\r
145 this.disclosureType = type;
\r
150 * 襲撃結果イベントが既に格納されているか確認する。
\r
151 * @return 襲撃結果があればtrue
\r
153 public boolean hasMurderResult(){
\r
154 return this.hasMurderResult;
\r
160 * @param topicData TopiData
\r
162 public void addTopicData(TopicData topicData){
\r
163 this.topicList.add(topicData);
\r
165 if(topicData instanceof EventData){
\r
166 EventData event = (EventData) topicData;
\r
167 SysEventType type = event.getEventType();
\r
168 if( type == SysEventType.MURDERED
\r
169 || type == SysEventType.NOMURDER){
\r
170 this.hasMurderResult = true;
\r
178 * period要素をXML出力する。
\r
179 * @param writer 出力先
\r
180 * @throws IOException 出力エラー
\r
182 public void dumpXml(Writer writer) throws IOException{
\r
183 writer.append("<period\n");
\r
186 switch(this.resource.getPeriodType()){
\r
188 ptype = "prologue";
\r
191 ptype = "progress";
\r
194 ptype = "epilogue";
\r
197 throw new IllegalArgumentException();
\r
200 XmlUtils.indent(writer, 1);
\r
201 XmlUtils.attrOut(writer, "type", ptype);
\r
203 writer.append(' ');
\r
204 XmlUtils.attrOut(writer,
\r
205 "day", Integer.toString(this.resource.getDay()));
\r
206 writer.append('\n');
\r
208 if(this.disclosureType != DisclosureType.COMPLETE){
\r
209 XmlUtils.indent(writer, 1);
\r
210 XmlUtils.attrOut(writer,
\r
211 "disclosure", this.disclosureType.getXmlName());
\r
212 writer.append('\n');
\r
215 XmlUtils.indent(writer, 1);
\r
216 XmlUtils.dateAttrOut(writer, "nextCommitDay",
\r
217 this.commitMonth, this.commitDay);
\r
219 writer.append(' ');
\r
220 XmlUtils.timeAttrOut(writer,
\r
222 this.commitHour, this.commitMinute);
\r
223 writer.append('\n');
\r
225 URI baseUri = URI.create(this.parent.getBaseUri());
\r
226 URI periodUri = URI.create(this.resource.getOrigUrlText());
\r
227 URI relativeUri = baseUri.relativize(periodUri);
\r
228 XmlUtils.indent(writer, 1);
\r
229 XmlUtils.attrOut(writer, "sourceURI", relativeUri.toString());
\r
230 writer.append('\n');
\r
232 long downTimeMs = this.resource.getDownTimeMs();
\r
233 XmlUtils.indent(writer, 1);
\r
234 XmlUtils.dateTimeAttr(writer, "loadedTime", downTimeMs);
\r
235 writer.append('\n');
\r
237 if(this.loginName.length() > 0){
\r
238 XmlUtils.indent(writer, 1);
\r
239 XmlUtils.attrOut(writer, "loadedBy", this.loginName.toString());
\r
240 writer.append('\n');
\r
243 writer.append(">\n\n");
\r
245 for(TopicData topic : this.topicList){
\r
246 topic.dumpXml(writer);
\r
247 writer.append('\n');
\r
251 writer.append("</period>\n");
\r