示例#1
0
  private ValidationResult serverValidateCode(Parameters pin, boolean doCache) throws Exception {
    if (noTerminologyServer)
      return new ValidationResult(null, null, TerminologyServiceErrorClass.NOSERVICE);
    String cacheName = doCache ? generateCacheName(pin) : null;
    ValidationResult res = loadFromCache(cacheName);
    if (res != null) return res;
    log("Terminology Server: $validate-code " + describeValidationParameters(pin));
    for (ParametersParameterComponent pp : pin.getParameter())
      if (pp.getName().equals("profile"))
        throw new Error("Can only specify profile in the context");
    if (expProfile == null) throw new Exception("No ExpansionProfile provided");
    pin.addParameter().setName("profile").setResource(expProfile);

    Parameters pout = txServer.operateType(ValueSet.class, "validate-code", pin);
    boolean ok = false;
    String message = "No Message returned";
    String display = null;
    TerminologyServiceErrorClass err = TerminologyServiceErrorClass.UNKNOWN;
    for (ParametersParameterComponent p : pout.getParameter()) {
      if (p.getName().equals("result")) ok = ((BooleanType) p.getValue()).getValue().booleanValue();
      else if (p.getName().equals("message")) message = ((StringType) p.getValue()).getValue();
      else if (p.getName().equals("display")) display = ((StringType) p.getValue()).getValue();
      else if (p.getName().equals("cause")) {
        try {
          IssueType it = IssueType.fromCode(((StringType) p.getValue()).getValue());
          if (it == IssueType.UNKNOWN) err = TerminologyServiceErrorClass.UNKNOWN;
          else if (it == IssueType.NOTSUPPORTED)
            err = TerminologyServiceErrorClass.VALUESET_UNSUPPORTED;
        } catch (FHIRException e) {
        }
      }
    }
    if (!ok) res = new ValidationResult(IssueSeverity.ERROR, message, err);
    else if (display != null)
      res = new ValidationResult(new ConceptDefinitionComponent().setDisplay(display));
    else res = new ValidationResult(null);
    saveToCache(res, cacheName);
    return res;
  }
示例#2
0
 @SuppressWarnings("rawtypes")
 private String describeValidationParameters(Parameters pin) {
   CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
   for (ParametersParameterComponent p : pin.getParameter()) {
     if (p.hasValue() && p.getValue() instanceof PrimitiveType) {
       b.append(p.getName() + "=" + ((PrimitiveType) p.getValue()).asStringValue());
     } else if (p.hasValue() && p.getValue() instanceof Coding) {
       b.append("system=" + ((Coding) p.getValue()).getSystem());
       b.append("code=" + ((Coding) p.getValue()).getCode());
       b.append("display=" + ((Coding) p.getValue()).getDisplay());
     } else if (p.hasValue() && p.getValue() instanceof CodeableConcept) {
       if (((CodeableConcept) p.getValue()).hasCoding()) {
         Coding c = ((CodeableConcept) p.getValue()).getCodingFirstRep();
         b.append("system=" + c.getSystem());
         b.append("code=" + c.getCode());
         b.append("display=" + c.getDisplay());
       } else if (((CodeableConcept) p.getValue()).hasText()) {
         b.append("text=" + ((CodeableConcept) p.getValue()).getText());
       }
     } else if (p.hasResource() && (p.getResource() instanceof ValueSet)) {
       b.append("valueset=" + getVSSummary((ValueSet) p.getResource()));
     }
   }
   return b.toString();
 }