package it.geosolutions.geocollect.android.core.form.action;
import it.geosolutions.geocollect.android.app.R;
import it.geosolutions.geocollect.android.core.form.FormEditActivity;
import it.geosolutions.geocollect.android.core.mission.Mission;
import it.geosolutions.geocollect.android.core.mission.MissionFeature;
import it.geosolutions.geocollect.android.core.mission.PendingMissionListActivity;
import it.geosolutions.geocollect.android.core.mission.utils.MissionUtils;
import it.geosolutions.geocollect.android.core.mission.utils.PersistenceUtils;
import it.geosolutions.geocollect.model.config.MissionTemplate;
import it.geosolutions.geocollect.model.viewmodel.FormAction;
import it.geosolutions.geocollect.model.viewmodel.Page;
import java.util.ArrayList;
import java.util.HashMap;
import jsqlite.Database;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.support.v4.app.NavUtils;
import android.text.Html;
import android.util.Log;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragment;
public class SaveMissionFeatureAction extends AndroidAction {
/**
*
*/
private static final long serialVersionUID = 1L;
public SaveMissionFeatureAction(FormAction a){
super(a);
this.attributes = a.attributes;
this.dataModel = a.dataModel;
this.iconCls = a.iconCls;
this.id = a.id;
this.type = a.type;
this.text = a.text;
}
/**
* check if all mandatory fields are filled, confirm the upload
* @param fragment
* @param action
* @param missionFeature
*/
public void performAction(final SherlockFragment fragment, final FormAction action, final MissionFeature missionFeature) {
Log.d(SendMissionFeatureAction.class.getSimpleName(), "perform sendaction");
final MissionTemplate t = MissionUtils.getDefaultTemplate(fragment.getActivity());
Database db = ((FormEditActivity) fragment.getSherlockActivity()).spatialiteDatabase;
final String tableName = t.schema_seg.localSourceStore+ MissionTemplate.NEW_NOTICE_SUFFIX;
// check database for mandatory fields
ArrayList<String> notFilledMandatoryEntries = MissionUtils.checkIfAllMandatoryFieldsAreSatisfied(t.seg_form, Mission.ORIGIN_ID_STRING, db, tableName);
if(notFilledMandatoryEntries.size() > 0){
String missing = fragment.getString(R.string.mandatory_fields_not_filled)+"\n\n";
for(String string : notFilledMandatoryEntries){
missing+=" \u2022 "+ string+"\n";
}
missing += "\n"+fragment.getString(R.string.mandatory_fields_please_fill);
Log.d(SaveMissionFeatureAction.class.getSimpleName(), "missing "+Html.fromHtml(missing));
new AlertDialog.Builder(fragment.getActivity())
.setTitle(R.string.missing_data)
.setMessage(missing)
.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
//nothing
}
})
.show();
return;
}
new AlertDialog.Builder(fragment.getActivity())
.setTitle(R.string.saving_data_title)
.setMessage(fragment.getString(R.string.saving_data_message,fragment.getString(R.string.new_entry)))
.setPositiveButton(android.R.string.yes, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// Edit the MissionFeature for a better JSON compliance
MissionUtils.alignPropertiesTypes(missionFeature, t.schema_seg.fields );
//edit uploadable state
HashMap<String,ArrayList<String>> uploadables = PersistenceUtils.loadUploadables(fragment.getSherlockActivity());
if(uploadables.containsKey(tableName)){
//list exists, add this entry
uploadables.get(tableName).add(missionFeature.id);
}else{
ArrayList<String> ids = new ArrayList<String>();
ids.add(missionFeature.id);
uploadables.put(tableName, ids);
}
PersistenceUtils.saveUploadables(fragment.getSherlockActivity(), uploadables);
//confirm save to user
Toast.makeText(fragment.getSherlockActivity(), fragment.getResources().getString(R.string.entry_saved_success,fragment.getResources().getString(R.string.new_entry)), Toast.LENGTH_LONG).show();
//done, navigate back to list of "new" surveys
Intent i = new Intent(fragment.getSherlockActivity(),PendingMissionListActivity.class);
i.putExtra(PendingMissionListActivity.ARG_CREATE_MISSIONFEATURE, true);
i.putExtra(PendingMissionListActivity.KEY_NAVIGATING_UP, true);
NavUtils.navigateUpTo(fragment.getSherlockActivity(), i);
}
})
.setNegativeButton(android.R.string.no, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
// do nothing
}
})
.show();
}
@Override
public void performAction(SherlockFragment fragment, FormAction action,
Mission m, Page p) {
// TODO Auto-generated method stub
}
}