001package org.hl7.fhir.r5.renderers.spreadsheets;
002
003import java.io.FileOutputStream;
004
005import org.apache.poi.ss.usermodel.Sheet;
006import org.hl7.fhir.r5.context.IWorkerContext;
007import org.hl7.fhir.r5.context.SimpleWorkerContext;
008import org.hl7.fhir.r5.model.ConceptMap;
009import org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent;
010import org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent;
011import org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent;
012import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
013
014@MarkedToMoveToAdjunctPackage
015public class ConceptMapSpreadsheetGenerator extends CanonicalSpreadsheetGenerator {
016
017  
018  public ConceptMapSpreadsheetGenerator(IWorkerContext context) {
019    super(context);
020  }
021
022  public boolean canGenerate(ConceptMap cm) {
023    return true;
024  }
025
026  public ConceptMapSpreadsheetGenerator renderConceptMap(ConceptMap cm) {
027    addConceptMapMetadata(renderCanonicalResource(cm, false), cm);
028    int i = 0;
029    for (ConceptMapGroupComponent grp : cm.getGroup()) {
030      renderGroup(grp, i);
031      i++;
032    }
033    return this;
034  }
035
036  private void addConceptMapMetadata(Sheet sheet, ConceptMap cm) {
037    if (cm.hasSourceScope()) {
038      addMetadataRow(sheet, "Source", cm.getSourceScope().primitiveValue());
039    }
040    if (cm.hasTargetScope()) {
041      addMetadataRow(sheet, "Target", cm.getTargetScope().primitiveValue());
042    }    
043  }
044
045  private void renderGroup(ConceptMapGroupComponent grp, int i) {
046    Sheet sheet = makeSheet("Mapping Table "+Integer.toString(i));
047    addHeaders(sheet, "Source", "Display", "Relationship", "Target", "Display");
048    addRow(sheet, grp.getSource(), "", "", grp.getTarget(), "");
049    for (SourceElementComponent s : grp.getElement()) {
050      for (TargetElementComponent t : s.getTarget()) {
051        addRow(sheet, s.getCode(), s.getDisplay(), t.getRelationshipElement().asStringValue(), t.getCode(), t.getDisplay());        
052      }
053    }    
054  }
055
056}