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