/** * */ package org.commcare.android.cases; import java.util.HashSet; import java.util.Hashtable; import java.util.Vector; import org.commcare.android.database.SqlStorage; import org.commcare.android.database.SqlStorageIterator; import org.commcare.android.database.user.models.ACase; import org.commcare.cases.instance.CaseChildElement; import org.commcare.cases.instance.CaseInstanceTreeElement; import org.commcare.cases.model.Case; import org.javarosa.core.model.instance.AbstractTreeElement; import org.javarosa.core.services.storage.IStorageIterator; import org.javarosa.core.util.DataUtil; /** * @author ctsims * */ public class AndroidCaseInstanceTreeElement extends CaseInstanceTreeElement { SqlStorageIterator<ACase> iter; public AndroidCaseInstanceTreeElement(AbstractTreeElement instanceRoot, SqlStorage<ACase> storage, boolean reportMode) { super(instanceRoot, storage, reportMode); } protected synchronized void getCases() { if(cases != null) { return; } objectIdMapping = new Hashtable<Integer, Integer>(); cases = new Vector<CaseChildElement>(); int mult = 0; for(IStorageIterator i = ((SqlStorage<ACase>)storage).iterate(false); i.hasMore();) { int id = i.nextID(); cases.addElement(new CaseChildElement(this, id, null, mult)); objectIdMapping.put(DataUtil.integer(id), DataUtil.integer(mult)); mult++; } } /* * (non-Javadoc) * @see org.commcare.cases.util.StorageBackedTreeRoot#union(java.util.Vector, java.util.Vector) */ @Override protected Vector<Integer> union(Vector<Integer> selectedCases, Vector<Integer> cases) { //This is kind of (ok, so really) awkward looking, but we can't use sets in //ccj2me (Thanks, Nokia!) also, there's no _collections_ interface in //j2me (thanks Sun!) so this is what we get. HashSet<Integer> selected = new HashSet<Integer>(selectedCases); selected.addAll(selectedCases); HashSet<Integer> other = new HashSet<Integer>(); other.addAll(cases); selected.retainAll(other); selectedCases.clear(); selectedCases.addAll(selected); return selectedCases; } }