package org.openrosa.client.model;
import java.io.Serializable;
import org.openrosa.client.xforms.XformConstants;
import org.openrosa.client.xforms.XmlUtil;
import com.google.gwt.xml.client.Element;
/**
*
* @author daniel
*
*/
public class Calculation implements Serializable{
/** The unique identifier of the question whose value to calculate. */
private int questionId = ModelConstants.NULL_ID;
/** The calculate xpath expression. */
private String calculateExpression = ModelConstants.EMPTY_STRING;
public Calculation(Calculation calculation) {
this(calculation.getQuestionId(),calculation.getCalculateExpression());
}
public Calculation(int questionId, String calculateExpression) {
super();
this.questionId = questionId;
this.calculateExpression = calculateExpression.replace(">",">").replace("<","<");
}
public int getQuestionId() {
return questionId;
}
public void setQuestionId(int questionId) {
this.questionId = questionId;
}
public String getCalculateExpression() {
return calculateExpression;
}
public void setCalculateExpression(String calculateExpression) {
this.calculateExpression = calculateExpression;
}
public void updateDoc(FormDef formDef){
IFormElement questionDef = formDef.getElement(questionId);
assert(questionDef != null);
Element node = questionDef.getBindNode();
if(node == null){
return;
}
String expr = getCalculateExpression();
// expr = expr.replace(">", ">").replace("<", "<");
String oldexpr = node.getAttribute(XformConstants.ATTRIBUTE_NAME_CALCULATE);
if(expr == null || expr.isEmpty() || (oldexpr != null && oldexpr.isEmpty())){
node.removeAttribute(XformConstants.ATTRIBUTE_NAME_CALCULATE);
}else{
expr = XmlUtil.escapeXMLAttribute(expr);
node.setAttribute(XformConstants.ATTRIBUTE_NAME_CALCULATE,expr);
}
}
}