package org.activityinfo.model.type.number;
import org.activityinfo.model.form.FormClass;
import org.activityinfo.model.form.FormField;
import org.activityinfo.model.resource.Record;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.resource.ResourceIdPrefixType;
import org.activityinfo.model.type.*;
/**
* A value types that describes a real-valued quantity and its units.
*/
public class QuantityType implements ParametrizedFieldType {
public static class TypeClass implements ParametrizedFieldTypeClass, RecordFieldTypeClass {
private TypeClass() {}
@Override
public String getId() {
return "QUANTITY";
}
@Override
public QuantityType createType() {
return new QuantityType()
.setUnits("households");
}
@Override
public QuantityType deserializeType(Record typeParameters) {
return new QuantityType()
.setUnits(typeParameters.isString("units"));
}
@Override
public FormClass getParameterFormClass() {
FormClass formClass = new FormClass(ResourceIdPrefixType.TYPE.id("quantity"));
formClass.addElement(new FormField(ResourceId.valueOf("units"))
.setType(FREE_TEXT.createType())
.setLabel("Units")
.setDescription("Describes the unit of measurement. For example: 'households', 'individuals'," +
" 'meters', etc."));
return formClass;
}
@Override
public FieldValue deserialize(Record record) {
return Quantity.fromRecord(record);
}
};
public static final TypeClass TYPE_CLASS = new TypeClass();
private String units;
public QuantityType() {
}
public QuantityType(String units) {
this.units = units;
}
public String getUnits() {
return units;
}
public QuantityType setUnits(String units) {
this.units = units;
return this;
}
@Override
public ParametrizedFieldTypeClass getTypeClass() {
return TYPE_CLASS;
}
@Override
public Record getParameters() {
return new Record()
.set("units", units)
.set("classId", getTypeClass().getParameterFormClass().getId());
}
@Override
public boolean isValid() {
return true;
}
@Override
public String toString() {
return "QuantityType";
}
}