package com.rapidftr.datastore;
import java.util.Vector;
import com.rapidftr.model.Child;
import com.rapidftr.utilities.ChildSorter;
import com.rapidftr.utilities.Store;
public class ChildrenRecordStore {
public static final String GET_ALL_CHILDREN_KEY = "children";
private final Store store;
private ChildSorter childSorter;
public ChildrenRecordStore(Store store) {
this(store, new ChildSorter());
}
public ChildrenRecordStore(Store store, ChildSorter childSorter) {
this.store = store;
this.childSorter = childSorter;
}
public synchronized void addOrUpdate(Child child) {
if (child == null) {
return;
}
Vector children = store.getVector(GET_ALL_CHILDREN_KEY);
if (children.contains(child)) {
children.setElementAt(child, children.indexOf(child));
} else {
children.addElement(child);
}
store.setVector(GET_ALL_CHILDREN_KEY, children);
}
public Children getAll() {
return new Children(store.getVector(GET_ALL_CHILDREN_KEY), childSorter);
}
public void deleteAll() {
store.clear();
}
public Children search(final String query) {
final Vector results = new Vector();
getAll().forEachChild(new ChildAction() {
public void execute(Child child) {
if (child.matches(query.toLowerCase())) {
results.addElement(child);
}
}
});
return new Children(results, childSorter);
}
public Child getChildAt(int index) {
Vector vector = store.getVector(GET_ALL_CHILDREN_KEY);
return (Child) vector.elementAt(index);
}
public Children getAllSortedByName() {
return getAll().sortBy(new StringField(Child.NAME), true);
}
public Children getAllSortedByRecentlyAdded() {
return getAll().sortBy(new DateField(Child.CREATED_AT_KEY), false);
}
public Children getAllSortedByRecentlyUpdated() {
return getAll().sortBy(new DateField(Child.LAST_UPDATED_KEY), false);
}
}