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    this.allErrors.addAll(errList);
055    if (!allErrors.contains(error)) {
056      allErrors.add(error);
057    }
058    if (!errList.contains(error)) {
059      errList.add(error);
060    }
061  }
062  
063  public ValueSetExpansionOutcome(String error, TerminologyServiceErrorClass errorClass, List<String> errList, List<OperationOutcomeIssueComponent> issueList) {
064    this.valueset = null;
065    this.error = error;
066    this.errorClass = errorClass;
067    this.allErrors.addAll(errList);
068    if (!allErrors.contains(error)) {
069      allErrors.add(error);
070    }
071    if (!errList.contains(error)) {     
072      errList.add(error);
073    }
074    this.issues = issueList;
075  }
076  
077  public ValueSet getValueset() {
078    return valueset;
079  }
080  public String getError() {
081    return error;
082  }
083  public TerminologyServiceErrorClass getErrorClass() {
084    return errorClass;
085  }
086  public String getTxLink() {
087    return txLink;
088  }
089  public ValueSetExpansionOutcome setTxLink(String txLink) {
090    this.txLink = txLink;
091    return this;
092  }
093  public List<String> getAllErrors() {
094    return allErrors;
095  }
096  
097  public boolean isFromServer() {
098    return fromServer;
099  }
100  public boolean isOk() {
101    return (allErrors.isEmpty() || (allErrors.size() == 1 && allErrors.get(0) == null)) && error == null;
102  }
103  public int count() {
104    if (valueset == null) {
105      return 0; 
106    }
107    return ValueSetUtilities.countExpansion(valueset);
108  }
109  public List<OperationOutcomeIssueComponent> getIssues() {
110    return issues;
111  }
112}