OSDN Git Service

[自動予約一覧]検索条件、録画設定の取得とファイルへの保存まで
[tainavi/TinyBannavi.git] / TinyBannavi / src / tainavi / SearchGroupList.java
1 package tainavi;\r
2 \r
3 import java.io.File;\r
4 import java.util.ArrayList;\r
5 import java.util.Iterator;\r
6 \r
7 public class SearchGroupList implements Iterator<SearchGroup>, Iterable<SearchGroup>{\r
8         \r
9         private final ArrayList<SearchGroup> gList = new ArrayList<SearchGroup>();\r
10         \r
11         private int idx;\r
12         \r
13         private String gFile = "env"+File.separator+"keywordgroup.xml";\r
14         \r
15         \r
16         // コンストラクタ\r
17         public SearchGroupList() {\r
18                 //\r
19         }\r
20         \r
21         \r
22         // 検索系\r
23         @Override\r
24         public Iterator<SearchGroup> iterator() {\r
25                 idx = -1;\r
26                 return this;\r
27         }\r
28         @Override\r
29         public boolean hasNext() {\r
30                 return (gList.size() > (idx+1));\r
31         }\r
32         @Override\r
33         public SearchGroup next() {\r
34                 return gList.get(++idx);\r
35         }\r
36         @Override\r
37         public void remove() {\r
38                 gList.remove(idx);\r
39         }\r
40         \r
41         public int size() {\r
42                 return gList.size();\r
43         }\r
44         \r
45         // グループ・メンバー追加\r
46         public boolean add(String name) {\r
47                 for ( SearchGroup gl : gList ) {\r
48                         if ( gl.getName().equals(name) ) {\r
49                                 // 既に存在している\r
50                                 return false;\r
51                         }\r
52                 }\r
53                 SearchGroup gl = new SearchGroup();\r
54                 gl.setName(name);\r
55                 gList.add(gl);\r
56                 return true;\r
57         }\r
58         public boolean add(String name, String member) {\r
59                 \r
60                 if ( name == null || member == null ) {\r
61                         // グループとメンバーの指定は必須\r
62                         return false;\r
63                 }\r
64                 \r
65                 for ( SearchGroup gl : gList ) {\r
66                         if ( gl.getName().equals(name) ) {\r
67                                 gList.iterator();\r
68                                 for ( String gmember : gl ) {\r
69                                         if ( gmember.equals(member) ) {\r
70                                                 // 既に存在している\r
71                                                 return false;\r
72                                         }\r
73                                 }\r
74                                 // メンバーを追加する\r
75                                 gl.add(member);\r
76                                 return true;\r
77                         }\r
78                 }\r
79                 // グループごと追加する\r
80                 SearchGroup gl = new SearchGroup();\r
81                 gl.setName(name);\r
82                 gl.add(member);\r
83                 return true;\r
84         }\r
85         \r
86         // 削除する\r
87         public boolean remove(String name) {\r
88                 for ( SearchGroup gl : gList ) {\r
89                         if ( gl.getName().equals(name) ) {\r
90                                 // グループごと削除\r
91                                 gList.remove(gl);\r
92                                 return true;\r
93                         }\r
94                 }\r
95                 return false;\r
96         }\r
97         public boolean remove(String name, String member) {\r
98                 \r
99                 if ( member == null ) {\r
100                         // グループ指定は必須\r
101                         return false;\r
102                 }\r
103                 \r
104                 if ( name == null ) {\r
105                         // グループ横断削除\r
106                         for ( SearchGroup gl : gList ) {\r
107                                 for ( String gmember : gl ) {\r
108                                         if ( gmember.equals(member) ) {\r
109                                                 // メンバー削除\r
110                                                 gl.remove();\r
111                                                 break;\r
112                                         }\r
113                                 }\r
114                         }\r
115                         // あってもなくてもよしとする\r
116                         return true;\r
117                 }\r
118                 else {\r
119                         // 単独グループ削除\r
120                         for ( SearchGroup gl : gList ) {\r
121                                 if ( gl.getName().equals(name) ) {\r
122                                         for ( String gmember : gl ) {\r
123                                                 if ( gmember.equals(member) ) {\r
124                                                         // メンバー削除\r
125                                                         gl.remove();\r
126                                                         return true;\r
127                                                 }\r
128                                         }\r
129                                         // メンバーが存在しない\r
130                                         return false;\r
131                                 }\r
132                         }\r
133                         // グループが存在しない\r
134                         return false;\r
135                 }\r
136         }\r
137         \r
138         // 検索する\r
139         public boolean isFind(String name, String member) {\r
140                 \r
141                 if ( name == null || member == null ) {\r
142                         return false;\r
143                 }\r
144                 \r
145                 for ( SearchGroup gl : gList ) {\r
146                         if ( gl.getName().equals(name) ) {\r
147                                 for ( String gmember : gl ) {\r
148                                         if ( gmember.equals(member) ) {\r
149                                                 // 存在している\r
150                                                 return true;\r
151                                         }\r
152                                 }\r
153                         }\r
154                 }\r
155                 return false;\r
156         }\r
157         \r
158         // 改名する\r
159         public boolean rename(String oldName, String newName) {\r
160                 for ( SearchGroup gl : gList ) {\r
161                         if ( gl.getName().equals(oldName) ) {\r
162                                 gl.setName(newName);\r
163                                 return true;\r
164                         }\r
165                 }\r
166                 return false;\r
167         }\r
168         public boolean rename(String name, String oldMember, String newMember) {\r
169                 if ( name == null ) {\r
170                         boolean f = false;\r
171                         for ( SearchGroup gl : gList ) {\r
172                                 if ( gl.replace(oldMember, newMember) ) {\r
173                                         f = true;\r
174                                 }\r
175                         }\r
176                         return f;\r
177                 }\r
178                 else {\r
179                         for ( SearchGroup gl : gList ) {\r
180                                 if ( gl.getName().equals(name) ) {\r
181                                         if ( gl.replace(oldMember, newMember) ) {\r
182                                                 return true;\r
183                                         }\r
184                                 }\r
185                         }\r
186                 }\r
187                 return false;\r
188         }\r
189         \r
190         // セーブ・ロード\r
191         public boolean save() {\r
192                 System.out.println("検索キーワードグループ設定を保存します: "+gFile);\r
193                 if ( ! CommonUtils.writeXML(gFile, gList) ) {\r
194                         System.err.println("検索キーワードグループ設定の保存に失敗しました: "+gFile);\r
195                         return false;\r
196                 }\r
197                 return true;\r
198         }\r
199         \r
200         public boolean load() {\r
201                 System.out.println("検索キーワードグループ設定を読み込みます: "+gFile);\r
202                 if ( new File(gFile).exists() ) {\r
203                         @SuppressWarnings("unchecked")\r
204                         ArrayList<SearchGroup> tmpList = (ArrayList<SearchGroup>) CommonUtils.readXML(gFile);\r
205                         if ( tmpList != null ) {\r
206                                 FieldUtils.deepCopy(gList, tmpList);\r
207                                 return true;\r
208                         }\r
209                 }\r
210                 \r
211                 System.err.println("検索キーワードグループ設定が読み込みに失敗しました: "+gFile);\r
212                 return false;\r
213         }\r
214 }\r