001package org.hl7.fhir.r5.terminologies.validation;
002
003import java.util.ArrayList;
004import java.util.Collections;
005import java.util.List;
006
007import lombok.Getter;
008import lombok.Setter;
009import org.hl7.fhir.r5.model.OperationOutcome.IssueSeverity;
010import org.hl7.fhir.r5.model.OperationOutcome.OperationOutcomeIssueComponent;
011import org.hl7.fhir.r5.terminologies.utilities.TerminologyServiceErrorClass;
012import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
013import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
014
015@MarkedToMoveToAdjunctPackage
016public class ValidationProcessInfo {
017  private TerminologyServiceErrorClass err;
018  private List<OperationOutcomeIssueComponent> issues = new ArrayList<>();
019  @Getter @Setter
020  private String foundVersion;
021
022  public ValidationProcessInfo() {
023  }
024  
025  public ValidationProcessInfo(List<OperationOutcomeIssueComponent> issues) {
026    this.issues = issues;
027  }
028  public TerminologyServiceErrorClass getErr() {
029    return err;
030  }
031  public void setErr(TerminologyServiceErrorClass err) {
032    this.err = err;
033  }
034  
035  public List<OperationOutcomeIssueComponent> getIssues() {
036    return issues;
037  }
038  public void addIssue(List<OperationOutcomeIssueComponent> issues) {
039    this.issues.addAll(issues);
040    
041  }
042  public boolean hasErrors() {
043    for (OperationOutcomeIssueComponent issue : issues) {
044      if (issue.getSeverity() == IssueSeverity.FATAL || issue.getSeverity() == IssueSeverity.ERROR) {
045        return true;
046      }
047    }
048    return false;
049  }
050
051  public List<String> summaryList() {
052    List<String> msgs = new ArrayList<>();
053    for (OperationOutcomeIssueComponent issue : issues) {
054      msgs.add(issue.getDetails().getText());
055    }
056    Collections.sort(msgs);
057    return msgs;
058  }
059
060  public boolean hasMessage(String msg) {
061    for (OperationOutcomeIssueComponent iss : issues) {
062      if (msg.equals(iss.getDetails().getText())) {
063        return true;        
064      }
065    }
066    return false;
067  }
068
069  public boolean hasNotFound(String system) {
070    for (OperationOutcomeIssueComponent iss : issues) {
071      if (iss.getDetails().hasCoding("http://hl7.org/fhir/tools/CodeSystem/tx-issue-type", "not-found") &&
072          iss.getDetails().hasText() && iss.getDetails().getText().contains(system)) {
073        return true;
074      }
075    }
076    return false;
077  }
078}