/** * */ package org.commcare.android.models; import org.commcare.suite.model.DetailField; import org.commcare.suite.model.Text; import org.javarosa.core.model.condition.EvaluationContext; import org.javarosa.xpath.XPathException; /** * @author ctsims * */ public class AsyncEntity<T> extends Entity<T>{ DetailField[] fields; Object[] data; String[] sortData; EvaluationContext context; public AsyncEntity(DetailField[] fields, EvaluationContext ec, T t) { super(t); this.fields = fields; this.data = new Object[fields.length]; this.sortData = new String[fields.length]; this.context = ec; } public Object getField(int i) { if(data[i] == null) { try { data[i] = fields[i].getTemplate().evaluate(context); } catch(XPathException xpe) { xpe.printStackTrace(); data[i] = "<invalid xpath: " + xpe.getMessage() + ">"; } } return data[i]; } public String getSortField(int i) { if(sortData[i] == null) { try { Text sortText = fields[i].getSort(); if(sortText == null) { sortData[i] = getFieldString(i); } else { sortData[i] = sortText.evaluate(context); } } catch(XPathException xpe) { xpe.printStackTrace(); sortData[i] = "<invalid xpath: " + xpe.getMessage() + ">"; } } return sortData[i]; } public int getNumFields() { return fields.length; } }