001package org.hl7.fhir.r4.utils; 002 003import org.hl7.fhir.r4.model.CodeableConcept; 004import org.hl7.fhir.r4.model.OperationOutcome; 005import org.hl7.fhir.r4.model.OperationOutcome.IssueSeverity; 006import org.hl7.fhir.r4.model.OperationOutcome.IssueType; 007import org.hl7.fhir.r4.model.OperationOutcome.OperationOutcomeIssueComponent; 008import org.hl7.fhir.r4.model.StringType; 009import org.hl7.fhir.utilities.validation.ValidationMessage; 010 011public class OperationOutcomeUtilities { 012 013 014 public static OperationOutcomeIssueComponent convertToIssue(ValidationMessage message, OperationOutcome op) { 015 OperationOutcomeIssueComponent issue = new OperationOutcome.OperationOutcomeIssueComponent(); 016 issue.setCode(convert(message.getType())); 017 if (message.getLocation() != null) { 018 StringType s = new StringType(); 019 s.setValue(message.getLocation()+(message.getLine()>= 0 && message.getCol() >= 0 ? " (line "+Integer.toString(message.getLine())+", col"+Integer.toString(message.getCol())+")" : "") ); 020 issue.getLocation().add(s); 021 } 022 issue.setSeverity(convert(message.getLevel())); 023 CodeableConcept c = new CodeableConcept(); 024 c.setText(message.getMessage()); 025 issue.setDetails(c); 026 if (message.getSource() != null) { 027 issue.getExtension().add(ToolingExtensions.makeIssueSource(message.getSource())); 028 } 029 return issue; 030 } 031 032 private static IssueSeverity convert(org.hl7.fhir.utilities.validation.ValidationMessage.IssueSeverity level) { 033 switch (level) { 034 case FATAL : return IssueSeverity.FATAL; 035 case ERROR : return IssueSeverity.ERROR; 036 case WARNING : return IssueSeverity.WARNING; 037 case INFORMATION : return IssueSeverity.INFORMATION; 038 case NULL : return IssueSeverity.NULL; 039 } 040 return IssueSeverity.NULL; 041 } 042 043 private static IssueType convert(org.hl7.fhir.utilities.validation.ValidationMessage.IssueType type) { 044 switch (type) { 045 case INVALID: 046 case STRUCTURE: return IssueType.STRUCTURE; 047 case REQUIRED: return IssueType.REQUIRED; 048 case VALUE: return IssueType.VALUE; 049 case INVARIANT: return IssueType.INVARIANT; 050 case SECURITY: return IssueType.SECURITY; 051 case LOGIN: return IssueType.LOGIN; 052 case UNKNOWN: return IssueType.UNKNOWN; 053 case EXPIRED: return IssueType.EXPIRED; 054 case FORBIDDEN: return IssueType.FORBIDDEN; 055 case SUPPRESSED: return IssueType.SUPPRESSED; 056 case PROCESSING: return IssueType.PROCESSING; 057 case NOTSUPPORTED: return IssueType.NOTSUPPORTED; 058 case DUPLICATE: return IssueType.DUPLICATE; 059 case NOTFOUND: return IssueType.NOTFOUND; 060 case TOOLONG: return IssueType.TOOLONG; 061 case CODEINVALID: return IssueType.CODEINVALID; 062 case EXTENSION: return IssueType.EXTENSION; 063 case TOOCOSTLY: return IssueType.TOOCOSTLY; 064 case BUSINESSRULE: return IssueType.BUSINESSRULE; 065 case CONFLICT: return IssueType.CONFLICT; 066 case INCOMPLETE: return IssueType.INCOMPLETE; 067 case TRANSIENT: return IssueType.TRANSIENT; 068 case LOCKERROR: return IssueType.LOCKERROR; 069 case NOSTORE: return IssueType.NOSTORE; 070 case EXCEPTION: return IssueType.EXCEPTION; 071 case TIMEOUT: return IssueType.TIMEOUT; 072 case THROTTLED: return IssueType.THROTTLED; 073 case INFORMATIONAL: return IssueType.INFORMATIONAL; 074 case NULL: return IssueType.NULL; 075 } 076 return IssueType.NULL; 077 } 078}