package org.activityinfo.server.endpoint.odk;
import org.activityinfo.model.legacy.CuidAdapter;
import org.activityinfo.model.resource.ResourceId;
import org.activityinfo.model.type.FieldValue;
import org.activityinfo.model.type.ReferenceValue;
import java.util.Iterator;
import java.util.Set;
class LegacyReferenceFieldValueParser implements FieldValueParser {
final private char domain;
LegacyReferenceFieldValueParser(Set<ResourceId> range) {
char domain;
Iterator<ResourceId> iterator = range.iterator();
if (iterator.hasNext()) {
domain = iterator.next().getDomain();
} else {
throw new IllegalArgumentException("A ReferenceType with an empty range cannot be used to parse instances");
}
for (ResourceId resourceId : range) {
if (resourceId.getDomain() != domain) throw new IllegalArgumentException("A ReferenceType is inconsistent");
}
this.domain = Character.toLowerCase(domain);
}
@Override
public FieldValue parse(String text) {
if (text == null) throw new IllegalArgumentException("Malformed Element passed to OdkFieldValueParser.parse()");
return new ReferenceValue(CuidAdapter.cuid(domain, Integer.parseInt(text)));
}
}