package org.odk.collect.android.jr.extensions;
import java.util.Date;
import java.util.Vector;
import org.javarosa.core.model.condition.EvaluationContext;
import org.javarosa.core.model.condition.IFunctionHandler;
import org.javarosa.xpath.XPathUnsupportedException;
import org.javarosa.xpath.expr.XPathFuncExpr;
import org.odk.collect.android.utilities.EthiopianDateHelper;
import android.content.Context;
/**
* @author ctsims
*
*/
public class CalendaredDateFormatHandler implements IFunctionHandler {
private Context context;
public CalendaredDateFormatHandler(Context context) {
this.context = context;
}
/*
* (non-Javadoc)
* @see org.javarosa.core.model.condition.IFunctionHandler#getName()
*/
@Override
public String getName() {
return "format-date-for-calendar";
}
/*
* (non-Javadoc)
* @see org.javarosa.core.model.condition.IFunctionHandler#getPrototypes()
*/
@Override
public Vector getPrototypes() {
Vector v = new Vector();
v.add(new Class[] {Date.class, String.class});
return v;
}
/*
* (non-Javadoc)
* @see org.javarosa.core.model.condition.IFunctionHandler#rawArgs()
*/
@Override
public boolean rawArgs() {
return false;
}
/*
* (non-Javadoc)
* @see org.javarosa.core.model.condition.IFunctionHandler#realTime()
*/
@Override
public boolean realTime() {
return false;
}
/*
* (non-Javadoc)
* @see org.javarosa.core.model.condition.IFunctionHandler#eval(java.lang.Object[], org.javarosa.core.model.condition.EvaluationContext)
*/
@Override
public Object eval(Object[] args, EvaluationContext ec) {
if("".equals(args[0])) { return "";}
Date d = (Date)XPathFuncExpr.toDate(args[0]);
String calendar = (String)args[1];
if("ethiopian".equals(calendar)) {
return EthiopianDateHelper.ConvertToEthiopian(context, d);
} else {
throw new XPathUnsupportedException("Unsupported calendar type: " + calendar);
}
}
}