package org.activityinfo.server.endpoint.odk;
import org.activityinfo.model.type.FieldType;
import org.activityinfo.model.type.NarrativeType;
import org.activityinfo.model.type.ReferenceType;
import org.activityinfo.model.type.barcode.BarcodeType;
import org.activityinfo.model.type.enumerated.EnumType;
import org.activityinfo.model.type.geo.GeoPointType;
import org.activityinfo.model.type.image.ImageType;
import org.activityinfo.model.type.number.QuantityType;
import org.activityinfo.model.type.primitive.BooleanType;
import org.activityinfo.model.type.primitive.TextType;
import org.activityinfo.model.type.time.LocalDateType;
public class FieldValueParserFactory {
static public FieldValueParser fromFieldType(FieldType fieldType, boolean odk, boolean legacy) {
if (fieldType instanceof BarcodeType) return new BarcodeFieldValueParser();
if (fieldType instanceof BooleanType) return new BooleanFieldValueParser();
if (fieldType instanceof EnumType) {
if (odk) {
if (legacy) {
return new LegacyEnumFieldValueParser();
} else {
return new IdEnumFieldValueParser();
}
} else {
return new CodeEnumFieldValueParser((EnumType) fieldType);
}
}
if (fieldType instanceof GeoPointType) return new GeoPointFieldValueParser();
if (fieldType instanceof ImageType) return new ImageFieldValueParser();
if (fieldType instanceof LocalDateType) return new LocalDateFieldValueParser();
if (fieldType instanceof NarrativeType) {
if (legacy) {
return new TextFieldValueParser();
} else {
return new NarrativeFieldValueParser();
}
}
if (fieldType instanceof QuantityType) return new QuantityFieldValueParser((QuantityType) fieldType);
if (fieldType instanceof ReferenceType) {
if (legacy) {
return new LegacyReferenceFieldValueParser(((ReferenceType) fieldType).getRange());
} else {
return new ReferenceFieldValueParser();
}
}
if (fieldType instanceof TextType) return new TextFieldValueParser();
// If this happens, it means this class needs to be expanded to support the new FieldType class.
throw new IllegalArgumentException("Unknown FieldType passed to FieldValueParserFactory.get()");
}
}