Fix build
This commit is contained in:
parent
cf1ea276c9
commit
338e83e4e8
|
@ -187,8 +187,9 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
|||
|
||||
@Override
|
||||
public Set<String> typeTails() {
|
||||
return new HashSet<String>(Arrays.asList("Integer", "UnsignedInt", "PositiveInt", "Decimal", "DateTime", "Date", "Time", "Instant", "String", "Uri", "Oid", "Uuid", "Id", "Boolean", "Code", "Markdown", "Base64Binary", "Coding", "CodeableConcept", "Attachment", "Identifier", "Quantity",
|
||||
"SampledData", "Range", "Period", "Ratio", "HumanName", "Address", "ContactPoint", "Timing", "Reference", "Annotation", "Signature", "Meta"));
|
||||
return new HashSet<String>(Arrays.asList("Integer", "UnsignedInt", "PositiveInt", "Decimal", "DateTime", "Date", "Time", "Instant", "String", "Uri", "Oid", "Uuid", "Id", "Boolean", "Code",
|
||||
"Markdown", "Base64Binary", "Coding", "CodeableConcept", "Attachment", "Identifier", "Quantity", "SampledData", "Range", "Period", "Ratio", "HumanName", "Address", "ContactPoint",
|
||||
"Timing", "Reference", "Annotation", "Signature", "Meta"));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -229,40 +230,42 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
|||
public ValidationResult validateCode(String theSystem, String theCode, String theDisplay, ValueSet theVs) {
|
||||
ValueSetExpansionOutcome expandedValueSet = expand(theVs);
|
||||
for (ValueSetExpansionContainsComponent next : expandedValueSet.getValueset().getExpansion().getContains()) {
|
||||
if (next.getSystem().equals(theSystem) && next.getCode().equals(theCode)) {
|
||||
ConceptDefinitionComponent definition = new ConceptDefinitionComponent();
|
||||
definition.setCode(next.getCode());
|
||||
definition.setDisplay(next.getDisplay());
|
||||
ValidationResult retVal = new ValidationResult(definition);
|
||||
return retVal;
|
||||
if (next.getCode().equals(theCode)) {
|
||||
if (theSystem == null || next.getSystem().equals(theSystem)) {
|
||||
ConceptDefinitionComponent definition = new ConceptDefinitionComponent();
|
||||
definition.setCode(next.getCode());
|
||||
definition.setDisplay(next.getDisplay());
|
||||
ValidationResult retVal = new ValidationResult(definition);
|
||||
return retVal;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// for (UriType nextComposeImport : theVs.getCompose().getImport()) {
|
||||
// if (isNotBlank(nextComposeImport.getValue())) {
|
||||
// aaa
|
||||
// }
|
||||
// }
|
||||
// for (ConceptSetComponent nextComposeConceptSet : theVs.getCompose().getInclude()) {
|
||||
// if (theSystem == null || StringUtils.equals(theSystem, nextComposeConceptSet.getSystem())) {
|
||||
// if (nextComposeConceptSet.getConcept().isEmpty()) {
|
||||
// ValidationResult retVal = validateCode(nextComposeConceptSet.getSystem(), theCode, theDisplay);
|
||||
// if (retVal != null && retVal.isOk()) {
|
||||
// return retVal;
|
||||
// }
|
||||
// } else {
|
||||
// for (ConceptReferenceComponent nextComposeCode : nextComposeConceptSet.getConcept()) {
|
||||
// ConceptDefinitionComponent conceptDef = new ConceptDefinitionComponent();
|
||||
// conceptDef.setCode(nextComposeCode.getCode());
|
||||
// conceptDef.setDisplay(nextComposeCode.getDisplay());
|
||||
// ValidationResult retVal = validateCodeSystem(theCode, conceptDef);
|
||||
// if (retVal != null && retVal.isOk()) {
|
||||
// return retVal;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
// for (UriType nextComposeImport : theVs.getCompose().getImport()) {
|
||||
// if (isNotBlank(nextComposeImport.getValue())) {
|
||||
// aaa
|
||||
// }
|
||||
// }
|
||||
// for (ConceptSetComponent nextComposeConceptSet : theVs.getCompose().getInclude()) {
|
||||
// if (theSystem == null || StringUtils.equals(theSystem, nextComposeConceptSet.getSystem())) {
|
||||
// if (nextComposeConceptSet.getConcept().isEmpty()) {
|
||||
// ValidationResult retVal = validateCode(nextComposeConceptSet.getSystem(), theCode, theDisplay);
|
||||
// if (retVal != null && retVal.isOk()) {
|
||||
// return retVal;
|
||||
// }
|
||||
// } else {
|
||||
// for (ConceptReferenceComponent nextComposeCode : nextComposeConceptSet.getConcept()) {
|
||||
// ConceptDefinitionComponent conceptDef = new ConceptDefinitionComponent();
|
||||
// conceptDef.setCode(nextComposeCode.getCode());
|
||||
// conceptDef.setDisplay(nextComposeCode.getDisplay());
|
||||
// ValidationResult retVal = validateCodeSystem(theCode, conceptDef);
|
||||
// if (retVal != null && retVal.isOk()) {
|
||||
// return retVal;
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
return new ValidationResult(IssueSeverity.ERROR, "Unknown code[" + theCode + "] in system[" + theSystem + "]");
|
||||
}
|
||||
|
||||
|
|
|
@ -5,32 +5,27 @@ import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
|||
|
||||
import java.io.InputStream;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Map.Entry;
|
||||
import java.util.Set;
|
||||
|
||||
import org.apache.commons.lang3.builder.ToStringBuilder;
|
||||
import org.apache.commons.lang3.builder.ToStringStyle;
|
||||
import org.hl7.fhir.dstu3.exceptions.DefinitionException;
|
||||
import org.hl7.fhir.dstu3.exceptions.FHIRException;
|
||||
import org.hl7.fhir.dstu3.formats.FormatUtilities;
|
||||
import org.hl7.fhir.dstu3.metamodel.Element;
|
||||
import org.hl7.fhir.dstu3.metamodel.Element.SpecialElement;
|
||||
import org.hl7.fhir.dstu3.metamodel.JsonParser;
|
||||
import org.hl7.fhir.dstu3.metamodel.Manager;
|
||||
import org.hl7.fhir.dstu3.metamodel.Manager.FhirFormat;
|
||||
import org.hl7.fhir.dstu3.metamodel.ParserBase.ValidationPolicy;
|
||||
import org.hl7.fhir.dstu3.metamodel.ParserBase;
|
||||
import org.hl7.fhir.dstu3.metamodel.ParserBase.ValidationPolicy;
|
||||
import org.hl7.fhir.dstu3.metamodel.XmlParser;
|
||||
import org.hl7.fhir.dstu3.metamodel.Element.SpecialElement;
|
||||
import org.hl7.fhir.dstu3.model.Address;
|
||||
import org.hl7.fhir.dstu3.model.Attachment;
|
||||
import org.hl7.fhir.dstu3.model.Base;
|
||||
import org.hl7.fhir.dstu3.model.Bundle;
|
||||
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
||||
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||
import org.hl7.fhir.dstu3.model.Coding;
|
||||
import org.hl7.fhir.dstu3.model.ContactPoint;
|
||||
|
@ -50,7 +45,6 @@ import org.hl7.fhir.dstu3.model.IntegerType;
|
|||
import org.hl7.fhir.dstu3.model.OperationOutcome.IssueSeverity;
|
||||
import org.hl7.fhir.dstu3.model.OperationOutcome.IssueType;
|
||||
import org.hl7.fhir.dstu3.model.Period;
|
||||
import org.hl7.fhir.dstu3.model.Property;
|
||||
import org.hl7.fhir.dstu3.model.Quantity;
|
||||
import org.hl7.fhir.dstu3.model.Questionnaire;
|
||||
import org.hl7.fhir.dstu3.model.Questionnaire.QuestionnaireItemComponent;
|
||||
|
@ -60,7 +54,6 @@ import org.hl7.fhir.dstu3.model.Range;
|
|||
import org.hl7.fhir.dstu3.model.Ratio;
|
||||
import org.hl7.fhir.dstu3.model.Reference;
|
||||
import org.hl7.fhir.dstu3.model.Resource;
|
||||
import org.hl7.fhir.dstu3.model.ResourceType;
|
||||
import org.hl7.fhir.dstu3.model.SampledData;
|
||||
import org.hl7.fhir.dstu3.model.StringType;
|
||||
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
||||
|
@ -73,7 +66,6 @@ import org.hl7.fhir.dstu3.model.Timing;
|
|||
import org.hl7.fhir.dstu3.model.Type;
|
||||
import org.hl7.fhir.dstu3.model.UriType;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionContainsComponent;
|
||||
import org.hl7.fhir.dstu3.utils.FHIRPathEngine;
|
||||
import org.hl7.fhir.dstu3.utils.IWorkerContext;
|
||||
|
@ -413,15 +405,29 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
warning(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "No code provided, and a code should be provided from the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl());
|
||||
} else {
|
||||
long t = System.nanoTime();
|
||||
ValidationResult vr = context.validateCode(cc, valueset);
|
||||
txTime = txTime + (System.nanoTime() - t);
|
||||
if (!vr.isOk()) {
|
||||
if (binding.getStrength() == BindingStrength.REQUIRED)
|
||||
rule(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl()+", and a code from this value set is required");
|
||||
else if (binding.getStrength() == BindingStrength.EXTENSIBLE)
|
||||
warning(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl() + ", and a code should come from this value set unless it has no suitable code");
|
||||
else if (binding.getStrength() == BindingStrength.PREFERRED)
|
||||
hint(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl() + ", and a code is recommended to come from this value set");
|
||||
|
||||
boolean atLeastOneSystemIsSupported = false;
|
||||
for (Coding nextCoding : cc.getCoding()) {
|
||||
String nextSystem = nextCoding.getSystem();
|
||||
if (isNotBlank(nextSystem) && context.supportsSystem(nextSystem)) {
|
||||
atLeastOneSystemIsSupported = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (!atLeastOneSystemIsSupported && binding.getStrength() == BindingStrength.EXAMPLE) {
|
||||
// ignore this since we can't validate but it doesn't matter..
|
||||
} else {
|
||||
ValidationResult vr = context.validateCode(cc, valueset);
|
||||
txTime = txTime + (System.nanoTime() - t);
|
||||
if (!vr.isOk()) {
|
||||
if (binding.getStrength() == BindingStrength.REQUIRED)
|
||||
rule(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl()+", and a code from this value set is required");
|
||||
else if (binding.getStrength() == BindingStrength.EXTENSIBLE)
|
||||
warning(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl() + ", and a code should come from this value set unless it has no suitable code");
|
||||
else if (binding.getStrength() == BindingStrength.PREFERRED)
|
||||
hint(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "None of the codes provided are in the value set " + describeReference(binding.getValueSet()) + " (" + valueset.getUrl() + ", and a code is recommended to come from this value set");
|
||||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
|
@ -470,6 +476,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
rule(errors, IssueType.CODEINVALID, element.line(), element.col(), path, isAbsolute(system), "Coding.system must be an absolute reference, not a local reference");
|
||||
|
||||
if (system != null && code != null) {
|
||||
try {
|
||||
if (checkCode(errors, element, path, code, system, display))
|
||||
if (theElementCntext != null && theElementCntext.getBinding() != null) {
|
||||
ElementDefinitionBindingComponent binding = theElementCntext.getBinding();
|
||||
|
@ -501,6 +508,9 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
|
|||
}
|
||||
}
|
||||
}
|
||||
} catch (Exception e) {
|
||||
rule(errors, IssueType.CODEINVALID, element.line(), element.col(), path, false, "Error "+e.getMessage()+" validating CodeableConcept");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue