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