1 package jp.sourceforge.gokigen.memoma.fileio;
4 import java.io.FileWriter;
5 import java.text.SimpleDateFormat;
6 import java.util.Calendar;
7 import java.util.Enumeration;
9 import android.app.ProgressDialog;
10 import android.content.Context;
11 import android.os.AsyncTask;
12 import android.util.Log;
14 import jp.sourceforge.gokigen.memoma.Main;
15 import jp.sourceforge.gokigen.memoma.R;
16 import jp.sourceforge.gokigen.memoma.holders.MeMoMaObjectHolder;
19 * データをファイルに保存するとき用 アクセスラッパ (非同期処理を実行)
22 * MeMoMaObjectHolder : 実行時に渡すクラス(Param)
23 * Integer : 途中経過を伝えるクラス(Progress)
24 * String : 処理結果を伝えるクラス(Result)
29 public class MeMoMaFileExportCsvProcess extends AsyncTask<MeMoMaObjectHolder, Integer, String>
31 private IResultReceiver receiver = null;
32 private ExternalStorageFileUtility fileUtility = null;
33 private String exportedFileName = null;
35 ProgressDialog savingDialog = null;
40 public MeMoMaFileExportCsvProcess(Context context, ExternalStorageFileUtility utility, IResultReceiver resultReceiver)
42 receiver = resultReceiver;
43 fileUtility = utility;
45 // プログレスダイアログ(「保存中...」)を表示する。
46 savingDialog = new ProgressDialog(context);
47 savingDialog.setProgressStyle(ProgressDialog.STYLE_SPINNER);
48 savingDialog.setMessage(context.getString(R.string.dataSaving));
49 savingDialog.setIndeterminate(true);
50 savingDialog.setCancelable(false);
53 /** ファイルをバックアップするディレクトリを作成する **/
54 File dir = new File(fileUtility.getGokigenDirectory() + "/exported");
64 protected void onPreExecute()
75 private String exportToCsvFile(String fileName, MeMoMaObjectHolder objectHolder)
77 String resultMessage = "";
81 Calendar calendar = Calendar.getInstance();
82 SimpleDateFormat outFormat = new SimpleDateFormat("yyyyMMddHHmmss");
83 exportedFileName = fileName + "_" + outFormat.format(calendar.getTime()) + ".csv";
84 FileWriter writer = new FileWriter(new File(exportedFileName));
88 str = "; label,detail,userChecked,shape,style,centerX,centerY,width,height,;!<_$ (';!<_$' is a record Separator)\r\n";
91 // オブジェクトの出力 (保持しているものをすべて表示する)
92 Enumeration<Integer> keys = objectHolder.getObjectKeys();
93 while (keys.hasMoreElements())
95 Integer key = keys.nextElement();
96 MeMoMaObjectHolder.PositionObject pos = objectHolder.getPosition(key);
98 // TODO: 絞り込み条件がある場合には、その条件に従ってしぼり込む必要あり。
101 str = str + "\"" + pos.label + "\"";
102 str = str + ",\"" + pos.detail + "\"";
103 if (pos.userChecked == true)
109 str = str + ",False";
111 str = str + "," + pos.drawStyle; // オブジェクトの形状
112 str = str + "," + pos.paintStyle; // オブジェクトの塗りつぶし状態
113 str = str + "," + (Math.round(pos.rect.centerX() * 100.0f) / 100.0f);
114 str = str + "," + (Math.round(pos.rect.centerY() * 100.0f) / 100.0f);
115 str = str + "," + (Math.round(pos.rect.width() * 100.0f) / 100.0f);
116 str = str + "," + (Math.round(pos.rect.height() * 100.0f) / 100.0f);
117 str = str + ",;!<_$\r\n";
125 resultMessage = " ERR>" + e.toString();
126 Log.v(Main.APP_IDENTIFIER, resultMessage);
129 return (resultMessage);
134 * (バックグラウンドで実行する(このメソッドは、UIスレッドと別のところで実行する))
138 protected String doInBackground(MeMoMaObjectHolder... datas)
140 // ファイル名の設定 ... (拡張子なし)
141 String fileName = fileUtility.getGokigenDirectory() + "/exported/" + datas[0].getDataTitle();
144 String result = exportToCsvFile(fileName, datas[0]);
156 protected void onProgressUpdate(Integer... values)
166 protected void onPostExecute(String result)
170 if (receiver != null)
172 receiver.onExportedResult(exportedFileName, result);
177 Log.v(Main.APP_IDENTIFIER, "MeMoMaFileExportCsvProcess::onPostExecute() : " + ex.toString());
180 savingDialog.dismiss();
186 * 結果報告用のインタフェース(積極的に使う予定はないけど...)
191 public interface IResultReceiver
194 public abstract void onExportedResult(String exportedFileName, String detail);