OSDN Git Service

remove FullOpen status from Period.
authorOlyutorskii <olyutorskii@users.osdn.me>
Fri, 3 Apr 2020 09:52:40 +0000 (18:52 +0900)
committerOlyutorskii <olyutorskii@users.osdn.me>
Fri, 3 Apr 2020 09:52:40 +0000 (18:52 +0900)
src/main/java/jp/sfjp/jindolf/Controller.java
src/main/java/jp/sfjp/jindolf/data/Period.java
src/main/java/jp/sfjp/jindolf/data/html/PeriodHandler.java
src/main/java/jp/sfjp/jindolf/data/html/PeriodLoader.java
src/main/java/jp/sfjp/jindolf/data/xml/VillageHandler.java
src/main/java/jp/sfjp/jindolf/view/PeriodView.java

index b49912e..bb598a5 100644 (file)
@@ -792,13 +792,12 @@ public class Controller
         for(PeriodView periodView : browser.getPeriodViewList()){
             Period period = periodView.getPeriod();
             if(period == null) continue;
-            if(period.isFullOpen()) continue;
             String message =
                     period.getDay()
                     + "日目のデータを読み込んでいます";
             updateStatusBar(message);
             try{
-                PeriodLoader.parsePeriod(period, true);
+                PeriodLoader.parsePeriod(period, false);
             }catch(IOException e){
                 showNetworkError(village, e);
                 return;
index ec97d1e..32608bd 100644 (file)
@@ -11,6 +11,7 @@ import java.util.Collections;
 import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
+import java.util.Objects;
 import java.util.Set;
 import jp.sourceforge.jindolf.corelib.LandDef;
 import jp.sourceforge.jindolf.corelib.PeriodType;
@@ -24,7 +25,7 @@ import jp.sourceforge.jindolf.corelib.SysEventType;
  * 人気のないプロローグなどで、
  * 24時間以上の期間を持つPeriodが生成される可能性の考慮が必要。
  */
-public class Period{
+public final class Period{
     // TODO Comparable も implement する?
 
     private final Village homeVillage;
@@ -33,8 +34,6 @@ public class Period{
     private int limitHour;
     private int limitMinute;
     // TODO 更新月日も入れるべきか。
-    private String loginName;
-    private boolean isFullOpen = false;
 
     private final List<Topic> topicList = new LinkedList<>();
     private final List<Topic> unmodList =
@@ -43,40 +42,24 @@ public class Period{
 
     /**
      * Periodを生成する。
-     * この段階では発言データのロードは行われない。
-     * デフォルトで非Hot状態。
+     *
+     * <p>この段階では発言データのロードは行われない。
+     *
      * @param homeVillage 所属するVillage
      * @param periodType Period種別
      * @param day Period通番
      * @throws java.lang.NullPointerException 引数にnullが渡された場合。
      */
     public Period(Village homeVillage,
-                   PeriodType periodType,
-                   int day)
-                   throws NullPointerException{
-        this(homeVillage, periodType, day, false);
-        return;
-    }
+                  PeriodType periodType,
+                  int day){
+        Objects.nonNull(homeVillage);
+        Objects.nonNull(periodType);
 
-    /**
-     * Periodを生成する。
-     * この段階では発言データのロードは行われない。
-     * @param homeVillage 所属するVillage
-     * @param periodType Period種別
-     * @param day Period通番
-     * @param isHot Hotか否か
-     * @throws java.lang.NullPointerException 引数にnullが渡された場合。
-     */
-    private Period(Village homeVillage,
-                    PeriodType periodType,
-                    int day,
-                    boolean isHot)
-                    throws NullPointerException{
-        if(    homeVillage == null
-            || periodType  == null ) throw new NullPointerException();
         if(day < 0){
             throw new IllegalArgumentException("Period day is too small !");
         }
+
         switch(periodType){
         case PROLOGUE:
             assert day == 0;
@@ -102,6 +85,7 @@ public class Period{
 
     /**
      * 所属する村を返す。
+     *
      * @return 村
      */
     public Village getVillage(){
@@ -110,6 +94,7 @@ public class Period{
 
     /**
      * Period種別を返す。
+     *
      * @return 種別
      */
     public PeriodType getType(){
@@ -118,9 +103,11 @@ public class Period{
 
     /**
      * Period通番を返す。
-     * プロローグは常に0番。
-     * n日目のゲーム進行日はn番
-     * エピローグは最後のゲーム進行日+1番
+     *
+     * <p>プロローグは常に0番。
+     * n日目のゲーム進行日はn番。
+     * エピローグは最後のゲーム進行日+1番。
+     *
      * @return Period通番
      */
     public int getDay(){
@@ -141,6 +128,7 @@ public class Period{
 
     /**
      * 更新時刻の文字表記を返す。
+     *
      * @return 更新時刻の文字表記
      */
     public String getLimit(){
@@ -157,6 +145,7 @@ public class Period{
 
     /**
      * プロローグか否か判定する。
+     *
      * @return プロローグならtrue
      */
     public boolean isPrologue(){
@@ -166,6 +155,7 @@ public class Period{
 
     /**
      * エピローグか否か判定する。
+     *
      * @return エピローグならtrue
      */
     public boolean isEpilogue(){
@@ -175,6 +165,7 @@ public class Period{
 
     /**
      * 進行日か否か判定する。
+     *
      * @return 進行日ならtrue
      */
     public boolean isProgress(){
@@ -184,6 +175,7 @@ public class Period{
 
     /**
      * このPeriodにアクセスするためのクエリーを生成する。
+     *
      * @return CGIに渡すクエリー
      */
     public String getCGIQuery(){
@@ -239,7 +231,9 @@ public class Period{
 
     /**
      * Periodに含まれるTopicのリストを返す。
-     * このリストは上書き操作不能。
+     *
+     * <p>このリストは上書き操作不能。
+     *
      * @return Topicのリスト
      */
     public List<Topic> getTopicList(){
@@ -256,6 +250,7 @@ public class Period{
 
     /**
      * Periodに含まれるTopicの総数を返す。
+     *
      * @return Topic総数
      */
     public int getTopics(){
@@ -264,6 +259,7 @@ public class Period{
 
     /**
      * Topicを追加する。
+     *
      * @param topic Topic
      * @throws java.lang.NullPointerException nullが渡された場合。
      */
@@ -275,7 +271,9 @@ public class Period{
 
     /**
      * Periodのキャプション文字列を返す。
-     * 主な用途はタブ画面の耳のラベルなど。
+     *
+     * <p>主な用途はタブ画面の耳のラベルなど。
+     *
      * @return キャプション文字列
      */
     public String getCaption(){
@@ -301,24 +299,8 @@ public class Period{
     }
 
     /**
-     * このPeriodをダウンロードしたときのログイン名を返す。
-     * @return ログイン名。ログアウト中はnull。
-     */
-    public String getLoginName(){
-        return this.loginName;
-    }
-
-    /**
-     * ログイン名を設定する。
-     * @param loginName ログイン名
-     */
-    public void setLoginName(String loginName){
-        this.loginName = loginName;
-        return;
-    }
-
-    /**
      * 公開発言番号にマッチする発言を返す。
+     *
      * @param talkNo 公開発言番号
      * @return 発言。見つからなければnull
      */
@@ -335,38 +317,12 @@ public class Period{
     }
 
     /**
-     * このPeriodの内容が全て公に開示されたものであるか判定する。
-     *
-     * <p>公に開示とは、非狼プレイヤーでも赤ログを閲覧できる状況を指す。
-     *
-     * <p>※ 2020-02の時点で、全てのPeriodは公に開示されているものとする。
-     *
-     * @return すべて開示されているならtrue
-     */
-    public boolean isFullOpen(){
-        return this.isFullOpen;
-    }
-
-    /**
-     * このPeriodの内容が全て公に開示されたものであるか設定する。
-     *
-     * <p>公に開示とは、非狼プレイヤーでも赤ログを閲覧できる状況を指す。
-     *
-     * <p>※ 2020-02の時点で、全てのPeriodは公に開示されているものとする。
-     *
-     * @param fullOpen すべて開示されているならtrue
-     */
-    public void setFullOpen(boolean fullOpen){
-        this.isFullOpen = fullOpen;
-        return;
-    }
-
-    /**
      * ロード済みか否かチェックする。
+     *
      * @return ロード済みならtrue
      */
     public boolean hasLoaded(){
-        return getTopics() > 0;
+        return ! this.topicList.isEmpty();
     }
 
     /**
@@ -375,8 +331,6 @@ public class Period{
     public void unload(){
         this.limitHour = 0;
         this.limitMinute = 0;
-        this.loginName = null;
-        this.isFullOpen = false;
 
         this.topicList.clear();
 
@@ -385,8 +339,10 @@ public class Period{
 
     /**
      * 襲撃メッセージの有無を判定する。
-     * 決着が付くまで非狼陣営には見えない。
+     *
+     * <p>決着が付くまで非狼陣営には見えない。
      * 偽装GJでは狼にも見えない。
+     *
      * @return 襲撃メッセージがあればtrue
      */
     public boolean hasAssaultTried(){
@@ -406,6 +362,7 @@ public class Period{
 
     /**
      * 処刑されたAvatarを返す。
+     *
      * @return 処刑されたAvatar。突然死などなんらかの理由でいない場合はnull
      */
     public Avatar getExecutedAvatar(){
@@ -423,6 +380,7 @@ public class Period{
 
     /**
      * 投票に参加したAvatarの集合を返す。
+     *
      * @return 投票に参加したAvatarのSet
      */
     public Set<Avatar> getVoterSet(){
@@ -439,7 +397,9 @@ public class Period{
 
     /**
      * 任意のタイプのシステムイベントを返す。
-     * 複数存在する場合、返すのは最初の一つだけ。
+     *
+     * <p>複数存在する場合、返すのは最初の一つだけ。
+     *
      * @param type イベントタイプ
      * @return システムイベント
      */
index a1d3bb6..114c2d6 100644 (file)
@@ -182,7 +182,6 @@ class PeriodHandler extends HtmlAdapter {
             throws HtmlParseException{
         reset();
 
-        this.period.setLoginName(null);
         this.period.clearTopicList();
 
         return;
@@ -205,11 +204,6 @@ class PeriodHandler extends HtmlAdapter {
     @Override
     public void loginName(DecodedContent content, SeqRange loginRange)
             throws HtmlParseException{
-        DecodedContent loginName =
-                this.converter.convert(content, loginRange);
-
-        this.period.setLoginName(loginName.toString());
-
         return;
     }
 
index 50b9200..a024919 100644 (file)
@@ -18,19 +18,12 @@ import jp.sfjp.jindolf.data.Period;
 import jp.sfjp.jindolf.data.Village;
 import jp.sfjp.jindolf.net.HtmlSequence;
 import jp.sfjp.jindolf.net.ServerAccess;
-import jp.sourceforge.jindolf.corelib.PeriodType;
-import jp.sourceforge.jindolf.corelib.VillageState;
 
 /**
  * 人狼各国のHTTPサーバから各村の個別の日(Period)をHTMLで取得する。
  *
  * <p>Periodには、プレイヤー同士の会話や
  * システムが自動生成するメッセージが正しい順序で納められる。
- *
- * <p>※ 人狼BBS:G国におけるG2087村のエピローグが終了した段階で、
- * 人狼BBSは過去ログの提供しか行っていない。
- * だがこのクラスには進行中の村の各日をパースするための
- * 冗長な処理(Hot判定、fullopen判定etc.)が若干残っている。
  */
 public final class PeriodLoader {
 
@@ -59,19 +52,6 @@ public final class PeriodLoader {
 
         Village village = period.getVillage();
 
-        /*
-            プレイ中の村でプロローグでもエピローグでもない日は
-            灰ログetc.の非開示情報が含まれる。
-            ※ 2020-02の時点で非開示情報の含まれるPeriodは存在しない。
-               (常にFullOpen)
-        */
-        boolean isOpen = true;
-        if(    village.getState() == VillageState.PROGRESS
-            && period.getType() == PeriodType.PROGRESS ){
-            isOpen = false;
-        }
-        period.setFullOpen(isOpen);
-
         Land land = village.getParentLand();
         ServerAccess server = land.getServerAccess();
 
index 776f275..7e8c144 100644 (file)
@@ -224,7 +224,6 @@ public class VillageHandler implements ContentHandler{
      * period要素終了の受信。
      */
     private void endPeriod(){
-        this.period.setFullOpen(true);
         this.countMap.clear();
         return;
     }
index fe6a9f1..2a04bf0 100644 (file)
@@ -209,18 +209,8 @@ public class PeriodView extends JPanel implements ItemListener{
 
         String dayCaption   = this.period.getCaption();
         String limitCaption = this.period.getLimit();
-        String account      = this.period.getLoginName();
 
-        String loginout;
-        if(this.period.isFullOpen()){
-            loginout = "";
-        }else if(account != null){
-            loginout = " (ログイン中)";
-        }else{
-            loginout = " (ログアウト中)";
-        }
-
-        String info = villageName + "村 " + dayCaption + loginout;
+        String info = villageName + "村 " + dayCaption;
         this.caption.setText(info);
         this.limit.setText("更新時刻 " + limitCaption);