001package org.hl7.fhir.r5.renderers.spreadsheets;
002
003import java.io.OutputStream;
004
005import org.apache.poi.ss.usermodel.Row;
006import org.apache.poi.ss.usermodel.Sheet;
007import org.hl7.fhir.r5.context.IWorkerContext;
008import org.hl7.fhir.r5.model.CanonicalResource;
009import org.hl7.fhir.r5.model.CodeableConcept;
010import org.hl7.fhir.r5.model.ContactDetail;
011import org.hl7.fhir.r5.model.ElementDefinition;
012import org.hl7.fhir.r5.model.Identifier;
013import org.hl7.fhir.r5.model.StructureDefinition;
014import org.hl7.fhir.r5.model.StructureDefinition.StructureDefinitionMappingComponent;
015import org.hl7.fhir.r5.renderers.DataRenderer;
016import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage;
017
018@MarkedToMoveToAdjunctPackage
019public class CanonicalSpreadsheetGenerator extends SpreadsheetGenerator {
020
021  public CanonicalSpreadsheetGenerator(IWorkerContext context) {
022    super(context);
023  }
024
025  protected Sheet renderCanonicalResource(CanonicalResource cr, boolean forMultiple) {
026    Sheet sheet = forMultiple && hasSheet("Metadata") ? getSheet("Metadata") : makeSheet("Metadata");
027
028    Row headerRow = sheet.createRow(forMultiple ? sheet.getLastRowNum()+1 : 0);
029    addCell(headerRow, 0, "Property", styles.get("header"));
030    addCell(headerRow, 1, "Value", styles.get("header"));
031
032    if (forMultiple) {
033      addMetadataRow(sheet, "ID", cr.getId());      
034    }
035    addMetadataRow(sheet, "URL", cr.getUrl());
036    for (Identifier id : cr.getIdentifier()) {
037      addMetadataRow(sheet, "Identifier", dr.displayDataType(id));
038    }
039    addMetadataRow(sheet, "Version", cr.getVersion());
040    addMetadataRow(sheet, "Name", cr.getName());
041    addMetadataRow(sheet, "Title", cr.getTitle());
042    addMetadataRow(sheet, "Status", cr.getStatusElement().asStringValue());
043    addMetadataRow(sheet, "Experimental", cr.getExperimentalElement().asStringValue());
044    addMetadataRow(sheet, "Date", cr.getDateElement().asStringValue());
045    addMetadataRow(sheet, "Publisher", cr.getPublisher());
046    for (ContactDetail c : cr.getContact()) {
047      addMetadataRow(sheet, "Contact", dr.displayDataType(c));
048    }
049    for (CodeableConcept j : cr.getJurisdiction()) {
050      addMetadataRow(sheet, "Jurisdiction", dr.displayDataType(j));
051    }
052
053    addMetadataRow(sheet, "Description", cr.getDescription());
054    addMetadataRow(sheet, "Purpose", cr.getPurpose());
055    addMetadataRow(sheet, "Copyright", cr.getCopyright());
056    configureSheet(sheet);
057    return sheet;
058  }
059
060  private void configureSheet(Sheet sheet) {
061    sheet.setColumnWidth(0, columnPixels(15));
062    sheet.setColumnWidth(1, columnPixels(80));
063  }
064
065  protected void addMetadataRow(Sheet sheet, String name, String value) {
066    Row row = sheet.createRow(sheet.getLastRowNum()+1);
067    addCell(row, 0, name, styles.get("body"));
068    addCell(row, 1, value);
069  }
070
071
072  
073}