OSDN Git Service

コンフィグ読み書きの仮実装
[coroid/inqubus.git] / frontend / src / yukihane / inqubuss / conifg / Properties.java
1 package yukihane.inqubuss.conifg;
2
3 import java.lang.reflect.Field;
4 import java.util.ArrayList;
5 import java.util.List;
6 import org.apache.commons.configuration.ConfigurationException;
7 import org.apache.commons.configuration.XMLConfiguration;
8
9 public enum Properties implements Config {
10
11     INSTANCE;
12     private final XMLConfiguration config;
13     /** ニコニコ動画ログインID */
14     private String p_nicovideo_id;
15     /** ニコニコ動画ログインパスワード */
16     private String p_nicovideo_password;
17     /** プロキシを使用する */
18     private String p_proxy_use;
19     /** プロキシホスト */
20     private String p_proxy_host;
21     /** プロキシポート */
22     private String p_proxy_port;
23     /** NicoBrowser情報を参照する */
24     private String p_nicobrowser_use;
25     /** NicoBrowser DB ディレクトリ */
26     private String p_nicobrowser_dblocation;
27     /** 動画をダウンロードする */
28     private String p_movie_download;
29     /** 動画ダウンロードディレクトリ */
30     private String p_movie_directory;
31     /** コメントをダウンロードする */
32     private String p_comment_download;
33     /** コメントダウンロードディレクトリ */
34     private String p_comment_directory;
35     /** 投稿者コメントをダウンロードする */
36     private String p_ownercomment_download;
37     /** 投稿者コメントダウンロードディレクトリ */
38     private String p_ownercomment_directory;
39
40     public boolean isOwnerCommentDownload() {
41         return Boolean.valueOf(p_ownercomment_download);
42     }
43
44     public void setOwnerCommentDownload(boolean download) {
45         p_ownercomment_download = Boolean.toString(download);
46     }
47
48     public boolean isCommentDownload() {
49         return Boolean.valueOf(p_comment_download);
50     }
51
52     public void setCommentDownload(boolean download) {
53         p_comment_download = Boolean.toString(download);
54     }
55
56     public String getMovieDirectory() {
57         return p_movie_directory;
58     }
59
60     public void setMovieDirectory(String dir) {
61         this.p_movie_directory = dir;
62     }
63
64     public boolean isMovieDownload() {
65         return Boolean.valueOf(p_movie_download);
66     }
67
68     public void setMovieDownload(boolean download) {
69         this.p_movie_download = Boolean.toString(download);
70     }
71
72     public String getDbLocation() {
73         return p_nicobrowser_dblocation;
74     }
75
76     public void setDbLocation(String p_nicobrowser_dblocation) {
77         this.p_nicobrowser_dblocation = p_nicobrowser_dblocation;
78     }
79
80     public boolean isDbUse() {
81         return Boolean.valueOf(p_nicobrowser_use);
82     }
83
84     public void setDbUse(boolean use) {
85         this.p_nicobrowser_use = Boolean.toString(use);
86     }
87
88     public String getNicoVideoId() {
89         return p_nicovideo_id;
90     }
91
92     public void setNicoVideoId(String id) {
93         this.p_nicovideo_id = id;
94     }
95
96     public String getNicoVideoPassword() {
97         return p_nicovideo_password;
98     }
99
100     public void setNicoVideoPassword(String password) {
101         this.p_nicovideo_password = password;
102     }
103
104     public String getProxyHost() {
105         return p_proxy_host;
106     }
107
108     public void setProxyHost(String host) {
109         this.p_proxy_host = host;
110     }
111
112     public int getP_proxy_port() {
113         return Integer.parseInt(p_proxy_port);
114     }
115
116     public void setP_proxy_port(int port) {
117         this.p_proxy_port = Integer.toString(port);
118     }
119
120     public boolean isProxyUse() {
121         return Boolean.valueOf(p_proxy_use);
122     }
123
124     public void setProxyUse(boolean use) {
125         this.p_proxy_use = Boolean.toString(use);
126     }
127
128     private String getConfigurationName() {
129         return "inqubuss.xml";
130     }
131
132     private String getPrefix() {
133         return "p_";
134     }
135
136     private Properties() {
137         config = new XMLConfiguration();
138         config.setFileName(getConfigurationName());
139     }
140
141     public void load() throws ConfigurationException {
142         config.load();
143     }
144
145     public void save() throws ConfigurationException {
146         try {
147             final Class<? extends Properties> clazz = this.getClass();
148             final Field[] fields = clazz.getDeclaredFields();
149             final Field[] propertyFields = getPropertyFields(fields);
150             for (Field f : propertyFields) {
151                 config.setProperty(getPropertyName(f), getPropertyValue(f));
152             }
153             config.save();
154         } catch (Exception ex) {
155             throw new ConfigurationException(ex);
156         }
157     }
158
159     private Field[] getPropertyFields(Field[] fields) {
160         List<Field> res = new ArrayList<Field>();
161         for (Field f : fields) {
162             if (f.getName().startsWith(getPrefix())) {
163                 res.add(f);
164             }
165         }
166         return res.toArray(new Field[0]);
167     }
168
169     private String getPropertyName(Field field) {
170         return field.getName().replace(getPrefix(), "").replace("_", ".");
171     }
172
173     private String getPropertyValue(Field field) throws IllegalArgumentException, IllegalAccessException {
174         field.setAccessible(true);
175         return (String) field.get(this);
176     }
177 }