1 package com.hiroshica.android.input.nicownn2;
3 import android.os.AsyncTask;
4 import android.os.Environment;
5 import android.util.Log;
7 import java.util.ArrayList;
9 //import java.io.FileInputStream;
10 //import java.io.FileOutputStream;
12 import org.xmlpull.v1.XmlPullParser;
13 import org.xmlpull.v1.XmlPullParserFactory;
18 public class UserDicImportExport extends AsyncTask<String, String, String[]>{
19 private UserDictionaryToolsList mActivity;
20 private String[] mResultString;
23 public UserDicImportExport(UserDictionaryToolsList activity) {
27 protected void onPreExecute() {
29 mActivity.createProgressDialog();
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]);
39 mResultString[0] = "true";
40 mResultString[1] = mActivity.getString(R.string.dialog_import_dic_message_done);
43 mResultString[0] = "false";
44 mResultString[1] = mActivity.getString(R.string.dialog_import_dic_message_failed);
48 exportUserDic(params[1], params[2], params[3]);
53 protected void onPostExecute(String[] result) {
54 mActivity.removeProgressDialog(result);
57 protected void onCancelled() {
64 private boolean importUserDic(String file, String sd, String flash) {
65 File fileSdCard = getExternalStorageDirectory();
66 if (null == fileSdCard) {
69 File fileBase = createNicoWnnDirectory(fileSdCard);
70 if (null == fileBase) {
74 File sFile = new File(fileBase, sd);
75 File dFile = new File(flash);
76 if (false == copyFile(dFile, sFile)) {
79 Log.d("load", "finish import learn dic!!\n");
81 ArrayList<WnnWord> importList = new ArrayList<WnnWord>();
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");
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;
100 WnnWord newword = new WnnWord();
101 newword.stroke = parser.getAttributeValue(null,"stroke").replaceAll("\"", "");
102 Log.d("load", "get stroke = "+newword.stroke+"\n");
104 eventType = parser.next();
105 if (eventType == XmlPullParser.TEXT) {
106 newword.candidate = parser.getText().replaceAll("\"", "");;
107 Log.d("load", "get candidate = "+newword.candidate+"\n");
110 } while (eventType == XmlPullParser.END_DOCUMENT);
111 if (eventType == XmlPullParser.END_DOCUMENT) {
114 importList.add(importList.size(), newword);
116 } catch (Exception e) {
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) {
131 Log.d("load", "finish import!!\n");
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);
141 File fileSdCard = getExternalStorageDirectory();
142 if (null == fileSdCard) {
143 mResultString[0] = "false";
144 mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
147 File fileBase = createNicoWnnDirectory(fileSdCard);
148 if (null == fileBase) {
152 File fileSave = new File(fileBase, file);
153 FileOutputStream fout = new FileOutputStream(fileSave);
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");
159 fout.write(header.getBytes());
160 fout.write(top.getBytes());
162 int size = mActivity.getWordListSize();
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());
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);
178 File sFile = new File(flash);
179 File dFile = new File(fileBase, sd);
180 copyFile(dFile, sFile);
183 /*************************************************************************************/
185 /*************************************************************************************/
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");
195 Log.d("sdcard", "mount sdcard!!\n");
196 return Environment.getExternalStorageDirectory();
201 private File createNicoWnnDirectory(File fileSdCard) {
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);
216 if (!fileNico.exists()) {
217 if (!fileNico.mkdir()) {
218 mResultString[0] = "false";
219 mResultString[1] = mActivity.getString(R.string.dialog_export_dic_message_failed);
228 private boolean copyFile(File dFile, File sFile) {
229 if (!sFile.exists()) {
232 InputStream input = null;
233 OutputStream output = null;
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];
240 while (-1 != (n = input.read(buffer))) {
241 output.write(buffer, 0, n);
245 } catch (Exception e) {
251 /****************************** end of file ******************************/