package uni.projecte.Activities.Thesaurus;
import uni.projecte.R;
import uni.projecte.Activities.Projects.ProjectManagement;
import uni.projecte.controler.CitationControler;
import uni.projecte.controler.ProjectControler;
import uni.projecte.controler.ThesaurusControler;
import uni.projecte.dataLayer.CitationManager.ListAdapter.CitationListAdapter;
import uni.projecte.dataLayer.RemoteDBManager.objects.LocalTaxonNoThListAdapter;
import uni.projecte.dataLayer.ThesaurusManager.ThesaurusElement;
import uni.projecte.dataLayer.utils.TaxonUtils;
import uni.projecte.dataTypes.LocalTaxonSet;
import uni.projecte.dataTypes.TaxonElement;
import uni.projecte.dataTypes.Utilities;
import android.app.Activity;
import android.app.Dialog;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.text.Html;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;
import android.widget.AdapterView.OnItemSelectedListener;
public class ThesaurusTaxonChecker extends Activity {
public final static int EDIT_CITATION = 1;
public static final String PREF_FILE_NAME = "PredProject";
private SharedPreferences preferences;
private CitationControler citCnt;
private ProjectControler projCnt;
private ThesaurusControler thCnt;
private long projId;
private String thName;
private ListView lvNoThTaxonList;
private TextView tvNoThTaxonInfo;
private LocalTaxonSet localTaxonList;
private EditText etGenusEt;
private EditText etSpEpithet;
private EditText etSpEpithetAuhtor;
private EditText etInfraSpEpithet;
private EditText etInfraSpEpithetAuthor;
private EditText etPrimaryKey;
private EditText etSecondayKey;
private Spinner spRank;
private Button addButton;
private Dialog addItemDialog;
private ProgressDialog pdCheckingTh;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Utilities.setLocale(this);
setContentView(R.layout.thesaurus_taxon_checker);
lvNoThTaxonList=(ListView) findViewById(R.id.lvLocalTaxonsNoTh);
tvNoThTaxonInfo=(TextView) findViewById(R.id.tvNoThTaxons);
preferences = getSharedPreferences(PREF_FILE_NAME, MODE_PRIVATE);
projId = preferences.getLong("predProjectId", -1);
citCnt= new CitationControler(this);
projCnt= new ProjectControler(this);
thCnt= new ThesaurusControler(this);
projCnt.loadProjectInfoById(projId);
thName=projCnt.getThName();
String tvInfo=String.format(getString(R.string.tvNoThTaxonsInfo),projCnt.getName());
tvNoThTaxonInfo.setText(Html.fromHtml(tvInfo));
boolean status=thCnt.initThReader(thName);
if(status){
createAddItemDialog();
thCnt.closeThReader();
loadThList();
}
else {
Utilities.showToast(getString(R.string.toastNotThesarus), this);
finish();
}
}
private void createAddItemDialog() {
addItemDialog= new Dialog(this);
addItemDialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
addItemDialog.setContentView(R.layout.thesaurus_additem_dialog);
etGenusEt=(EditText)addItemDialog.findViewById(R.id.etAddItemGender);
etSpEpithet=(EditText)addItemDialog.findViewById(R.id.etAddItemSpecEp);
etSpEpithetAuhtor=(EditText)addItemDialog.findViewById(R.id.etAddItemSpecEpAuth);
etInfraSpEpithet=(EditText)addItemDialog.findViewById(R.id.etAddItemInfraSpecEp);
etInfraSpEpithetAuthor=(EditText)addItemDialog.findViewById(R.id.etAddItemInfraSpecEpAuth);
etPrimaryKey=(EditText)addItemDialog.findViewById(R.id.etAddItemPrimKey);
etSecondayKey=(EditText)addItemDialog.findViewById(R.id.etAddItemSecKey);
addButton = (Button)addItemDialog.findViewById(R.id.btAddThItem);
addButton.setOnClickListener(addNewThListener);
spRank=(Spinner)addItemDialog.findViewById(R.id.spThRank);
spRank.setOnItemSelectedListener(new OnItemSelectedListener() {
public void onItemSelected(AdapterView<?> arg0,View arg1, int position, long arg3) {
String spValue=spRank.getSelectedItem().toString();
if(spValue.equals("")){
etInfraSpEpithet.setEnabled(false);
etInfraSpEpithet.setText("");
etInfraSpEpithetAuthor.setEnabled(false);
etInfraSpEpithetAuthor.setText("");
}
else{
etInfraSpEpithet.setEnabled(true);
etInfraSpEpithetAuthor.setEnabled(true);
}
}
public void onNothingSelected(AdapterView<?> arg0) {
}
});
}
private OnClickListener showAddThDialogListener = new OnClickListener(){
public void onClick(View v){
loadDialogData(v.getId());
addItemDialog.show();
}
};
private OnClickListener addNewThListener = new OnClickListener()
{
public void onClick(View v)
{
if(etGenusEt.length()>0 && etSpEpithet.length()>0){
String newGenus=etGenusEt.getText().toString();
String newSpEpithet=etSpEpithet.getText().toString();
String newSpEpithetAuthor=etSpEpithetAuhtor.getText().toString();
String newInfraSpEpithet=etInfraSpEpithet.getText().toString();
String newInfraSpEpithetAuthor=etInfraSpEpithetAuthor.getText().toString();
String newPrimaryKey=etPrimaryKey.getText().toString();
String newSecondaryKey=etSecondayKey.getText().toString();
String thRank=spRank.getSelectedItem().toString();
String taxonName="";
if(newInfraSpEpithet.equals("")) taxonName=newGenus+" "+newSpEpithet+" "+newSpEpithetAuthor;
else taxonName=newGenus+" "+newSpEpithet+" "+thRank+" "+newInfraSpEpithet+" "+newInfraSpEpithetAuthor;
if(!thCnt.checkTaxonBelongs(taxonName)){
thCnt.addElement(newGenus, newSpEpithet, newInfraSpEpithet, newPrimaryKey, newSecondaryKey, newSpEpithetAuthor, newInfraSpEpithetAuthor,thRank);
Utilities.showToast(getString(R.string.thNewItemAdded), v.getContext());
addItemDialog.dismiss();
loadThList();
}
else{
Utilities.showToast(getString(R.string.thNewItemExists),v.getContext());
}
}
else{
Utilities.showToast(getString(R.string.thNewItemGenusEpMissing), v.getContext());
}
}
};
private void loadDialogData(int elemPos) {
String taxonName=localTaxonList.getTaxonList().get(elemPos).getTaxon();
TaxonElement taxElem=TaxonUtils.mapThesaurusElement(taxonName);
etGenusEt.setText(taxElem.getGenus());
etSpEpithet.setText(taxElem.getSpecificEpithet());
etSpEpithetAuhtor.setText(taxElem.getSpecificEpithetAuthor());
Utilities.setDefaultSpinnerItem(spRank, taxElem.getInfraspecificRank(), getResources().getStringArray(R.array.thesaurusRank));
etInfraSpEpithet.setText(taxElem.getInfraspecificEpithet());
etInfraSpEpithetAuthor.setText(taxElem.getInfraspecificEpithetAuthor());
}
private void loadThList() {
pdCheckingTh = new ProgressDialog(this);
pdCheckingTh.setMessage(getString(R.string.filterNotInThesaurusMessage));
pdCheckingTh.show();
Thread thread = new Thread(){
@Override
public void run() {
localTaxonList=citCnt.getLocalWrongTaxon(projId,thName);
thCheckHandler.sendEmptyMessage(0);
}
};
thread.start();
}
private Handler thCheckHandler = new Handler() {
@Override
public void handleMessage(Message msg) {
LocalTaxonNoThListAdapter adapter=new LocalTaxonNoThListAdapter(getBaseContext(), localTaxonList.getTaxonList(), projId, showAddThDialogListener);
lvNoThTaxonList.setAdapter(adapter);
pdCheckingTh.dismiss();
}
};
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
switch(requestCode) {
case EDIT_CITATION :
loadThList();
break;
default:
}
}
}