package com.rapidftr.screens;
import net.rim.device.api.io.http.HttpDateParser;
import net.rim.device.api.ui.UiApplication;
import net.rim.device.api.ui.component.Dialog;
import net.rim.device.api.ui.component.RichTextField;
import net.rim.device.api.ui.component.SeparatorField;
import com.rapidftr.model.Child;
import com.rapidftr.model.ChildHistories;
import com.rapidftr.model.ChildHistoryItem;
import com.rapidftr.model.HistoryAction;
import com.rapidftr.screens.internal.CustomScreen;
import com.rapidftr.utilities.DateFormatter;
public class ChildHistoryScreen extends CustomScreen {
private Child child;
private DateFormatter dateFormatter;
public ChildHistoryScreen() {
super();
}
public ChildHistoryScreen(DateFormatter dateFormatter) {
this();
this.dateFormatter = dateFormatter;
}
public void setChild(Child child) {
clearFields();
this.child = child;
try {
ChildHistories histories = this.child.getHistory();
if (histories.isNotEmpty()) {
layoutScreen(histories);
} else {
add(new RichTextField("No History Logs Present"));
}
} catch (final Exception e) {
showErrorDialog(e);
}
}
private void layoutScreen(ChildHistories histories) {
histories.forEachHistory(new HistoryAction() {
public void execute(ChildHistoryItem historyItem) {
add(new RichTextField(getDescription(historyItem)));
add(new SeparatorField());
}
});
}
private void showErrorDialog(final Exception e) {
UiApplication.getUiApplication().invokeLater(new Runnable() {
public void run() {
Dialog.alert("Error Occured while displaying change log "
+ e.getMessage());
controller.popScreen();
}
});
}
private String getDescription(ChildHistoryItem childHistoryItem) {
String description = childHistoryItem.getFieldChangesDescription();
long changeTime = HttpDateParser.parse(childHistoryItem
.getChangeDateTime());
return dateFormatter.format(changeTime) + "\n" + description;
}
}