All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hl7.fhir.r5.renderers.ParametersRenderer Maven / Gradle / Ivy

package org.hl7.fhir.r5.renderers;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.List;

import org.hl7.fhir.exceptions.DefinitionException;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.exceptions.FHIRFormatError;
import org.hl7.fhir.r5.renderers.utils.RenderingContext;
import org.hl7.fhir.r5.renderers.utils.ResourceWrapper;
import org.hl7.fhir.r5.utils.EOperationOutcome;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
import org.hl7.fhir.utilities.xhtml.XhtmlNode;

@MarkedToMoveToAdjunctPackage
public class ParametersRenderer extends ResourceRenderer {

  public ParametersRenderer(RenderingContext context) { 
    super(context); 
  } 
 
  
  @Override
  public String buildSummary(ResourceWrapper r) throws UnsupportedEncodingException, IOException {
    List params = r.children("parameter");
    if (params.size() < 8) {
      CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
      for (ResourceWrapper p : params) {
        b.append(p.primitiveValue("name"));
      }
      return context.formatMessage(RenderingContext.PARS_SUMMARY_LIST, b.toString());
    } else {
      return context.formatMessage(RenderingContext.PARS_SUMMARY_SIZE, params.size());
    }
  }

  public ParametersRenderer setMultiLangMode(boolean multiLangMode) {
    this.multiLangMode = multiLangMode;
    return this;
  }

  @Override
  public void buildNarrative(RenderingStatus status, XhtmlNode x, ResourceWrapper r) throws FHIRFormatError, DefinitionException, IOException, FHIRException, EOperationOutcome {
    renderResourceTechDetails(r, x);
    x.h2().tx(context.formatPhrase(RenderingContext.GENERAL_PARS));
    XhtmlNode tbl = x.table("grid", false);
    params(status, tbl, r.children("parameter"), 0);
  }

  private void params(RenderingStatus status, XhtmlNode tbl, List list, int indent) throws FHIRFormatError, DefinitionException, FHIRException, IOException, EOperationOutcome {
    for (ResourceWrapper p : list) {
      XhtmlNode tr = tbl.tr();
      XhtmlNode td = tr.td();
      for (int i = 0; i < indent; i++) {
        td.tx(XhtmlNode.NBSP);        
      }
      if (p.has("name")) {
        td.tx(p.primitiveValue("name"));
      } else {
        td.tx("???");
      }
      if (p.has("value")) {
        renderDataType(status, tr.td(), p.child("value"));
      } else if (p.has("resource")) {
        ResourceWrapper rw = p.child("resource");
        td = tr.td();
        XhtmlNode para = td.para();
        para.tx(rw.fhirType()+"/"+rw.getId());
        checkAddLink(para, rw.fhirType()+"_"+rw.getId());
        checkAddLink(para, rw.fhirType()+"_"+rw.getScopedId());
        checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getId());
        checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getScopedId());
        if (rw.has("meta")) {
          ResourceWrapper m = rw.child("meta");
          String ver = m.primitiveValue("version");
          if (ver != null) {
            checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getId()+"/"+ver);
            checkAddLink(para, "hc"+rw.fhirType()+"_"+rw.getScopedId()+"/"+ver);            
          }
        }
        XhtmlNode x = rw.getNarrative();
        if (x != null) {
          td.addChildren(x);
        } else {
          ResourceRenderer rr = RendererFactory.factory(rw, context);
          rr.buildNarrative(status, td, rw);
        }
      } else if (p.has("part")) {
        tr.td();
        params(status, tbl, p.children("part"), indent+1);
      }
    }
  }


  private void checkAddLink(XhtmlNode para, String anchor) {
    if (!context.hasAnchor(anchor)) {
      context.addAnchor(anchor);
      para.an(context.prefixAnchor(anchor)).tx(" ");
    }

    
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy