OSDN Git Service

checkstyleに対処
[jindolf/JinArchiver.git] / src / main / java / jp / sourceforge / jindolf / archiver / Handler.java
1 /*\r
2  * parse handler\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.util.regex.Matcher;\r
10 import java.util.regex.Pattern;\r
11 import jp.sourceforge.jindolf.corelib.DisclosureType;\r
12 import jp.sourceforge.jindolf.corelib.EventFamily;\r
13 import jp.sourceforge.jindolf.corelib.GameRole;\r
14 import jp.sourceforge.jindolf.corelib.LandDef;\r
15 import jp.sourceforge.jindolf.corelib.PeriodType;\r
16 import jp.sourceforge.jindolf.corelib.SysEventType;\r
17 import jp.sourceforge.jindolf.corelib.TalkType;\r
18 import jp.sourceforge.jindolf.corelib.Team;\r
19 import jp.sourceforge.jindolf.corelib.VillageTag;\r
20 import jp.sourceforge.jindolf.parser.DecodedContent;\r
21 import jp.sourceforge.jindolf.parser.EntityConverter;\r
22 import jp.sourceforge.jindolf.parser.HtmlAdapter;\r
23 import jp.sourceforge.jindolf.parser.HtmlParseException;\r
24 import jp.sourceforge.jindolf.parser.PageType;\r
25 import jp.sourceforge.jindolf.parser.SeqRange;\r
26 \r
27 /**\r
28  * パーサ用ハンドラ。\r
29  */\r
30 public class Handler extends HtmlAdapter{\r
31 \r
32     private static final Pattern MURDER_PATTERN =\r
33             Pattern.compile("^(.*)\u0020!\u0020今日がお前の命日だ!$");\r
34 \r
35     private final EntityConverter converter = new EntityConverter();\r
36 \r
37     private VillageData villageData = null;\r
38     private String pageTitle = null;\r
39 \r
40     private PeriodData currentPeriod = null;\r
41     private PeriodResource currentResource = null;\r
42 \r
43     private TalkData currentTalk = null;\r
44     private EventData currentEvent = null;\r
45 \r
46     /**\r
47      * コンストラクタ。\r
48      */\r
49     public Handler(){\r
50         super();\r
51         return;\r
52     }\r
53 \r
54     /**\r
55      * 村情報を初期化。\r
56      * @param villageDataArg 村情報\r
57      */\r
58     public void initVillageData(VillageData villageDataArg){\r
59         this.villageData = villageDataArg;\r
60         this.currentPeriod = null;\r
61         this.pageTitle = null;\r
62         return;\r
63     }\r
64 \r
65     /**\r
66      * Periodリソース情報を初期化。\r
67      * @param resource リソース情報\r
68      */\r
69     public void initPeriodResource(PeriodResource resource){\r
70         this.currentResource = resource;\r
71         return;\r
72     }\r
73 \r
74     /**\r
75      * {@inheritDoc}\r
76      * @param content {@inheritDoc}\r
77      * @throws HtmlParseException {@inheritDoc}\r
78      */\r
79     @Override\r
80     public void startParse(DecodedContent content) throws HtmlParseException{\r
81         if(this.villageData == null) throw new HtmlParseException();\r
82         this.currentPeriod =\r
83                 new PeriodData(this.villageData, this.currentResource);\r
84         return;\r
85     }\r
86 \r
87     /**\r
88      * {@inheritDoc}\r
89      * @param content {@inheritDoc}\r
90      * @param titleRange {@inheritDoc}\r
91      * @throws HtmlParseException {@inheritDoc}\r
92      */\r
93     @Override\r
94     public void pageTitle(DecodedContent content, SeqRange titleRange)\r
95             throws HtmlParseException{\r
96         DecodedContent title = this.converter.convert(content, titleRange);\r
97         if(this.pageTitle == null){\r
98             this.pageTitle = title.toString();\r
99         }else{\r
100             if( ! this.pageTitle.contentEquals(title) ){\r
101                 throw new HtmlParseException();\r
102             }\r
103         }\r
104         return;\r
105     }\r
106 \r
107     /**\r
108      * {@inheritDoc}\r
109      * @param content {@inheritDoc}\r
110      * @param loginRange {@inheritDoc}\r
111      * @throws HtmlParseException {@inheritDoc}\r
112      */\r
113     @Override\r
114     public void loginName(DecodedContent content, SeqRange loginRange)\r
115             throws HtmlParseException{\r
116         DecodedContent account = this.converter.convert(content, loginRange);\r
117         this.currentPeriod.setLoginName(account);\r
118         return;\r
119     }\r
120 \r
121     /**\r
122      * {@inheritDoc}\r
123      * @param type {@inheritDoc}\r
124      * @throws HtmlParseException {@inheritDoc}\r
125      */\r
126     @Override\r
127     public void pageType(PageType type) throws HtmlParseException{\r
128         if(type != PageType.PERIOD_PAGE) throw new HtmlParseException();\r
129         return;\r
130     }\r
131 \r
132     /**\r
133      * {@inheritDoc}\r
134      * @param content {@inheritDoc}\r
135      * @param villageRange {@inheritDoc}\r
136      * @throws HtmlParseException {@inheritDoc}\r
137      */\r
138     @Override\r
139     public void villageName(DecodedContent content, SeqRange villageRange)\r
140             throws HtmlParseException{\r
141         String vName =\r
142                 this.converter.convert(content, villageRange).toString();\r
143         String fullName = this.villageData.getFullName();\r
144         if(fullName.length() <= 0){\r
145             if( ! this.pageTitle.endsWith(vName) ){\r
146                 throw new HtmlParseException();\r
147             }\r
148             Pattern ptn = Pattern.compile("^([^0-9]*)([0-9]+)\\s+(\\S+)$");\r
149             Matcher matcher = ptn.matcher(vName);\r
150             if( ! matcher.matches() ) throw new HtmlParseException();\r
151             String prefix = matcher.group(1);\r
152             String vid    = matcher.group(2);\r
153             String vtag   = matcher.group(3);\r
154             LandDef landDef = this.villageData.getLandDef();\r
155             if( ! prefix.equals(landDef.getLandPrefix()) ){\r
156                 throw new HtmlParseException();\r
157             }\r
158             if( Integer.parseInt(vid) != this.villageData.getVillageId() ){\r
159                 throw new HtmlParseException();\r
160             }\r
161             matcher.reset(vtag);\r
162             if(VillageTag.lookingAtVillageTag(matcher) == null){\r
163                 throw new HtmlParseException();\r
164             }\r
165             this.villageData.setFullName(vName);\r
166         }else{\r
167             if( ! vName.equals(fullName) ) throw new HtmlParseException();\r
168         }\r
169 \r
170         return;\r
171     }\r
172 \r
173     /**\r
174      * {@inheritDoc}\r
175      * @param month {@inheritDoc}\r
176      * @param day {@inheritDoc}\r
177      * @param hour {@inheritDoc}\r
178      * @param minute {@inheritDoc}\r
179      * @throws HtmlParseException {@inheritDoc}\r
180      */\r
181     @Override\r
182     public void commitTime(int month, int day, int hour, int minute)\r
183             throws HtmlParseException{\r
184         int commitHour   = this.villageData.getCommitHour();\r
185         int commitMinute = this.villageData.getCommitMinute();\r
186 \r
187         if(commitHour < 0){\r
188             this.villageData.setCommitHour(hour);\r
189         }else{\r
190             if(hour != commitHour) throw new HtmlParseException();\r
191         }\r
192 \r
193         if(commitMinute < 0){\r
194             this.villageData.setCommitMinute(minute);\r
195         }else{\r
196             if(minute != commitMinute) throw new HtmlParseException();\r
197         }\r
198 \r
199         this.currentPeriod.setCommitMonth(month);\r
200         this.currentPeriod.setCommitDay(day);\r
201         this.currentPeriod.setCommitHour(hour);\r
202         this.currentPeriod.setCommitMinute(minute);\r
203 \r
204         return;\r
205     }\r
206 \r
207     /**\r
208      * {@inheritDoc}\r
209      * @param content {@inheritDoc}\r
210      * @param anchorRange {@inheritDoc}\r
211      * @param periodType {@inheritDoc}\r
212      * @param day {@inheritDoc}\r
213      * @throws HtmlParseException {@inheritDoc}\r
214      */\r
215     @Override\r
216     public void periodLink(DecodedContent content,\r
217                             SeqRange anchorRange,\r
218                             PeriodType periodType,\r
219                             int day)\r
220             throws HtmlParseException{\r
221         if(anchorRange.isValid()){\r
222             DisclosureType newType;\r
223 \r
224             if(periodType == null){\r
225                 newType = DisclosureType.COMPLETE;\r
226             }else if(periodType == PeriodType.EPILOGUE\r
227                &&    this.currentResource.getPeriodType()\r
228                   != PeriodType.EPILOGUE){\r
229                 newType = DisclosureType.COMPLETE;\r
230             }else if(   periodType != PeriodType.PROLOGUE\r
231                &&    this.currentResource.getPeriodType()\r
232                   == PeriodType.PROLOGUE){\r
233                 newType = DisclosureType.COMPLETE;\r
234             }else{\r
235                 newType = DisclosureType.UNCOMPLETE;\r
236             }\r
237 \r
238             this.currentPeriod.setDisclosureType(newType);\r
239 \r
240             return;\r
241         }\r
242 \r
243         if(periodType != this.currentResource.getPeriodType()){\r
244             throw new HtmlParseException();\r
245         }\r
246 \r
247         if(periodType == PeriodType.PROGRESS\r
248                 && day != this.currentResource.getDay()){\r
249             throw new HtmlParseException();\r
250         }\r
251 \r
252         this.currentPeriod.setDisclosureType(DisclosureType.HOT);\r
253 \r
254         return;\r
255     }\r
256 \r
257     /**\r
258      * {@inheritDoc}\r
259      * @throws HtmlParseException {@inheritDoc}\r
260      */\r
261     @Override\r
262     public void startTalk() throws HtmlParseException{\r
263         this.currentTalk = new TalkData();\r
264         return;\r
265     }\r
266 \r
267     /**\r
268      * {@inheritDoc}\r
269      * @param content {@inheritDoc}\r
270      * @param avatarRange {@inheritDoc}\r
271      * @throws HtmlParseException {@inheritDoc}\r
272      */\r
273     @Override\r
274     public void talkAvatar(DecodedContent content, SeqRange avatarRange)\r
275             throws HtmlParseException{\r
276         DecodedContent avatarName =\r
277                 this.converter.convert(content, avatarRange);\r
278         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
279         this.currentTalk.setAvatarData(avatar);\r
280         return;\r
281     }\r
282 \r
283     /**\r
284      * {@inheritDoc}\r
285      * @param content {@inheritDoc}\r
286      * @param urlRange {@inheritDoc}\r
287      * @throws HtmlParseException {@inheritDoc}\r
288      */\r
289     @Override\r
290     public void talkIconUrl(DecodedContent content, SeqRange urlRange)\r
291             throws HtmlParseException{\r
292         DecodedContent faceIcon = this.converter.convert(content, urlRange);\r
293         this.currentTalk.setFaceIconUri(faceIcon.toString());\r
294         return;\r
295     }\r
296 \r
297     /**\r
298      * {@inheritDoc}\r
299      * @param content {@inheritDoc}\r
300      * @param idRange {@inheritDoc}\r
301      * @throws HtmlParseException {@inheritDoc}\r
302      */\r
303     @Override\r
304     public void talkId(DecodedContent content, SeqRange idRange)\r
305             throws HtmlParseException{\r
306         DecodedContent xname = this.converter.convert(content, idRange);\r
307         this.currentTalk.setXName(xname.toString());\r
308         return;\r
309     }\r
310 \r
311     /**\r
312      * {@inheritDoc}\r
313      * @param hour {@inheritDoc}\r
314      * @param minute {@inheritDoc}\r
315      * @throws HtmlParseException {@inheritDoc}\r
316      */\r
317     @Override\r
318     public void talkTime(int hour, int minute) throws HtmlParseException{\r
319         this.currentTalk.setHour(hour);\r
320         this.currentTalk.setMinute(minute);\r
321         return;\r
322     }\r
323 \r
324     /**\r
325      * {@inheritDoc}\r
326      * @param type {@inheritDoc}\r
327      * @throws HtmlParseException {@inheritDoc}\r
328      */\r
329     @Override\r
330     public void talkType(TalkType type) throws HtmlParseException{\r
331         this.currentTalk.setTalkType(type);\r
332         return;\r
333     }\r
334 \r
335     /**\r
336      * {@inheritDoc}\r
337      * @param content {@inheritDoc}\r
338      * @param textRange {@inheritDoc}\r
339      * @throws HtmlParseException {@inheritDoc}\r
340      */\r
341     @Override\r
342     public void talkText(DecodedContent content, SeqRange textRange)\r
343             throws HtmlParseException{\r
344         DecodedContent line = this.converter.convert(content, textRange);\r
345         this.currentTalk.addLine(line);\r
346         return;\r
347     }\r
348 \r
349     /**\r
350      * {@inheritDoc}\r
351      * @throws HtmlParseException {@inheritDoc}\r
352      */\r
353     @Override\r
354     public void talkBreak() throws HtmlParseException{\r
355         this.currentTalk.addBreak();\r
356         return;\r
357     }\r
358 \r
359     /**\r
360      * {@inheritDoc}\r
361      * @throws HtmlParseException {@inheritDoc}\r
362      */\r
363     @Override\r
364     public void endTalk() throws HtmlParseException{\r
365         String faceIcon = this.currentTalk.getFaceIconUri();\r
366         if(this.currentTalk.getTalkType() == TalkType.GRAVE){\r
367             this.villageData.setGraveIconUri(faceIcon);\r
368         }else{\r
369             AvatarData avatar = this.currentTalk.getAvatarData();\r
370             if(avatar.getFaceIconUri() == null){\r
371                 avatar.setFaceIconUri(faceIcon);\r
372             }\r
373         }\r
374 \r
375         if(   ! this.currentPeriod.hasMurderResult()\r
376            && this.currentTalk.getTalkType() == TalkType.WOLFONLY\r
377            && this.currentTalk.getLineNum() == 1){\r
378             DecodedContent line1st = this.currentTalk.get1stLine();\r
379             Matcher matcher = MURDER_PATTERN.matcher(line1st);\r
380             if(matcher.matches()){\r
381                 AvatarData byWhom = this.currentTalk.getAvatarData();\r
382                 String avatarName = matcher.group(1);\r
383                 AvatarData target =\r
384                         this.villageData.getAvatarData(avatarName);\r
385                 String xname = this.currentTalk.getXName();\r
386                 int hour = this.currentTalk.getHour();\r
387                 int minute = this.currentTalk.getMinute();\r
388                 String iconUri = this.currentTalk.getFaceIconUri();\r
389                 EventData event = new EventData(this.currentPeriod);\r
390                 event.setEventType(SysEventType.ASSAULT);\r
391                 event.addLine(line1st);\r
392                 event.addAvatarData(byWhom);\r
393                 event.addAvatarData(target);\r
394                 event.addDecodedContent(new DecodedContent(xname));\r
395                 event.addInteger(hour);\r
396                 event.addInteger(minute);\r
397                 event.addDecodedContent(new DecodedContent(iconUri));\r
398                 if(byWhom.getFaceIconUri() == null){\r
399                     byWhom.setFaceIconUri(iconUri);\r
400                 }\r
401                 this.currentPeriod.addTopicData(event);\r
402                 this.currentTalk = null;\r
403                 return;\r
404             }\r
405         }\r
406 \r
407         this.currentPeriod.addTopicData(this.currentTalk);\r
408         this.currentTalk = null;\r
409         return;\r
410     }\r
411 \r
412     /**\r
413      * {@inheritDoc}\r
414      * @param eventFamily {@inheritDoc}\r
415      * @throws HtmlParseException {@inheritDoc}\r
416      */\r
417     @Override\r
418     public void startSysEvent(EventFamily eventFamily)\r
419             throws HtmlParseException{\r
420         this.currentEvent = new EventData(this.currentPeriod);\r
421         return;\r
422     }\r
423 \r
424     /**\r
425      * {@inheritDoc}\r
426      * @param type {@inheritDoc}\r
427      * @throws HtmlParseException {@inheritDoc}\r
428      */\r
429     @Override\r
430     public void sysEventType(SysEventType type) throws HtmlParseException{\r
431         this.currentEvent.setEventType(type);\r
432         return;\r
433     }\r
434 \r
435     /**\r
436      * {@inheritDoc}\r
437      * @param content {@inheritDoc}\r
438      * @param contentRange {@inheritDoc}\r
439      * @throws HtmlParseException {@inheritDoc}\r
440      */\r
441     @Override\r
442     public void sysEventContent(DecodedContent content,\r
443                                   SeqRange contentRange)\r
444             throws HtmlParseException{\r
445         DecodedContent line = this.converter.convert(content, contentRange);\r
446         this.currentEvent.addLine(line);\r
447         return;\r
448     }\r
449 \r
450     /**\r
451      * {@inheritDoc}\r
452      * @param content {@inheritDoc}\r
453      * @param anchorRange {@inheritDoc}\r
454      * @param contentRange {@inheritDoc}\r
455      * @throws HtmlParseException {@inheritDoc}\r
456      */\r
457     @Override\r
458     public void sysEventContentAnchor(DecodedContent content,\r
459                                       SeqRange anchorRange,\r
460                                       SeqRange contentRange)\r
461             throws HtmlParseException{\r
462         DecodedContent line = this.converter.convert(content, contentRange);\r
463         this.currentEvent.addLine(line);\r
464         return;\r
465     }\r
466 \r
467     /**\r
468      * {@inheritDoc}\r
469      * @throws HtmlParseException {@inheritDoc}\r
470      */\r
471     @Override\r
472     public void sysEventContentBreak() throws HtmlParseException{\r
473         this.currentEvent.addBreak();\r
474         return;\r
475     }\r
476 \r
477     /**\r
478      * {@inheritDoc}\r
479      * @param content {@inheritDoc}\r
480      * @param entryNo {@inheritDoc}\r
481      * @param avatarRange {@inheritDoc}\r
482      * @throws HtmlParseException {@inheritDoc}\r
483      */\r
484     @Override\r
485     public void sysEventOnStage(DecodedContent content,\r
486                                   int entryNo,\r
487                                   SeqRange avatarRange)\r
488             throws HtmlParseException{\r
489         DecodedContent avatarName =\r
490                 this.converter.convert(content, avatarRange);\r
491         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
492         this.currentEvent.addAvatarData(avatar);\r
493         this.currentEvent.addInteger(entryNo);\r
494         return;\r
495     }\r
496 \r
497     /**\r
498      * {@inheritDoc}\r
499      * @param role {@inheritDoc}\r
500      * @param num {@inheritDoc}\r
501      * @throws HtmlParseException {@inheritDoc}\r
502      */\r
503     @Override\r
504     public void sysEventOpenRole(GameRole role, int num)\r
505             throws HtmlParseException{\r
506         this.currentEvent.addGameRole(role);\r
507         this.currentEvent.addInteger(num);\r
508         return;\r
509     }\r
510 \r
511     /**\r
512      * {@inheritDoc}\r
513      * @param content {@inheritDoc}\r
514      * @param avatarRange {@inheritDoc}\r
515      * @throws HtmlParseException {@inheritDoc}\r
516      */\r
517     @Override\r
518     public void sysEventMurdered(DecodedContent content,\r
519                                    SeqRange avatarRange)\r
520             throws HtmlParseException{\r
521         DecodedContent avatarName =\r
522                 this.converter.convert(content, avatarRange);\r
523         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
524         this.currentEvent.addAvatarData(avatar);\r
525         return;\r
526     }\r
527 \r
528     /**\r
529      * {@inheritDoc}\r
530      * @param content {@inheritDoc}\r
531      * @param avatarRange {@inheritDoc}\r
532      * @throws HtmlParseException {@inheritDoc}\r
533      */\r
534     @Override\r
535     public void sysEventSurvivor(DecodedContent content,\r
536                                    SeqRange avatarRange)\r
537             throws HtmlParseException{\r
538         DecodedContent avatarName =\r
539                 this.converter.convert(content, avatarRange);\r
540         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
541         this.currentEvent.addAvatarData(avatar);\r
542         return;\r
543     }\r
544 \r
545     /**\r
546      * {@inheritDoc}\r
547      * @param content {@inheritDoc}\r
548      * @param voteByRange {@inheritDoc}\r
549      * @param voteToRange {@inheritDoc}\r
550      * @throws HtmlParseException {@inheritDoc}\r
551      */\r
552     @Override\r
553     public void sysEventCounting(DecodedContent content,\r
554                                    SeqRange voteByRange,\r
555                                    SeqRange voteToRange)\r
556             throws HtmlParseException{\r
557         AvatarData avatar;\r
558 \r
559         if(voteByRange.isValid()){\r
560             DecodedContent voteBy =\r
561                     this.converter.convert(content, voteByRange);\r
562             avatar = this.villageData.getAvatarData(voteBy);\r
563             this.currentEvent.addAvatarData(avatar);\r
564         }\r
565 \r
566         DecodedContent voteTo =\r
567                 this.converter.convert(content, voteToRange);\r
568         avatar = this.villageData.getAvatarData(voteTo);\r
569         this.currentEvent.addAvatarData(avatar);\r
570 \r
571         return;\r
572     }\r
573 \r
574     /**\r
575      * {@inheritDoc}\r
576      * @param content {@inheritDoc}\r
577      * @param voteByRange {@inheritDoc}\r
578      * @param voteToRange {@inheritDoc}\r
579      * @throws HtmlParseException {@inheritDoc}\r
580      */\r
581     @Override\r
582     public void sysEventCounting2(DecodedContent content,\r
583                                     SeqRange voteByRange,\r
584                                     SeqRange voteToRange)\r
585             throws HtmlParseException{\r
586         AvatarData avatar;\r
587 \r
588         DecodedContent voteBy =\r
589                 this.converter.convert(content, voteByRange);\r
590         avatar = this.villageData.getAvatarData(voteBy);\r
591         this.currentEvent.addAvatarData(avatar);\r
592 \r
593         DecodedContent voteTo =\r
594                 this.converter.convert(content, voteToRange);\r
595         avatar = this.villageData.getAvatarData(voteTo);\r
596         this.currentEvent.addAvatarData(avatar);\r
597 \r
598         return;\r
599     }\r
600 \r
601     /**\r
602      * {@inheritDoc}\r
603      * @param content {@inheritDoc}\r
604      * @param avatarRange {@inheritDoc}\r
605      * @throws HtmlParseException {@inheritDoc}\r
606      */\r
607     @Override\r
608     public void sysEventSuddenDeath(DecodedContent content,\r
609                                        SeqRange avatarRange)\r
610             throws HtmlParseException{\r
611         DecodedContent avatarName =\r
612                 this.converter.convert(content, avatarRange);\r
613         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
614         this.currentEvent.addAvatarData(avatar);\r
615         return;\r
616     }\r
617 \r
618     /**\r
619      * {@inheritDoc}\r
620      * @param content {@inheritDoc}\r
621      * @param avatarRange {@inheritDoc}\r
622      * @param anchorRange {@inheritDoc}\r
623      * @param loginRange {@inheritDoc}\r
624      * @param isLiving {@inheritDoc}\r
625      * @param role {@inheritDoc}\r
626      * @throws HtmlParseException {@inheritDoc}\r
627      */\r
628     @Override\r
629     public void sysEventPlayerList(DecodedContent content,\r
630                                       SeqRange avatarRange,\r
631                                       SeqRange anchorRange,\r
632                                       SeqRange loginRange,\r
633                                       boolean isLiving,\r
634                                       GameRole role)\r
635             throws HtmlParseException{\r
636         DecodedContent avatarName =\r
637                 this.converter.convert(content, avatarRange);\r
638         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
639         this.currentEvent.addAvatarData(avatar);\r
640 \r
641         DecodedContent uri;\r
642         if(anchorRange.isValid()){\r
643             uri = this.converter.convert(content, anchorRange);\r
644         }else{\r
645             uri = new DecodedContent("");\r
646         }\r
647         Win31j.supplyWin31jChar(uri);\r
648         this.currentEvent.addDecodedContent(uri);\r
649 \r
650         DecodedContent account =\r
651                 this.converter.convert(content, loginRange);\r
652         Win31j.supplyWin31jChar(account);\r
653         this.currentEvent.addDecodedContent(account);\r
654 \r
655         if(isLiving) this.currentEvent.addInteger(1);\r
656         else         this.currentEvent.addInteger(0);\r
657 \r
658         this.currentEvent.addGameRole(role);\r
659 \r
660         return;\r
661     }\r
662 \r
663     /**\r
664      * {@inheritDoc}\r
665      * @param hour {@inheritDoc}\r
666      * @param minute {@inheritDoc}\r
667      * @param minLimit {@inheritDoc}\r
668      * @param maxLimit {@inheritDoc}\r
669      * @throws HtmlParseException {@inheritDoc}\r
670      */\r
671     @Override\r
672     public void sysEventAskEntry(int hour, int minute,\r
673                                  int minLimit, int maxLimit)\r
674             throws HtmlParseException{\r
675         this.currentEvent.addInteger(hour);\r
676         this.currentEvent.addInteger(minute);\r
677         this.currentEvent.addInteger(minLimit);\r
678         this.currentEvent.addInteger(maxLimit);\r
679         return;\r
680     }\r
681 \r
682     /**\r
683      * {@inheritDoc}\r
684      * @param hour {@inheritDoc}\r
685      * @param minute {@inheritDoc}\r
686      * @throws HtmlParseException {@inheritDoc}\r
687      */\r
688     @Override\r
689     public void sysEventAskCommit(int hour, int minute)\r
690             throws HtmlParseException{\r
691         this.currentEvent.addInteger(hour);\r
692         this.currentEvent.addInteger(minute);\r
693         return;\r
694     }\r
695 \r
696     /**\r
697      * {@inheritDoc}\r
698      * @param content {@inheritDoc}\r
699      * @param avatarRange {@inheritDoc}\r
700      * @throws HtmlParseException {@inheritDoc}\r
701      */\r
702     @Override\r
703     public void sysEventNoComment(DecodedContent content,\r
704                                   SeqRange avatarRange)\r
705             throws HtmlParseException{\r
706         DecodedContent avatarName;\r
707         avatarName = this.converter.convert(content, avatarRange);\r
708         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
709         this.currentEvent.addAvatarData(avatar);\r
710         return;\r
711     }\r
712 \r
713     /**\r
714      * {@inheritDoc}\r
715      * @param winner {@inheritDoc}\r
716      * @param hour {@inheritDoc}\r
717      * @param minute {@inheritDoc}\r
718      * @throws HtmlParseException {@inheritDoc}\r
719      */\r
720     @Override\r
721     public void sysEventStayEpilogue(Team winner,\r
722                                      int hour, int minute)\r
723             throws HtmlParseException{\r
724         GameRole role;\r
725         switch(winner){\r
726         case VILLAGE: role = GameRole.INNOCENT; break;\r
727         case WOLF:    role = GameRole.WOLF;     break;\r
728         case HAMSTER: role = GameRole.HAMSTER;  break;\r
729         default: throw new IllegalArgumentException();\r
730         }\r
731 \r
732         this.currentEvent.addGameRole(role);\r
733         this.currentEvent.addInteger(hour);\r
734         this.currentEvent.addInteger(minute);\r
735 \r
736         return;\r
737     }\r
738 \r
739     /**\r
740      * {@inheritDoc}\r
741      * @param content {@inheritDoc}\r
742      * @param guardByRange {@inheritDoc}\r
743      * @param guardToRange {@inheritDoc}\r
744      * @throws HtmlParseException {@inheritDoc}\r
745      */\r
746     @Override\r
747     public void sysEventGuard(DecodedContent content,\r
748                                 SeqRange guardByRange,\r
749                                 SeqRange guardToRange)\r
750             throws HtmlParseException{\r
751         DecodedContent avatarName;\r
752 \r
753         avatarName = this.converter.convert(content, guardByRange);\r
754         AvatarData guardBy = this.villageData.getAvatarData(avatarName);\r
755         this.currentEvent.addAvatarData(guardBy);\r
756 \r
757         avatarName = this.converter.convert(content, guardToRange);\r
758         AvatarData guardTo = this.villageData.getAvatarData(avatarName);\r
759         this.currentEvent.addAvatarData(guardTo);\r
760 \r
761         return;\r
762     }\r
763 \r
764     /**\r
765      * {@inheritDoc}\r
766      * @param content {@inheritDoc}\r
767      * @param judgeByRange {@inheritDoc}\r
768      * @param judgeToRange {@inheritDoc}\r
769      * @throws HtmlParseException {@inheritDoc}\r
770      */\r
771     @Override\r
772     public void sysEventJudge(DecodedContent content,\r
773                                 SeqRange judgeByRange,\r
774                                 SeqRange judgeToRange)\r
775             throws HtmlParseException{\r
776         DecodedContent avatarName;\r
777 \r
778         avatarName = this.converter.convert(content, judgeByRange);\r
779         AvatarData judgeBy = this.villageData.getAvatarData(avatarName);\r
780         this.currentEvent.addAvatarData(judgeBy);\r
781 \r
782         avatarName = this.converter.convert(content, judgeToRange);\r
783         AvatarData judgeTo = this.villageData.getAvatarData(avatarName);\r
784         this.currentEvent.addAvatarData(judgeTo);\r
785 \r
786         return;\r
787     }\r
788 \r
789     /**\r
790      * {@inheritDoc}\r
791      * @param content {@inheritDoc}\r
792      * @param avatarRange {@inheritDoc}\r
793      * @param votes {@inheritDoc}\r
794      * @throws HtmlParseException {@inheritDoc}\r
795      */\r
796     @Override\r
797     public void sysEventExecution(DecodedContent content,\r
798                                     SeqRange avatarRange,\r
799                                     int votes)\r
800             throws HtmlParseException{\r
801         DecodedContent avatarName;\r
802         avatarName = this.converter.convert(content, avatarRange);\r
803         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
804         this.currentEvent.addAvatarData(avatar);\r
805 \r
806         if(votes > 0){\r
807             this.currentEvent.addInteger(votes);\r
808         }\r
809 \r
810         return;\r
811     }\r
812 \r
813     /**\r
814      * {@inheritDoc}\r
815      * @param content {@inheritDoc}\r
816      * @param avatarRange {@inheritDoc}\r
817      * @throws HtmlParseException {@inheritDoc}\r
818      */\r
819     @Override\r
820     public void sysEventCheckout(DecodedContent content,\r
821                                    SeqRange avatarRange)\r
822             throws HtmlParseException{\r
823         DecodedContent avatarName;\r
824         avatarName = this.converter.convert(content, avatarRange);\r
825         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
826         this.currentEvent.addAvatarData(avatar);\r
827         return;\r
828     }\r
829 \r
830     /**\r
831      * {@inheritDoc}\r
832      * @param content {@inheritDoc}\r
833      * @param avatarRange {@inheritDoc}\r
834      * @throws HtmlParseException {@inheritDoc}\r
835      */\r
836     @Override\r
837     public void sysEventVanish(DecodedContent content,\r
838                                  SeqRange avatarRange)\r
839             throws HtmlParseException{\r
840         DecodedContent avatarName;\r
841         avatarName = this.converter.convert(content, avatarRange);\r
842         AvatarData avatar = this.villageData.getAvatarData(avatarName);\r
843         this.currentEvent.addAvatarData(avatar);\r
844         return;\r
845     }\r
846 \r
847     /**\r
848      * {@inheritDoc}\r
849      * @throws HtmlParseException {@inheritDoc}\r
850      */\r
851     @Override\r
852     public void endSysEvent() throws HtmlParseException{\r
853         this.currentPeriod.addTopicData(this.currentEvent);\r
854         this.currentEvent = null;\r
855         return;\r
856     }\r
857 \r
858     /**\r
859      * {@inheritDoc}\r
860      * @throws HtmlParseException {@inheritDoc}\r
861      */\r
862     @Override\r
863     public void endParse() throws HtmlParseException{\r
864         this.villageData.addPeriodData(this.currentPeriod);\r
865         this.currentPeriod = null;\r
866         return;\r
867     }\r
868 \r
869 }\r