package com.radicaldynamic.groupinform.tasks; import java.io.FileReader; import java.util.ArrayList; import java.util.List; import org.supercsv.cellprocessor.constraint.StrMinMax; import org.supercsv.cellprocessor.ift.CellProcessor; import org.supercsv.io.CsvListReader; import org.supercsv.io.ICsvListReader; import org.supercsv.prefs.CsvPreference; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; import com.radicaldynamic.groupinform.application.Collect; import com.radicaldynamic.groupinform.listeners.SelectFieldImportListener; //public class SelectFieldImportTask extends AsyncTask<Params, Progress, Result> { public class SelectFieldImportTask extends AsyncTask<Void, Void, ArrayList<List<String>>> { private static final String t = "SelectFieldImportTask: "; private SelectFieldImportListener mStateListener; private boolean mImportClearList = false; private String mImportFilePath; private boolean mImportSkipFirstLine = false; private int mImportMode = -1; private boolean mImportSuccessful = false; static final CellProcessor[] processor = new CellProcessor[] { new StrMinMax(1, 128), new StrMinMax(1, 128), }; @Override protected ArrayList<List<String>> doInBackground(Void... params) { ArrayList<List<String>> importedData = new ArrayList<List<String>>(); List<String> line; try { ICsvListReader inFile = new CsvListReader(new FileReader(mImportFilePath), CsvPreference.EXCEL_PREFERENCE); // If the user doesn't want to import the first line, skip it and discard if (mImportSkipFirstLine) { inFile.getCSVHeader(true); } switch (mImportMode) { case SelectFieldImportListener.MODE_PREVIEW: while ((line = inFile.read(processor)) != null) { importedData.add(line); // Only read a few lines in if (inFile.getLineNumber() > 4) break; } break; case SelectFieldImportListener.MODE_IMPORT: while ((line = inFile.read(processor)) != null) { importedData.add(line); } break; } inFile.close(); mImportSuccessful = true; } catch (Exception e) { if (Collect.Log.ERROR) Log.e(Collect.LOGTAG, t + "error while reading CSV file for import: " + e.toString()); e.printStackTrace(); } return importedData; } @Override protected void onPostExecute(ArrayList<List<String>> importedData) { synchronized (this) { if (mStateListener != null) { Bundle b = new Bundle(); b.putBoolean(SelectFieldImportListener.CLEAR_LIST, mImportClearList); b.putBoolean(SelectFieldImportListener.SUCCESSFUL, mImportSuccessful); b.putInt(SelectFieldImportListener.MODE, mImportMode); mStateListener.importTaskFinished(b, importedData); } } } public void setImportClearList(boolean b) { mImportClearList = b; } public void setImportSkipFirstLine(boolean b) { mImportSkipFirstLine = b; } public void setImportFilePath(String pathToFile) { mImportFilePath = pathToFile; } public void setImportMode(int m) { mImportMode = m; } public void setListener(SelectFieldImportListener sl) { synchronized (this) { mStateListener = sl; } } }