OSDN Git Service

ディレクトリ名を自動で書き換えるよう修正
[nicownn/NicoWnn.git] / src / com / hiroshica / android / input / nicownn2 / UserDicImportExport.java
1 package com.hiroshica.android.input.nicownn2;
2
3 import android.os.AsyncTask;
4 import android.os.Environment;
5 import android.util.Log;
6
7 import java.util.ArrayList;
8 //import java.io.File;
9 //import java.io.FileInputStream;
10 //import java.io.FileOutputStream;
11 import java.io.*;
12 import org.xmlpull.v1.XmlPullParser;
13 import org.xmlpull.v1.XmlPullParserFactory;
14
15
16
17
18 public class UserDicImportExport extends AsyncTask<String, String, String[]>{
19         private UserDictionaryToolsList mActivity;
20         private String[]  mResultString;
21
22         
23         public UserDicImportExport(UserDictionaryToolsList activity) {
24                 mActivity  = activity;
25         }
26         @Override
27         protected void onPreExecute() {
28                 super.onPreExecute();
29                 mActivity.createProgressDialog();
30         }
31
32         @Override
33         protected String[] doInBackground(String... params)  {
34                 boolean result = false;
35                 mResultString = new String[2];
36                 if (params[0].equals("import")) {
37                         result = importUserDic(params[1], params[2], params[3]);
38                         if (true == result) {
39                                 mResultString[0] = "true";
40                                 mResultString[1] = mActivity.getString(R.string.dialog_import_dic_message_done);
41                         }
42                         else{
43                                 mResultString[0] = "false";
44                                 mResultString[1] = mActivity.getString(R.string.dialog_import_dic_message_failed);
45                         }
46                 }
47                 else{
48                         exportUserDic(params[1], params[2], params[3]);
49                 }
50                 return mResultString;
51         }
52         @Override
53         protected void onPostExecute(String[] result) {
54                 mActivity.removeProgressDialog(result);
55         }
56         @Override
57         protected void onCancelled() {
58                 super.onCancelled();
59         }
60
61         /*
62          *
63          */
64         private boolean importUserDic(String file, String sd, String flash) {
65                 File fileSdCard = getExternalStorageDirectory();
66                 if (null == fileSdCard) {
67                         return false;
68                 }
69                 File fileBase = createNicoWnnDirectory(fileSdCard);
70                 if (null == fileBase) {
71                         return false;
72                 }
73                 // import learn dic
74                 File sFile = new File(fileBase, sd);
75                 File dFile = new File(flash);
76                 if (false == copyFile(dFile, sFile)) {
77                         return false;
78                 }
79                 Log.d("load", "finish import learn dic!!\n");
80
81                 ArrayList<WnnWord> importList = new ArrayList<WnnWord>();
82                 try {
83                         File fileLoad = new File(fileBase, file);
84                         Log.d("load", "create fileload\n");
85                         FileInputStream fin = new FileInputStream(fileLoad);
86                         Log.d("load", "create inputstream\n");
87                         final XmlPullParserFactory factory = XmlPullParserFactory.newInstance();
88                         final XmlPullParser parser = factory.newPullParser();
89                         parser.setInput(fin, "UTF8");
90                         Log.d("load", "create XML parser\n");
91                         int eventType;                  
92                         String tagName;
93                         String tagText;
94                         for(eventType = parser.getEventType(); eventType != XmlPullParser.END_DOCUMENT; eventType = parser.next()){
95                                 tagName = parser.getName();
96                                 if (eventType != XmlPullParser.START_TAG)    continue;
97                                 if (tagName == null)    continue;
98                                 if (!tagName.equals("dicword"))    continue;
99                                 // entry word
100                                 WnnWord newword = new WnnWord();
101                                 newword.stroke    = parser.getAttributeValue(null,"stroke").replaceAll("\"", "");
102                                 Log.d("load", "get stroke = "+newword.stroke+"\n");
103                                 do {
104                                         eventType = parser.next();
105                                         if (eventType == XmlPullParser.TEXT) {
106                                                 newword.candidate = parser.getText().replaceAll("\"", "");;
107                                                 Log.d("load", "get candidate = "+newword.candidate+"\n");
108                                                 break;
109                                         }
110                                 } while (eventType == XmlPullParser.END_DOCUMENT);
111                                 if (eventType == XmlPullParser.END_DOCUMENT) {
112                                         break;
113                                 }
114                                 importList.add(importList.size(), newword);
115                         }
116                 } catch (Exception e) {
117                         return false;
118                 } finally {
119                         //
120                 }
121                 // set new wordlist
122                 Log.d("load", "set new wordlist\n");
123                 int size = importList.size();
124                 for (int iI = 0; iI < size; ++iI) {
125                         WnnWord getword = importList.get(iI);
126                         boolean result = mActivity.addImportWord(getword);
127                         if (false == result) {
128                                 return false;
129                         }
130                 }
131                 Log.d("load", "finish import!!\n");
132                 return true;
133         }
134         /*
135          *
136          */
137         private boolean exportUserDic(String file, String flash, String sd) {
138                 mResultString[0] = "true";
139                 mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_done);
140
141                 File fileSdCard = getExternalStorageDirectory();
142                 if (null == fileSdCard) {
143                         mResultString[0] = "false";
144                         mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
145                         return false;
146                 }
147                 File fileBase = createNicoWnnDirectory(fileSdCard);
148                 if (null == fileBase) {
149                         return false;
150                 }
151                 try {
152                         File fileSave = new File(fileBase, file);
153                         FileOutputStream fout = new FileOutputStream(fileSave);
154                         // output XML header
155                         String header = new String("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
156                         String top    = new String("<wordlist>\n");
157                         String end    = new String("</wordlist>\n");
158
159                         fout.write(header.getBytes());
160                         fout.write(top.getBytes());
161                         // create data
162                         int size = mActivity.getWordListSize();
163                         WnnWord getword;
164                         for (int iI = 0; iI < size; ++iI) {
165                                 getword = mActivity.getWnnWord(iI);
166                                 String outstring = new String("  <dicword stroke=\"" + getword.stroke + "\">\"" + getword.candidate + "\"</dicword>\n");
167                                 fout.write(outstring.getBytes());
168                         }
169                         fout.write(end.getBytes());
170                 } catch (Exception e) {
171                         mResultString[0] = "false";
172                         mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
173                         return false;
174                 } finally {
175                         //
176                 }
177                 // export learn dic
178                 File sFile = new File(flash);
179                 File dFile = new File(fileBase, sd);
180                 copyFile(dFile, sFile);
181                 return true;
182         }
183         /*************************************************************************************/
184     /* file load/save                                                                    */
185     /*************************************************************************************/
186         /*
187          * 
188          */
189         private File getExternalStorageDirectory() {
190                 boolean state = Environment.getExternalStorageState().contains(Environment.MEDIA_MOUNTED);
191                 if (false == state) {
192                         Log.d("sdcard", "not mount sdcard!!\n");
193                         return null;
194                 }
195                 Log.d("sdcard", "mount sdcard!!\n");
196                 return Environment.getExternalStorageDirectory();
197         }
198         /*
199          * 
200          */
201         private File createNicoWnnDirectory(File fileSdCard) {
202                 boolean result;
203                 File fileOld  = null;
204                 File fileNico = null;
205                 fileOld  = new File(fileSdCard, "OpenWnn");
206                 fileNico = new File(fileSdCard, "nicoWnn");
207                 if (fileOld.exists()) {
208                         result = fileOld.renameTo(fileNico);
209                         if (false == result) {
210                                 mResultString[0] = "false";
211                                 mResultString[1] = mActivity.getString(R.string.dialog_importexport_rendir_failed);
212                                 return null;
213                         }
214                         return fileNico;
215                 }
216                 if (!fileNico.exists()) {
217                         if (!fileNico.mkdir()) {
218                                 mResultString[0] = "false";
219                                 mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
220                                 return null;
221                         } // mkdir
222                 } // exists
223                 return fileNico;
224         }
225         /*
226          * 
227          */
228         private boolean copyFile(File dFile, File sFile) {
229                 if (!sFile.exists()) {
230                         return false;
231                 }
232                 InputStream input = null;
233                 OutputStream output = null;
234                 try {
235                         input  = new FileInputStream(sFile);
236                         output = new FileOutputStream(dFile);
237                         int DEFAULT_BUFFER_SIZE = 1024 * 4;
238                         byte[] buffer = new byte[DEFAULT_BUFFER_SIZE];
239                         int n = 0;
240                         while (-1 != (n = input.read(buffer))) {
241                                 output.write(buffer, 0, n);
242                         }
243                         input.close();
244                         output.close();
245                 } catch (Exception e) {
246                         return false;
247                 }
248                 return true;
249         }
250 }
251 /****************************** end of file ******************************/