package uni.projecte.Activities.Thesaurus; import java.util.ArrayList; import java.util.Iterator; import uni.projecte.R; import uni.projecte.controler.ThesaurusControler; import uni.projecte.dataLayer.ThesaurusManager.xml.PlainThesaurusReader; import uni.projecte.dataTypes.Utilities; import android.app.Activity; import android.app.ProgressDialog; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; import android.widget.AdapterView; import android.widget.AdapterView.OnItemSelectedListener; import android.widget.ArrayAdapter; import android.widget.Button; import android.widget.CheckBox; import android.widget.CompoundButton; import android.widget.CompoundButton.OnCheckedChangeListener; import android.widget.EditText; import android.widget.Spinner; import android.widget.TableLayout; import android.widget.TableRow; import android.widget.TextView; import android.widget.Toast; public class ThesaurusPlainImport extends Activity{ private CheckBox cbFirstFieldLabels; private CheckBox cbScape; private Spinner separator; private Spinner thTypes; private Button btImportTh; private EditText etThName; private String separatorString="\",\""; private String firstLine; private TableLayout fieldsMapper; private String thName; private String fileNamePath; private String fileName; private PlainThesaurusReader ptR; private ThesaurusControler thCnt; private ArrayList<Spinner> spinnerList; private int nFields; private long thId; private ProgressDialog pd; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.thesaurus_import_plain); thTypes = (Spinner) findViewById(R.id.spTaxonomicalKingdoms); separator = (Spinner) findViewById(R.id.spElementsSeparator); fieldsMapper=(TableLayout)findViewById(R.id.llFieldsMapper); fieldsMapper.setColumnShrinkable(0, true); cbFirstFieldLabels=(CheckBox)findViewById(R.id.cbFirstLabelsColumn); cbScape=(CheckBox)findViewById(R.id.cbScape); btImportTh=(Button)findViewById(R.id.btImportPlainTh); cbFirstFieldLabels.setOnCheckedChangeListener(cbFirstLineListener); cbScape.setOnCheckedChangeListener(cbScapeListener); btImportTh.setOnClickListener(btImportThListener); etThName=(EditText) findViewById(R.id.etThName); thCnt= new ThesaurusControler(this); fileNamePath=getIntent().getExtras().getString("filePath"); fileName=getIntent().getExtras().getString("fileName"); etThName.setText(fileName); ptR= new PlainThesaurusReader(fileNamePath,separatorString); ptR.setOmitFirstLine(cbFirstFieldLabels.isChecked()); ptR.setScape(cbScape.isChecked()); firstLine=ptR.readFileFirstLine(); loadSpinners(); separator.setOnItemSelectedListener(thSeparatorListener); } private void loadSpinners() { ArrayAdapter<CharSequence> adapterThTypes = ArrayAdapter.createFromResource( this, R.array.thesaurusFilums, android.R.layout.simple_spinner_item ); adapterThTypes.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item ); thTypes.setAdapter( adapterThTypes ); ArrayAdapter<CharSequence> adapterFieldSeparators = ArrayAdapter.createFromResource( this, R.array.thesaurusFieldsSeparators, android.R.layout.simple_spinner_item ); adapterFieldSeparators.setDropDownViewResource( android.R.layout.simple_spinner_dropdown_item ); separator = (Spinner) findViewById( R.id.spElementsSeparator); separator.setAdapter( adapterFieldSeparators ); } private OnItemSelectedListener thSeparatorListener = new OnItemSelectedListener() { public void onItemSelected(AdapterView<?> parentView, View selectedItemView, int position, long id) { separatorString=Utilities.translateThFieldsSepartor(parentView.getContext(), separator.getSelectedItem().toString()); ptR.setFieldSeparator(separatorString); fillFieldsSelector(firstLine); } public void onNothingSelected(AdapterView<?> parentView) { } }; private OnClickListener btImportThListener = new OnClickListener() { public void onClick(View v) { thName=etThName.getText().toString(); if(thName.equals("")){ Utilities.showToast(getString(R.string.thName),v.getContext()); } else{ thId=thCnt.createThesaurus(thName,"",Utilities.translateThTypeToFilumLetter(v.getContext(),thTypes.getSelectedItem().toString()),fileName,"localPlain"); if(thId>0){ importTh(); } else{ String sameTh=getBaseContext().getString(R.string.sameThName); Toast.makeText(getBaseContext(), sameTh+" "+thName, Toast.LENGTH_LONG).show(); } } } }; private void importTh() { pd = ProgressDialog.show(this, getString(R.string.thLoading), getString(R.string.thLoadingTxt), true,false); Thread thread = new Thread(){ @Override public void run() { importThThread(); } }; thread.start(); } private void importThThread(){ String[] orderedChoosenFields=createFieldsOrderedArray(); thName=thName.replace(".", "_"); //thId,thName, boolean error=thCnt.addThItemsPlainTh(thId, thName, orderedChoosenFields, ptR); if(!error) handler.sendEmptyMessage(0); else handler.sendEmptyMessage(1); } private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { pd.dismiss(); if (msg.what==0){ Intent intent = new Intent(); Bundle b = new Bundle(); b.putString("thName", thName); intent.putExtras(b); setResult(1, intent); } else{ Toast.makeText(getBaseContext(), getBaseContext().getString(R.string.thWrongFile), Toast.LENGTH_LONG).show(); } finish(); } }; private OnCheckedChangeListener cbFirstLineListener = new CheckBox.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ptR.setOmitFirstLine(isChecked); } }; private OnCheckedChangeListener cbScapeListener = new CheckBox.OnCheckedChangeListener() { public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { ptR.setScape(isChecked); fillFieldsSelector(firstLine); } }; private void fillFieldsSelector(String firstLine) { spinnerList= new ArrayList<Spinner>(); String[] fields=firstLine.split(separatorString); nFields=fields.length; fieldsMapper.removeAllViews(); for(int i=0; i<nFields; i++){ TableRow lp=new TableRow(this); lp.setLayoutParams(new ViewGroup.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)); TextView t=new TextView(getBaseContext()); Spinner sp= new Spinner(this); ArrayAdapter<CharSequence> adapterFields = ArrayAdapter.createFromResource( this, R.array.thesaurusFields, android.R.layout.simple_spinner_item); adapterFields.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); sp.setAdapter(adapterFields); spinnerList.add(sp); if((sp.getCount()-1)>i) sp.setSelection(i); else sp.setSelection(sp.getCount()-1); if(ptR.isScape()) t.setText(fields[i].replace("\"", "")); else t.setText(fields[i]); lp.addView(t); lp.addView(sp); fieldsMapper.addView(lp); } } private String[] createFieldsOrderedArray(){ Iterator<Spinner> it=spinnerList.iterator(); String[] choosenFieldsList=new String[nFields]; int i=0; while(it.hasNext()){ Spinner tmpSp=it.next(); choosenFieldsList[i]=Utilities.translateThFieldType(this, tmpSp.getSelectedItem().toString()); i++; } return choosenFieldsList; } }