001package org.hl7.fhir.r5.terminologies.expansion;
002
003import java.util.ArrayList;
004import java.util.List;
005
006import org.hl7.fhir.r5.model.ValueSet;
007import org.hl7.fhir.r5.terminologies.ValueSetUtilities;
008import org.hl7.fhir.r5.terminologies.utilities.TerminologyServiceErrorClass;
009
010/**
011 * Some value sets are just too big to expand. Instead of an expanded value set, 
012 * you get back an interface that can test membership - usually on a server somewhere
013 * 
014 * @author Grahame
015 */
016public class ValueSetExpansionOutcome {
017  private ValueSet valueset;
018  private String error;
019  private TerminologyServiceErrorClass errorClass;
020  private String txLink;
021  private List<String> allErrors = new ArrayList<>();
022  
023  public ValueSetExpansionOutcome(ValueSet valueset) {
024    super();
025    this.valueset = valueset;
026    this.error = null;
027  }
028  public ValueSetExpansionOutcome(ValueSet valueset, String error, TerminologyServiceErrorClass errorClass) {
029    super();
030    this.valueset = valueset;
031    this.error = error;
032    this.errorClass = errorClass;
033    allErrors.add(error);
034  }
035
036  public ValueSetExpansionOutcome(String error, TerminologyServiceErrorClass errorClass) {
037    this.valueset = null;
038    this.error = error;
039    this.errorClass = errorClass;
040    allErrors.add(error);
041  }
042  public ValueSetExpansionOutcome(String error, TerminologyServiceErrorClass errorClass, List<String> errList) {
043    this.valueset = null;
044    this.error = error;
045    this.errorClass = errorClass;
046    this.allErrors.addAll(errList);
047    if (!allErrors.contains(error)) {
048      allErrors.add(error);
049    }
050    if (!errList.contains(error)) {
051      errList.add(error);
052    }
053  }
054  
055  public ValueSet getValueset() {
056    return valueset;
057  }
058  public String getError() {
059    return error;
060  }
061  public TerminologyServiceErrorClass getErrorClass() {
062    return errorClass;
063  }
064  public String getTxLink() {
065    return txLink;
066  }
067  public ValueSetExpansionOutcome setTxLink(String txLink) {
068    this.txLink = txLink;
069    return this;
070  }
071  public List<String> getAllErrors() {
072    return allErrors;
073  }
074  
075  public boolean isOk() {
076    return (allErrors.isEmpty() || (allErrors.size() == 1 && allErrors.get(0) == null)) && error == null;
077  }
078  public int count() {
079    if (valueset == null) {
080      return 0; 
081    }
082    return ValueSetUtilities.countExpansion(valueset);
083  }
084}