package org.activityinfo.server.endpoint.odk; import com.google.common.base.Preconditions; import org.activityinfo.model.form.FormClass; import org.activityinfo.model.form.FormField; import org.activityinfo.model.form.FormInstance; import org.activityinfo.model.legacy.CuidAdapter; import org.activityinfo.model.resource.ResourceId; import java.util.LinkedHashMap; import static org.activityinfo.server.endpoint.odk.FieldValueParserFactory.fromFieldType; public class XFormInstanceReader { final private LinkedHashMap<String, Object> array[]; final private FormClass formClass; public XFormInstanceReader(LinkedHashMap<String, Object> array[], FormClass formClass) { Preconditions.checkNotNull(array, formClass); this.array = array; this.formClass = formClass; } public FormInstance[] build() { final int length = array.length; final ResourceId formClassId = formClass.getId(); final FormInstance formInstances[] = new FormInstance[length]; for (int i = 0; i < length; i++) { formInstances[i] = new FormInstance(CuidAdapter.newLegacyFormInstanceId(formClassId), formClassId); } for (FormField formField : formClass.getFields()) { final FieldValueParser fieldValueParser = fromFieldType(formField.getType(), false, false); final String code = formField.getCode(); for (int i = 0; i < length; i++) { final LinkedHashMap<String, Object> map = array[i]; final FormInstance formInstance = formInstances[i]; if (map != null) { final Object value = map.get(code); if (value instanceof String) { formInstance.set(formField.getId(), fieldValueParser.parse((String) value)); } } } } return formInstances; } }