OSDN Git Service

Merge branch 'Branch_release-'
[jindolf/Jindolf.git] / src / main / java / jp / sfjp / jindolf / data / Talk.java
-/*\r
- * dialogs in game\r
- *\r
- * Copyright(c) 2008 olyutorskii\r
- * $Id: Talk.java 994 2010-03-15 03:14:25Z olyutorskii $\r
- */\r
-\r
-package jp.sourceforge.jindolf;\r
-\r
-import jp.sourceforge.jindolf.corelib.TalkType;\r
-\r
-/**\r
- * プレイヤーの発言。\r
- */\r
-public class Talk implements Topic{\r
-\r
-    /**\r
-     * 会話種別から色名への変換を行う。\r
-     * @param type 会話種別\r
-     * @return 色名\r
-     */\r
-    public static String encodeColorName(TalkType type){\r
-        String result;\r
-\r
-        switch(type){\r
-        case PUBLIC:   result = "白"; break;\r
-        case PRIVATE:  result = "灰"; break;\r
-        case WOLFONLY: result = "赤"; break;\r
-        case GRAVE:    result = "青"; break;\r
-        default: assert false; return null;\r
-        }\r
-\r
-        return result;\r
-    }\r
-\r
-    private final Period homePeriod;\r
-    private final TalkType talkType;\r
-    private final Avatar avatar;\r
-    private final int talkNo;\r
-    private final String messageID;\r
-    private final int hour;\r
-    private final int minute;\r
-    private final CharSequence dialog;\r
-    private final int charNum;\r
-    private int count = -1;\r
-\r
-    /**\r
-     * Talkの生成。\r
-     * @param homePeriod 発言元Period\r
-     * @param talkType 発言種別\r
-     * @param avatar Avatar\r
-     * @param talkNo 公開発言番号。公開発言でないなら0以下の値を指定。\r
-     * @param messageID メッセージID\r
-     * @param hour 発言時\r
-     * @param minute 発言分\r
-     * @param dialog 会話データ\r
-     */\r
-    public Talk(Period homePeriod,\r
-                 TalkType talkType,\r
-                 Avatar avatar,\r
-                 int talkNo,\r
-                 String messageID,\r
-                 int hour, int minute,\r
-                 CharSequence dialog ){\r
-        if(   homePeriod == null\r
-           || talkType   == null\r
-           || avatar     == null\r
-           || messageID  == null\r
-           || dialog     == null ) throw new NullPointerException();\r
-        if(hour   < 0 || 23 < hour  ) throw new IllegalArgumentException();\r
-        if(minute < 0 || 59 < minute) throw new IllegalArgumentException();\r
-        if(talkType != TalkType.PUBLIC){\r
-            if(0 < talkNo) throw new IllegalArgumentException();\r
-        }\r
-\r
-        this.homePeriod = homePeriod;\r
-        this.talkType = talkType;\r
-        this.avatar = avatar;\r
-        this.talkNo = talkNo;\r
-        this.messageID = messageID;\r
-        this.hour = hour;\r
-        this.minute = minute;\r
-        this.dialog = dialog;\r
-\r
-        this.charNum = this.dialog.length();\r
-\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * 発言が交わされたPeriodを返す。\r
-     * @return Period\r
-     */\r
-    public Period getPeriod(){\r
-        return this.homePeriod;\r
-    }\r
-\r
-    /**\r
-     * 発言種別を得る。\r
-     * @return 種別\r
-     */\r
-    public TalkType getTalkType(){\r
-        return this.talkType;\r
-    }\r
-\r
-    /**\r
-     * 墓下発言か否か判定する。\r
-     * @return 墓下発言ならtrue\r
-     */\r
-    public boolean isGrave(){\r
-        return this.talkType == TalkType.GRAVE;\r
-    }\r
-\r
-    /**\r
-     * 発言種別ごとにその日(Period)の累積発言回数を返す。\r
-     * 1から始まる。\r
-     * @return 累積発言回数。\r
-     */\r
-    public int getTalkCount(){\r
-        return this.count;\r
-    }\r
-\r
-    /**\r
-     * 発言文字数を返す。\r
-     * 改行(\n)は1文字。\r
-     * @return 文字数\r
-     */\r
-    public int getTotalChars(){\r
-        return this.charNum;\r
-    }\r
-\r
-    /**\r
-     * 発言元Avatarを得る。\r
-     * @return 発言元Avatar\r
-     */\r
-    public Avatar getAvatar(){\r
-        return this.avatar;\r
-    }\r
-\r
-    /**\r
-     * 公開発言番号を取得する。\r
-     * 公開発言番号が割り振られてなければ0以下の値を返す。\r
-     * @return 公開発言番号\r
-     */\r
-    public int getTalkNo(){\r
-        return this.talkNo;\r
-    }\r
-\r
-    /**\r
-     * 公開発言番号の有無を返す。\r
-     * @return 公開発言番号が割り当てられているならtrueを返す。\r
-     */\r
-    public boolean hasTalkNo(){\r
-        if(0 < this.talkNo) return true;\r
-        return false;\r
-    }\r
-\r
-    /**\r
-     * メッセージIDを取得する。\r
-     * @return メッセージID\r
-     */\r
-    public String getMessageID(){\r
-        return this.messageID;\r
-    }\r
-\r
-    /**\r
-     * メッセージIDからエポック秒(ms)に変換する。\r
-     * @return GMT 1970-01-01 00:00:00 からのエポック秒(ms)\r
-     */\r
-    public long getTimeFromID(){\r
-        String epoch = this.messageID.replace("mes", "");\r
-        long result = Long.parseLong(epoch) * 1000;\r
-        return result;\r
-    }\r
-\r
-    /**\r
-     * 発言時を取得する。\r
-     * @return 発言時\r
-     */\r
-    public int getHour(){\r
-        return this.hour;\r
-    }\r
-\r
-    /**\r
-     * 発言分を取得する。\r
-     * @return 発言分\r
-     */\r
-    public int getMinute(){\r
-        return this.minute;\r
-    }\r
-\r
-    /**\r
-     * 会話データを取得する。\r
-     * @return 会話データ\r
-     */\r
-    public CharSequence getDialog(){\r
-        return this.dialog;\r
-    }\r
-\r
-    /**\r
-     * 発言種別ごとの発言回数を設定する。\r
-     * @param count 発言回数\r
-     */\r
-    public void setCount(int count){\r
-        this.count = count;\r
-        return;\r
-    }\r
-\r
-    /**\r
-     * この会話を識別するためのアンカー文字列を生成する。\r
-     * 例えば「3d09:56」など。\r
-     * @return アンカー文字列\r
-     */\r
-    public String getAnchorNotation(){\r
-        int day = this.homePeriod.getDay();\r
-\r
-        String hstr = "0"+this.hour;\r
-        hstr = hstr.substring(hstr.length() - 2);\r
-        String mstr = "0"+this.minute;\r
-        mstr = mstr.substring(mstr.length() - 2);\r
-\r
-        return day + "d" + hstr + ":" + mstr;\r
-    }\r
-\r
-    /**\r
-     * この会話を識別するためのG国用アンカー文字列を発言番号から生成する。\r
-     * 例えば「>>172」など。\r
-     * @return アンカー文字列。発言番号がなければ空文字列。\r
-     */\r
-    public String getAnchorNotation_G(){\r
-        if( ! hasTalkNo() ) return "";\r
-        return ">>" + this.talkNo;\r
-    }\r
-\r
-    /**\r
-     * {@inheritDoc}\r
-     * 会話のString表現を返す。\r
-     * 実体参照やHTMLタグも含まれる。\r
-     * @return 会話のString表現\r
-     */\r
-    @Override\r
-    public String toString(){\r
-        StringBuilder result = new StringBuilder();\r
-\r
-        result.append(this.avatar.getFullName());\r
-\r
-        if     (this.talkType == TalkType.PUBLIC)   result.append(" says ");\r
-        else if(this.talkType == TalkType.PRIVATE)  result.append(" think ");\r
-        else if(this.talkType == TalkType.WOLFONLY) result.append(" howl ");\r
-        else if(this.talkType == TalkType.GRAVE)    result.append(" groan ");\r
-\r
-        result.append(this.dialog);\r
-\r
-        return result.toString();\r
-    }\r
-\r
-}\r
+/*
+ * dialogs in game
+ *
+ * License : The MIT License
+ * Copyright(c) 2008 olyutorskii
+ */
+
+package jp.sfjp.jindolf.data;
+
+import jp.sourceforge.jindolf.corelib.TalkType;
+
+/**
+ * プレイヤーの発言。
+ */
+public class Talk implements Topic{
+
+    private final Period homePeriod;
+    private final TalkType talkType;
+    private final Avatar avatar;
+    private final int talkNo;
+    private final String messageID;
+    private final int hour;
+    private final int minute;
+    private final CharSequence dialog;
+    private final int charNum;
+    private int count = -1;
+
+
+    /**
+     * Talkの生成。
+     * @param homePeriod 発言元Period
+     * @param talkType 発言種別
+     * @param avatar Avatar
+     * @param talkNo 公開発言番号。公開発言でないなら0以下の値を指定。
+     * @param messageID メッセージID
+     * @param hour 発言時
+     * @param minute 発言分
+     * @param dialog 会話データ
+     */
+    public Talk(Period homePeriod,
+                 TalkType talkType,
+                 Avatar avatar,
+                 int talkNo,
+                 String messageID,
+                 int hour, int minute,
+                 CharSequence dialog ){
+        if(    homePeriod == null
+            || talkType   == null
+            || avatar     == null
+            || messageID  == null
+            || dialog     == null ) throw new NullPointerException();
+        if(hour   < 0 || 23 < hour  ) throw new IllegalArgumentException();
+        if(minute < 0 || 59 < minute) throw new IllegalArgumentException();
+        if(talkType != TalkType.PUBLIC){
+            if(0 < talkNo) throw new IllegalArgumentException();
+        }
+
+        this.homePeriod = homePeriod;
+        this.talkType = talkType;
+        this.avatar = avatar;
+        this.talkNo = talkNo;
+        this.messageID = messageID;
+        this.hour = hour;
+        this.minute = minute;
+        this.dialog = dialog;
+
+        this.charNum = this.dialog.length();
+
+        return;
+    }
+
+
+    /**
+     * 会話種別から色名への変換を行う。
+     * @param type 会話種別
+     * @return 色名
+     */
+    public static String encodeColorName(TalkType type){
+        String result;
+
+        switch(type){
+        case PUBLIC:   result = "白"; break;
+        case PRIVATE:  result = "灰"; break;
+        case WOLFONLY: result = "赤"; break;
+        case GRAVE:    result = "青"; break;
+        default:
+            assert false;
+            return null;
+        }
+
+        return result;
+    }
+
+    /**
+     * 発言が交わされたPeriodを返す。
+     * @return Period
+     */
+    public Period getPeriod(){
+        return this.homePeriod;
+    }
+
+    /**
+     * 発言種別を得る。
+     * @return 種別
+     */
+    public TalkType getTalkType(){
+        return this.talkType;
+    }
+
+    /**
+     * 墓下発言か否か判定する。
+     * @return 墓下発言ならtrue
+     */
+    public boolean isGrave(){
+        return this.talkType == TalkType.GRAVE;
+    }
+
+    /**
+     * 発言種別ごとにその日(Period)の累積発言回数を返す。
+     * 1から始まる。
+     * @return 累積発言回数。
+     */
+    public int getTalkCount(){
+        return this.count;
+    }
+
+    /**
+     * 発言文字数を返す。
+     * 改行(\n)は1文字。
+     * @return 文字数
+     */
+    public int getTotalChars(){
+        return this.charNum;
+    }
+
+    /**
+     * 発言元Avatarを得る。
+     * @return 発言元Avatar
+     */
+    public Avatar getAvatar(){
+        return this.avatar;
+    }
+
+    /**
+     * 公開発言番号を取得する。
+     * 公開発言番号が割り振られてなければ0以下の値を返す。
+     * @return 公開発言番号
+     */
+    public int getTalkNo(){
+        return this.talkNo;
+    }
+
+    /**
+     * 公開発言番号の有無を返す。
+     * @return 公開発言番号が割り当てられているならtrueを返す。
+     */
+    public boolean hasTalkNo(){
+        if(0 < this.talkNo) return true;
+        return false;
+    }
+
+    /**
+     * メッセージIDを取得する。
+     * @return メッセージID
+     */
+    public String getMessageID(){
+        return this.messageID;
+    }
+
+    /**
+     * メッセージIDからエポック秒(ms)に変換する。
+     * @return GMT 1970-01-01 00:00:00 からのエポック秒(ms)
+     */
+    public long getTimeFromID(){
+        String epoch = this.messageID.replace("mes", "");
+        long result = Long.parseLong(epoch) * 1000;
+        return result;
+    }
+
+    /**
+     * 発言時を取得する。
+     * @return 発言時
+     */
+    public int getHour(){
+        return this.hour;
+    }
+
+    /**
+     * 発言分を取得する。
+     * @return 発言分
+     */
+    public int getMinute(){
+        return this.minute;
+    }
+
+    /**
+     * 会話データを取得する。
+     * @return 会話データ
+     */
+    public CharSequence getDialog(){
+        return this.dialog;
+    }
+
+    /**
+     * 発言種別ごとの発言回数を設定する。
+     * @param count 発言回数
+     */
+    public void setCount(int count){
+        this.count = count;
+        return;
+    }
+
+    /**
+     * この会話を識別するためのアンカー文字列を生成する。
+     * 例えば「3d09:56」など。
+     * @return アンカー文字列
+     */
+    public String getAnchorNotation(){
+        int day = this.homePeriod.getDay();
+
+        String hstr = "0"+this.hour;
+        hstr = hstr.substring(hstr.length() - 2);
+        String mstr = "0"+this.minute;
+        mstr = mstr.substring(mstr.length() - 2);
+
+        return day + "d" + hstr + ":" + mstr;
+    }
+
+    /**
+     * この会話を識別するためのG国用アンカー文字列を発言番号から生成する。
+     * 例えば「{@literal >>172}」など。
+     * @return アンカー文字列。発言番号がなければ空文字列。
+     */
+    public String getAnchorNotation_G(){
+        if( ! hasTalkNo() ) return "";
+        return ">>" + this.talkNo;
+    }
+
+    /**
+     * {@inheritDoc}
+     * 会話のString表現を返す。
+     * 実体参照やHTMLタグも含まれる。
+     * @return 会話のString表現
+     */
+    @Override
+    public String toString(){
+        StringBuilder result = new StringBuilder();
+
+        result.append(this.avatar.getFullName());
+
+        if     (this.talkType == TalkType.PUBLIC)   result.append(" says ");
+        else if(this.talkType == TalkType.PRIVATE)  result.append(" think ");
+        else if(this.talkType == TalkType.WOLFONLY) result.append(" howl ");
+        else if(this.talkType == TalkType.GRAVE)    result.append(" groan ");
+
+        result.append(this.dialog);
+
+        return result.toString();
+    }
+
+}