package org.activityinfo.server.endpoint.odk;
import com.google.api.client.util.Lists;
import com.google.common.collect.Maps;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.type.FieldValue;
import org.activityinfo.model.type.ReferenceValue;
import org.activityinfo.model.type.enumerated.EnumItem;
import org.activityinfo.model.type.enumerated.EnumType;
import java.util.List;
import java.util.Map;
class CodeEnumFieldValueParser implements FieldValueParser {
final private Map<String, ResourceId> values;
CodeEnumFieldValueParser(EnumType enumType) {
values = Maps.newHashMapWithExpectedSize(enumType.getValues().size());
for (EnumItem value : enumType.getValues()) {
values.put(value.getCode(), value.getId());
}
}
@Override
public FieldValue parse(String text) {
if (text == null) throw new IllegalArgumentException("Malformed Element passed to OdkFieldValueParser.parse()");
String selected[] = text.split(" ");
List<ResourceId> resourceIds = Lists.newArrayListWithCapacity(selected.length);
for (String item : selected) {
ResourceId resourceId = values.get(item);
if (resourceId != null) resourceIds.add(resourceId);
}
return new ReferenceValue(resourceIds); // ReferenceValue not EnumFieldValue, since that way it'll at least work
}
}