package org.odk.collect.android.jr.extensions;
import org.javarosa.core.model.FormDef;
import org.javarosa.core.model.IDataReference;
import org.javarosa.core.model.instance.FormInstance;
import org.javarosa.core.model.instance.TreeReference;
import org.javarosa.model.xform.XPathReference;
import org.javarosa.xform.parse.IElementHandler;
import org.javarosa.xform.parse.XFormParser;
import org.kxml2.kdom.Element;
import android.content.Context;
/**
* Handler for <pollsensor> tags, which get processed by PollSensorActions.
* @author jschweers
*/
public class PollSensorExtensionParser implements IElementHandler {
/**
* (non-Javadoc)
* @see org.javarosa.xform.parse.IElementHandler#handle(org.javarosa.xform.parse.XFormParser, org.kxml2.kdom.Element, java.lang.Object)
*
* Handle pollsensor node, creating a new PollSensor action with the node that sensor data will be written to.
* @param p Parser
* @param e pollsensor Element
* @param parent FormDef for the form being parsed
*/
@Override
public void handle(XFormParser p, Element e, Object parent) {
String event = e.getAttributeValue(null, "event");
FormDef form = (FormDef) parent;
PollSensorAction action;
String ref = e.getAttributeValue(null, "ref");
if (ref != null) {
IDataReference dataRef = new XPathReference(ref);
dataRef = XFormParser.getAbsRef(dataRef, TreeReference.rootRef());
TreeReference treeRef = FormInstance.unpackReference(dataRef);
p.registerActionTarget(treeRef);
action = new PollSensorAction(treeRef);
}
else {
action = new PollSensorAction();
}
form.registerEventListener(event, action);
}
}