package org.hl7.fhir.dstu3.terminologies; import java.io.FileNotFoundException; import java.io.IOException; import org.hl7.fhir.dstu3.model.ExpansionProfile; import org.hl7.fhir.dstu3.model.ValueSet; public interface ValueSetExpander { public enum TerminologyServiceErrorClass { UNKNOWN, NOSERVICE, SERVER_ERROR, VALUESET_UNSUPPORTED; public boolean isInfrastructure() { return this == NOSERVICE || this == SERVER_ERROR || this == VALUESET_UNSUPPORTED; } } public class ETooCostly extends Exception { public ETooCostly(String msg) { super(msg); } } /** * Some value sets are just too big to expand. Instead of an expanded value set, * you get back an interface that can test membership - usually on a server somewhere * * @author Grahame */ public class ValueSetExpansionOutcome { private ValueSet valueset; private ValueSetChecker service; private String error; private TerminologyServiceErrorClass errorClass; public ValueSetExpansionOutcome(ValueSet valueset) { super(); this.valueset = valueset; this.service = null; this.error = null; } public ValueSetExpansionOutcome(ValueSet valueset, String error, TerminologyServiceErrorClass errorClass) { super(); this.valueset = valueset; this.service = null; this.error = error; this.errorClass = errorClass; } public ValueSetExpansionOutcome(ValueSetChecker service, String error, TerminologyServiceErrorClass errorClass) { super(); this.valueset = null; this.service = service; this.error = error; this.errorClass = errorClass; } public ValueSetExpansionOutcome(String error, TerminologyServiceErrorClass errorClass) { this.valueset = null; this.service = null; this.error = error; this.errorClass = errorClass; } public ValueSet getValueset() { return valueset; } public ValueSetChecker getService() { return service; } public String getError() { return error; } public TerminologyServiceErrorClass getErrorClass() { return errorClass; } } /** * * @param source the value set definition to expand * @param profile a profile affecting the outcome. If you don't supply a profile, the default internal expansion profile will be used. * * @return * @throws ETooCostly * @throws FileNotFoundException * @throws IOException */ public ValueSetExpansionOutcome expand(ValueSet source, ExpansionProfile profile) throws ETooCostly, FileNotFoundException, IOException; }