
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}