OSDN Git Service

88f28c83652b60de273d0a0de3c434f689825111
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / TVProgram.java
1 package tainavi;\r
2 \r
3 import java.util.ArrayList;\r
4 \r
5 /**\r
6  * Web番組表の設定や、実際の番組情報などを保持するクラスです。\r
7  * @see TVProgramList\r
8  * @see TVProgramUtils\r
9  * @see TVProgramIterator\r
10  */\r
11 public interface TVProgram {\r
12 \r
13         // 定数\r
14         public enum ProgScrumble { NONE, NOSCRUMBLE, SCRUMBLED };\r
15         public enum ProgFlags { NOFLAG, NEW, LAST };\r
16         public enum ProgType { PROG, SYOBO, PASSED, PICKED, SEARCHED, OTHERS };\r
17         public enum ProgSubtype { TERRA, CS, CS2, CS3, RADIO, NONE };\r
18 \r
19         /**\r
20          *  NOSCRUMBLEは間違って(?)ProgScrumbleを使うこととなってしまったのだ。ここにあるのはマーク表示のための一覧用なのだ。\r
21          */\r
22         public enum ProgOption { HIDDEN_NEW, HIDDEN_LAST, HIDDEN_NOSCRUMBLE, FIRST, REPEAT, LIVE, SPECIAL, NOSYOBO, SUBTITLE, BILINGUAL, STANDIN, PV, MULTIVOICE, DATA, SURROUND, NEWARRIVAL, MODIFIED, NONREPEATED, MOVED, PRECEDING, RATING };\r
23 \r
24         public static enum ProgGenre { \r
25                 NEWS            ("ニュース/報道",         "0"),\r
26                 SPORTS          ("スポーツ",                        "1"),\r
27                 VARIETYSHOW     ("情報/ワイドショー",   "2"),\r
28                 DORAMA          ("ドラマ",                   "3"), \r
29                 MUSIC           ("音楽",                              "4"),\r
30                 VARIETY         ("バラエティー",          "5"),\r
31                 MOVIE           ("映画",                              "6"), \r
32                 ANIME           ("アニメ/特撮",            "7"), \r
33                 DOCUMENTARY     ("ドキュメンタリー/教養",     "8"),\r
34                 THEATER         ("劇場/公演",               "9"),\r
35                 HOBBY           ("趣味/教育",               "A"),\r
36                 WELFARE         ("福祉",                              "B"),\r
37                 //KIDS          ("キッズ",                   "ZZZ"), // もとからなかったらしい\r
38                 //EXTENTION     ("拡張",                      "E"),   // 非対応とする\r
39                 NOGENRE         ("その他",                   "F");\r
40                 \r
41                 private String name;\r
42                 private String iepg;\r
43                 \r
44                 private ProgGenre(String name, String iepg) {\r
45                         this.name = name;\r
46                         this.iepg = iepg;\r
47                 }\r
48                 \r
49                 @Override\r
50                 public String toString() {\r
51                         return(name);\r
52                 }\r
53                 \r
54                 public String toIEPG() {\r
55                         return(iepg);\r
56                 }\r
57                 \r
58                 /**\r
59                  * ジャンル名文字列に一致するものを返す\r
60                  */\r
61                 public static ProgGenre get(String name) {\r
62                         for ( ProgGenre g : ProgGenre.values() ) {\r
63                                 if ( g.name.equals(name) ) {\r
64                                         return g;\r
65                                 }\r
66                         }\r
67                         return null;\r
68                 }\r
69                 \r
70                 /**\r
71                  * IEPGで\r
72                  */\r
73                 public static ProgGenre getByIEPG(String iepg) {\r
74                         for ( ProgGenre g : ProgGenre.values() ) {\r
75                                 if ( g.iepg.equals(iepg) ) {\r
76                                         return g;\r
77                                 }\r
78                         }\r
79                         return null;\r
80                 }\r
81         };\r
82         \r
83         public static enum ProgSubgenre {\r
84                 NEWS_TEIJI              (ProgGenre.NEWS,        "定時・総合",              "0"),\r
85                 NEWS_TENKI              (ProgGenre.NEWS,        "天気",                       "1"),\r
86                 NEWS_TOKUSHU    (ProgGenre.NEWS,        "特集・ドキュメント",  "2"),\r
87                 NEWS_SEIJI              (ProgGenre.NEWS,        "政治・国会",              "3"),\r
88                 NEWS_KEIZAI             (ProgGenre.NEWS,        "経済・市況",              "4"),\r
89                 NEWS_KAIGAI             (ProgGenre.NEWS,        "海外・国際",              "5"),\r
90                 NEWS_KAISETU    (ProgGenre.NEWS,        "解説",                       "6"),\r
91                 NEWS_TOURON             (ProgGenre.NEWS,        "討論・会談",              "7"),\r
92                 NEWS_HOUDOU             (ProgGenre.NEWS,        "報道特番",         "8"),\r
93                 NEWS_LOCAL              (ProgGenre.NEWS,        "ローカル・地域",        "9"),\r
94                 NEWS_KOTSU              (ProgGenre.NEWS,        "交通",                       "A"),\r
95                 NEWS_ETC                (ProgGenre.NEWS,        "その他",                    "F"),\r
96                 \r
97                 SPORTS_NEWS             (ProgGenre.SPORTS,      "スポーツニュース",             "0"),\r
98                 SPORTS_BASEBALL (ProgGenre.SPORTS,      "野球",                               "1"),\r
99                 SPORTS_FOOTBALL (ProgGenre.SPORTS,      "サッカー",                 "2"),\r
100                 SPORTS_GOLF             (ProgGenre.SPORTS,      "ゴルフ",                            "3"),\r
101                 SPORTS_BALLGAME (ProgGenre.SPORTS,      "その他の球技",           "4"),\r
102                 SPORTS_SUMO             (ProgGenre.SPORTS,      "相撲・格闘技",           "5"),\r
103                 SPORTS_OLYNPIC  (ProgGenre.SPORTS,      "オリンピック・国際大会",    "6"),\r
104                 SPORTS_MARATHON (ProgGenre.SPORTS,      "マラソン・陸上・水泳",       "7"),\r
105                 SPORTS_MORTAR   (ProgGenre.SPORTS,      "モータースポーツ",             "8"),\r
106                 SPORTS_MARINE   (ProgGenre.SPORTS,      "マリン・ウィンタースポーツ","9"),\r
107                 SPORTS_KEIBA    (ProgGenre.SPORTS,      "競馬・公営競技",                "A"),\r
108                 SPORTS_ETC              (ProgGenre.SPORTS,      "その他",                            "F"),\r
109                 \r
110                 VSHOW_GEINO             (ProgGenre.VARIETYSHOW, "芸能・ワイドショー",          "0"),\r
111                 VSHOW_FASHION   (ProgGenre.VARIETYSHOW, "ファッション",                   "1"),\r
112                 VSHOW_LIFE              (ProgGenre.VARIETYSHOW, "暮らし・住まい",                "2"),\r
113                 VSHOW_HEALTH    (ProgGenre.VARIETYSHOW, "健康・医療",                      "3"),\r
114                 VSHOW_SHOPPING  (ProgGenre.VARIETYSHOW, "ショッピング・通販",          "4"),\r
115                 VSHOW_GOURMET   (ProgGenre.VARIETYSHOW, "グルメ・料理",           "5"),\r
116                 VSHOW_EVENT             (ProgGenre.VARIETYSHOW, "イベント",                 "6"),\r
117                 VSHOW_INFO              (ProgGenre.VARIETYSHOW, "番組紹介・お知らせ",  "7"),\r
118                 VSHOW_ETC               (ProgGenre.VARIETYSHOW, "その他",                            "F"),\r
119                 \r
120                 DRAMA_KOKUNAI   (ProgGenre.DORAMA,      "国内ドラマ",      "0"),\r
121                 DRAMA_KAIGAI    (ProgGenre.DORAMA,      "海外ドラマ",      "1"),\r
122                 DRAMA_JIDAI             (ProgGenre.DORAMA,      "時代劇",    "2"),\r
123                 DRAMA_ETC               (ProgGenre.DORAMA,      "その他",            "F"),\r
124                 \r
125                 MUSIC_KOKUNAI   (ProgGenre.MUSIC,       "国内ロック・ポップス",                       "0"),\r
126                 MUSIC_KAIGAI    (ProgGenre.MUSIC,       "海外ロック・ポップス",                       "1"),\r
127                 MUSIC_CLASSIC   (ProgGenre.MUSIC,       "クラシック・オペラ",                          "2"),\r
128                 MUSIC_JAZZ              (ProgGenre.MUSIC,       "ジャズ・フュージョン",                       "3"),\r
129                 MUSIC_KAYOKYOKU (ProgGenre.MUSIC,       "歌謡曲・演歌",                           "4"),\r
130                 MUSIC_LIVE              (ProgGenre.MUSIC,       "ライブ・コンサート",                          "5"),\r
131                 MUSIC_RANKING   (ProgGenre.MUSIC,       "ランキング・リクエスト",                    "6"),\r
132                 MUSIC_KARAOKE   (ProgGenre.MUSIC,       "カラオケ・のど自慢",                  "7"),\r
133                 MUSIC_MINYO             (ProgGenre.MUSIC,       "民謡・邦楽",                                      "8"),\r
134                 MUSIC_DOYO              (ProgGenre.MUSIC,       "童謡・キッズ",                                   "9"),\r
135                 MUSIC_MINZOKU   (ProgGenre.MUSIC,       "民族音楽・ワールドミュージック",        "A"),\r
136                 MUSIC_ETC               (ProgGenre.MUSIC,       "その他",                                            "F"),\r
137                 \r
138                 VARIETY_QUIZ    (ProgGenre.VARIETY,     "クイズ",                    "0"),\r
139                 VARIETY_GAME    (ProgGenre.VARIETY,     "ゲーム",                    "1"),\r
140                 VARIETY_TALK    (ProgGenre.VARIETY,     "トークバラエティ",     "2"),\r
141                 VARIETY_OWARAI  (ProgGenre.VARIETY,     "お笑い・コメディ",     "3"),\r
142                 VARIETY_MUSIC   (ProgGenre.VARIETY,     "音楽バラエティ",        "4"),\r
143                 VARIETY_TABI    (ProgGenre.VARIETY,     "旅バラエティ",           "5"),\r
144                 VARIETY_RYORI   (ProgGenre.VARIETY,     "料理バラエティ",        "6"),\r
145                 VARIETY_ETC             (ProgGenre.VARIETY,     "その他",                    "F"),\r
146                 \r
147                 MOVIE_YOGA              (ProgGenre.MOVIE,       "洋画",                       "0"),\r
148                 MOVIE_HOGA              (ProgGenre.MOVIE,       "邦画",                       "1"),\r
149                 MOVIE_ANIME             (ProgGenre.MOVIE,       "アニメ",                    "2"),\r
150                 MOVIE_ETC               (ProgGenre.MOVIE,       "その他",                    "F"),\r
151                 \r
152                 ANIME_KOKUNAI   (ProgGenre.ANIME,       "国内アニメ",              "0"),\r
153                 ANIME_KAIGAI    (ProgGenre.ANIME,       "海外アニメ",              "1"),\r
154                 ANIME_TOKUSATSU (ProgGenre.ANIME,       "特撮",                       "2"),\r
155                 ANIME_ETC               (ProgGenre.ANIME,       "その他",                    "F"),\r
156                 \r
157                 DOC_SOCIAL              (ProgGenre.DOCUMENTARY, "社会・時事",                      "0"),\r
158                 DOC_HISTORY             (ProgGenre.DOCUMENTARY, "歴史・紀行",                      "1"),\r
159                 DOC_NATURE              (ProgGenre.DOCUMENTARY, "自然・動物・環境",     "2"),\r
160                 DOC_SPACE               (ProgGenre.DOCUMENTARY, "宇宙・科学・医学",     "3"),\r
161                 DOC_CULTURE             (ProgGenre.DOCUMENTARY, "カルチャー・伝統文化",       "4"),\r
162                 DOC_BUNGEI              (ProgGenre.DOCUMENTARY, "文学・文芸",                      "5"),\r
163                 DOC_SPORTS              (ProgGenre.DOCUMENTARY, "スポーツ",                 "6"),\r
164                 DOC_DOCUMENTARY (ProgGenre.DOCUMENTARY, "ドキュメンタリー全般",       "7"),\r
165                 DOC_INTERVIEW   (ProgGenre.DOCUMENTARY, "インタビュー・討論",          "8"),\r
166                 DOC_ETC                 (ProgGenre.DOCUMENTARY, "その他",                            "F"),\r
167                 \r
168                 THEATER_GENDAI  (ProgGenre.THEATER,     "現代劇・新劇",   "0"),\r
169                 THEATER_MUSICAL (ProgGenre.THEATER,     "ミュージカル",           "1"),\r
170                 THEATER_DANCE   (ProgGenre.THEATER,     "ダンス・バレエ",        "2"),\r
171                 THEATER_RAKUGO  (ProgGenre.THEATER,     "落語・演芸",              "3"),\r
172                 THEATER_KABUKI  (ProgGenre.THEATER,     "歌舞伎・古典",   "4"),\r
173                 THEATER_ETC             (ProgGenre.THEATER,     "その他",                    "F"),\r
174                 \r
175                 HOBBY_TABI              (ProgGenre.HOBBY,       "旅・釣り・アウトドア",       "0"),\r
176                 HOBBY_ENGEI             (ProgGenre.HOBBY,       "園芸・ペット・手芸",  "1"),\r
177                 HOBBY_MUSIC             (ProgGenre.HOBBY,       "音楽・美術・工芸",     "2"),\r
178                 HOBBY_IGO               (ProgGenre.HOBBY,       "囲碁・将棋",                      "3"),\r
179                 HOBBY_MAHJONG   (ProgGenre.HOBBY,       "麻雀・パチンコ",                "4"),\r
180                 HOBBY_CAR               (ProgGenre.HOBBY,       "車・オートバイ",                "5"),\r
181                 HOBBY_COMPUTER  (ProgGenre.HOBBY,       "コンピュータ・TVゲーム", "6"),\r
182                 HOBBY_KAIWA             (ProgGenre.HOBBY,       "会話・語学",                      "7"),\r
183                 HOBBY_YOJI              (ProgGenre.HOBBY,       "幼児・小学生",           "8"),\r
184                 HOBBY_CHUGAKU   (ProgGenre.HOBBY,       "中学生・高校生",                "9"),\r
185                 HOBBY_DAIGAKU   (ProgGenre.HOBBY,       "大学生・受験",           "A"),\r
186                 HOBBY_SHOGAI    (ProgGenre.HOBBY,       "生涯教育・資格",                "B"),\r
187                 HOBBY_KYOIKU    (ProgGenre.HOBBY,       "教育問題",                 "C"),\r
188                 HOBBY_ETC               (ProgGenre.HOBBY,       "その他",                            "F"),\r
189                 \r
190                 WELFARE_KOUREI  (ProgGenre.WELFARE,     "高齢者",            "0"),\r
191                 WELFARE_SHOGAI  (ProgGenre.WELFARE,     "障害者",            "1"),\r
192                 WELFARE_HUKUSHI (ProgGenre.WELFARE,     "社会福祉",         "2"),\r
193                 WELFARE_VULNTEER(ProgGenre.WELFARE,     "ボランティア",           "3"),\r
194                 WELFARE_SHUWA   (ProgGenre.WELFARE,     "手話",                       "4"),\r
195                 WELFARE_MOJI    (ProgGenre.WELFARE,     "文字(字幕)",   "5"),\r
196                 WELFARE_ONSEI   (ProgGenre.WELFARE,     "音声解説",         "6"),\r
197                 WELFARE_ETC             (ProgGenre.WELFARE,     "その他",                    "F"),\r
198                 \r
199                 NOGENRE_ETC             (ProgGenre.NOGENRE,     "その他",                    "F"),\r
200                 \r
201                 ;\r
202                 \r
203                 private ProgGenre genre;\r
204                 private String name;\r
205                 private String iepg;\r
206                 \r
207                 private ProgSubgenre(ProgGenre genre, String name, String iepg) {\r
208                         this.genre = genre;\r
209                         this.name = name;\r
210                         this.iepg = iepg;\r
211                 }\r
212                 \r
213                 @Override\r
214                 public String toString() {\r
215                         return(name);\r
216                 }\r
217                 \r
218                 public String toFullString() {\r
219                         return genre.toString()+" - "+name;\r
220                 }\r
221                 \r
222                 public String toIEPG() {\r
223                         return(iepg);\r
224                 }\r
225                 \r
226                 public ProgGenre getGenre() {\r
227                         return(genre);\r
228                 }\r
229                 \r
230                 public static ArrayList<ProgSubgenre> values(ProgGenre gr) {\r
231                         ArrayList<ProgSubgenre> ga = new ArrayList<TVProgram.ProgSubgenre>();\r
232                         for ( ProgSubgenre g : ProgSubgenre.values() ) {\r
233                                 if ( g.genre == gr ) {\r
234                                         ga.add(g);\r
235                                 }\r
236                         }\r
237                         return ga;\r
238                 }\r
239                 public static ProgSubgenre get(ProgGenre gr, String s) {\r
240                         for ( ProgSubgenre g : ProgSubgenre.values(gr) ) {\r
241                                 if ( g.name.equals(s) ) {\r
242                                         return g;\r
243                                 }\r
244                         }\r
245                         return null;\r
246                 }\r
247                 public static ProgSubgenre get(String s) {\r
248                         if ( s == null ) {\r
249                                 return null;\r
250                         }\r
251                         boolean isfull = (s.indexOf(" - ") != -1);\r
252                         for ( ProgSubgenre g : ProgSubgenre.values() ) {\r
253                                 if ( s.equals(isfull ? g.toFullString() : g.toString()) ) {\r
254                                         return g;\r
255                                 }\r
256                         }\r
257                         return null;\r
258                 }\r
259                 \r
260                 public static ProgSubgenre getByIEPG(ProgGenre gr, String iepg) {\r
261                         for ( ProgSubgenre g : ProgSubgenre.values(gr) ) {\r
262                                 if ( g.iepg.equals(iepg) ) {\r
263                                         return g;\r
264                                 }\r
265                         }\r
266                         return null;\r
267                 }\r
268         };\r
269         \r
270         public static final Object[][] optMarks = {\r
271                 { ProgOption.HIDDEN_NEW, "【新】新番組" },\r
272                 { ProgOption.HIDDEN_LAST, "【終】最終回" },\r
273                 { ProgOption.HIDDEN_NOSCRUMBLE, "【無料】無料放送" },\r
274                 { ProgOption.FIRST, "【初】初回放送" },\r
275                 { ProgOption.PRECEDING, "【先】先行放送" },\r
276                 { ProgOption.NONREPEATED, "[初]リピート放送の初回放送回" },\r
277                 //{ false, ProgOption.REPEAT, "[再]再放送" },\r
278                 { ProgOption.LIVE, "[生]生放送" },\r
279                 { ProgOption.SPECIAL, "[特]特番" },\r
280                 { ProgOption.RATING, "[R]視聴制限あり" },\r
281                 { ProgOption.SUBTITLE, "[字]文字多重放送" },\r
282                 { ProgOption.MULTIVOICE, "[多]音声多重放送" },\r
283                 { ProgOption.BILINGUAL, "[二]二か国語放送" },\r
284                 { ProgOption.STANDIN, "[吹]吹替放送" },\r
285                 { ProgOption.SURROUND, "[5.1]5.1chサラウンド" },\r
286                 { ProgOption.DATA, "[デ]データ放送" },\r
287                 { ProgOption.PV, "[PV]ペイパービュー" },\r
288                 { ProgOption.NOSYOBO, "[!]しょぼかる未定義" },\r
289                 { ProgOption.NEWARRIVAL, "[NEW]予約待機の新着" },\r
290                 { ProgOption.MODIFIED, "(更)番組詳細に更新あり - 予約待機分のみ" },\r
291                 { ProgOption.MOVED, "(移)先週無かったか時間が違う" },\r
292         };\r
293         \r
294         public static final String[] OKINIIRI = {"★★★★★","★★★★","★★★","★★","★",""};\r
295 \r
296         // エリアコード\r
297         public static final String allCode = "all";\r
298         public static final String trCode = "tr";\r
299         public static final String bsCode = "bs";\r
300         public static final String csCode = "cs";\r
301         \r
302         // タイトルの頭の邪魔な文字\r
303         public static final String titlePrefixRemoveExpr = "^(\\[(新|無|字|終|HV|SS|無料)\\]|無料≫|【無料】)+\\s*"; \r
304         public static final String epnoNormalizeExpr = "([第#(])(\\d\\D|\\d$)";\r
305 \r
306         // 種族の特性\r
307         public String getTVProgramId();\r
308         public TVProgram clone();\r
309         //public void setProperties(TVProgramUtils from);\r
310         public boolean isAreaSelectSupported();\r
311 \r
312         // 個体の特性\r
313         // なし\r
314         \r
315         /*\r
316          * TVProgramRefreshクラスを継承する部分 ←そんなクラスあったっけ…?\r
317          */\r
318         public ArrayList<ProgList> getCenters();\r
319         public ArrayList<Center> getCRlist();\r
320         public ArrayList<Center> getSortedCRlist();\r
321         public void setSortedCRlist();\r
322         public void refresh();\r
323         public void setExtension(String spoexSearchStart, String spoexSearchEnd, boolean spoexLimitation, ArrayList<SearchKey> extKeys);\r
324         public void abon(ArrayList<String> ngword);\r
325         public String chkComplete();\r
326         \r
327         //public void setAbnormal(boolean b);\r
328         //public boolean getAbnormal();\r
329         \r
330         public ProgType getType();\r
331         public ProgSubtype getSubtype();\r
332 \r
333         public void setDebug(boolean b);\r
334         //public boolean setProxy(String host, String port);\r
335         \r
336         /*\r
337          * 公開メソッドP(番組表)\r
338          */\r
339         public void loadProgram(String areaCode, boolean force);\r
340         public int getTimeBarStart();\r
341         public void setExpandTo8(boolean b);\r
342         public void setUseDetailCache(boolean b);\r
343         \r
344         /*\r
345          * 公開メソッドA(地域設定)\r
346          */\r
347         public ArrayList<AreaCode> getAClist();\r
348         public void loadAreaCode();\r
349         public void saveAreaCode();\r
350         public String getDefaultArea();\r
351         public String getArea(String code);\r
352         public String getCode(String Area);\r
353         public String setSelectedAreaByName(String area);\r
354         public String setSelectedAreaByCode(String code);\r
355         public String getSelectedArea();\r
356         public String getSelectedCode();\r
357         \r
358         /*\r
359          * 公開メソッドC(放送局設定)\r
360          */\r
361         //public void loadCenter();\r
362         public void loadCenter(String code, boolean force);\r
363         public boolean saveCenter();\r
364         \r
365         /*\r
366          * \r
367          */\r
368         public void setUserAgent(String s);\r
369         public void setProgDir(String s);\r
370         public void setCacheExpired(int h);\r
371         //public void setProgressArea(StatusWindow o);\r
372         //public void setChConv(ChannelConvert chconv);\r
373         public void setContinueTomorrow(boolean b);\r
374         public void setSplitEpno(boolean b);\r
375         //public String[] doSplitEpno(ProgGenre genre, String title);\r
376         \r
377         // 拡張機能!\r
378         public boolean setOptString(String s);\r
379         public String getOptString();\r
380         \r
381         \r
382 }\r