package com.rapidftr.controllers;
import com.rapidftr.controllers.internal.Controller;
import com.rapidftr.controllers.internal.Dispatcher;
import com.rapidftr.controllers.internal.SaveDialogHandler;
import com.rapidftr.datastore.ChildrenRecordStore;
import com.rapidftr.datastore.FormStore;
import com.rapidftr.form.Forms;
import com.rapidftr.model.Child;
import com.rapidftr.screens.ManageChildScreen;
import com.rapidftr.screens.SnapshotScreen;
import com.rapidftr.screens.internal.UiStack;
import com.rapidftr.utilities.CustomDialog;
import com.rapidftr.utilities.DateFormatter;
import com.rapidftr.utilities.ImageCaptureListener;
public class ManageChildController extends Controller implements SaveDialogHandler {
private final FormStore store;
private ChildrenRecordStore childRecordStore;
private Child childToEdit;
private static String[] REQUIRED_FIELDS = {};
CustomDialog customDialog = new CustomDialog();
public ManageChildController(ManageChildScreen screen, UiStack uiStack,
FormStore store, ChildrenRecordStore childRecordStore, Dispatcher dispatcher) {
super(screen, uiStack, dispatcher);
this.store = store;
this.childRecordStore = childRecordStore;
}
public void editChild(Child child, String selectedTab) {
childToEdit = child;
getManageChildScreen().setForms(store.getForms(), selectedTab);
show();
}
public void newChild() {
getManageChildScreen().setForms(store.getForms());
show();
}
private ManageChildScreen getManageChildScreen() {
return ((ManageChildScreen) currentScreen);
}
public void takeSnapshotAndUpdateWithNewImage(
ImageCaptureListener imageCaptureListener) {
SnapshotController snapshotController = new SnapshotController(
new SnapshotScreen(), uiStack, dispatcher, imageCaptureListener);
snapshotController.show();
}
public void saveChild(Child child) {
childRecordStore.addOrUpdate(child);
}
public void viewChild(){
dispatcher.viewChild(childToEdit);
}
public void setChild(Child child){
childToEdit = child;
}
public Child getChild() {
return childToEdit;
}
public void onSave() {
homeScreen();
}
public void onCancel() {
// Don't do any thing
}
public void onDiscard() {
homeScreen();
}
public String getScreenTitle() {
if (childToEdit != null) {
return "Edit Child Record";
}
return "Register Child";
}
public void setCustomDialog(CustomDialog customDialog){
this.customDialog = customDialog;
}
private String onSaveChildClicked(Forms forms, DateFormatter dateFormatter) {
if (childToEdit == null) {
childToEdit = Child.create(forms, dateFormatter
.getCurrentFormattedDateTime());
} else {
childToEdit.update(forms, dateFormatter.getCurrentFormattedDateTime());
childToEdit.setField(Child.LAST_UPDATED_KEY, dateFormatter
.getCurrentFormattedDateTime());
}
String invalidDataField;
if (!(invalidDataField = validateRequiredFields()).equals("")) {
return invalidDataField;
}
saveChild(childToEdit);
return null;
}
public boolean validateOnSave(Forms forms, DateFormatter dateFormatter) {
String invalidDataField = onSaveChildClicked(forms, dateFormatter);
if (invalidDataField != null) {
customDialog.alert("Please input the following mandatory field(s)"
+ invalidDataField + " .");
return false;
}
return true;
}
private String validateRequiredFields() {
StringBuffer invalidFields = new StringBuffer("");
for (int i = 0; i < REQUIRED_FIELDS.length; i++) {
if (childToEdit.getField(REQUIRED_FIELDS[i]) == null
|| childToEdit.getField(REQUIRED_FIELDS[i]).equals("")) {
invalidFields.append(" ," + REQUIRED_FIELDS[i]);
}
}
return invalidFields.toString();
}
}