
001package org.hl7.fhir.r5.testfactory.dataprovider; 002 003import java.util.ArrayList; 004import java.util.List; 005 006import org.hl7.fhir.exceptions.FHIRException; 007import org.hl7.fhir.r5.model.ValueSet.ConceptPropertyComponent; 008import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent; 009import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent; 010import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 011 012@MarkedToMoveToAdjunctPackage 013public class ValueSetDataProvider extends TableDataProvider { 014 015 public enum ColumnSpecifierType { 016 COUNTER, SYSTEM, VERSION, CODE, DISPLAY, ABSTRACT, INACTIVE, PROPERTY 017 018 } 019 020 public class ColumnSpecifier { 021 022 private String name; 023 private ColumnSpecifierType type; 024 private String details; 025 026 public ColumnSpecifier(String name, ColumnSpecifierType type) { 027 this.name = name; 028 this.type = type; 029 } 030 031 public ColumnSpecifier(String name, ColumnSpecifierType type, String details) { 032 this.name = name; 033 this.type = type; 034 this.details = details; 035 } 036 037 } 038 039 ValueSetExpansionComponent expansion; 040 private List<ColumnSpecifier> columns; 041 private List<String> columnNames; 042 private int cursor; 043 044 public ValueSetDataProvider(ValueSetExpansionComponent expansion) { 045 super(); 046 this.expansion = expansion; 047 process(); 048 } 049 050 051 052 private void process() { 053 columns = new ArrayList<ColumnSpecifier>(); 054 columns.add(new ColumnSpecifier("counter", ColumnSpecifierType.COUNTER)); 055 columns.add(new ColumnSpecifier("system", ColumnSpecifierType.SYSTEM)); 056 columns.add(new ColumnSpecifier("version", ColumnSpecifierType.VERSION)); 057 columns.add(new ColumnSpecifier("code", ColumnSpecifierType.CODE)); 058 columns.add(new ColumnSpecifier("display", ColumnSpecifierType.DISPLAY)); 059 columns.add(new ColumnSpecifier("abstract", ColumnSpecifierType.ABSTRACT)); 060 columns.add(new ColumnSpecifier("inactive", ColumnSpecifierType.INACTIVE)); 061 for (ValueSetExpansionContainsComponent cc : expansion.getContains()) { 062// for (ConceptReferenceDesignationComponent d : cc.getDesignation()) { 063// if (!hasColumn(d.getLanguage(), d.getUse())) { 064// 065// } 066// } 067 for (ConceptPropertyComponent p : cc.getProperty()) { 068 if (!hasColumn(ColumnSpecifierType.PROPERTY, p.getCode()) ) { 069 columns.add(new ColumnSpecifier("property."+p.getCode(), ColumnSpecifierType.PROPERTY, p.getCode())); 070 } 071 } 072 } 073 columnNames = new ArrayList<>(); 074 for (ColumnSpecifier sp : columns) { 075 columnNames.add(sp.name); 076 } 077 } 078 079 private boolean hasColumn(ColumnSpecifierType type, String details) { 080 for (ColumnSpecifier sp : columns) { 081 if (sp.type == type && details.equals(sp.details)) { 082 return true; 083 } 084 } 085 return false; 086 } 087 088 089 090 @Override 091 public List<String> columns() { 092 return columnNames; 093 } 094 095 @Override 096 public boolean nextRow() throws FHIRException { 097 cursor++; 098 return cursor < expansion.getContains().size(); 099 } 100 101 @Override 102 public List<String> cells() throws FHIRException { 103 List<String> cells = new ArrayList<>(); 104 ValueSetExpansionContainsComponent cc = expansion.getContains().get(cursor); 105 for (ColumnSpecifier sp : columns) { 106 switch (sp.type) { 107 case ABSTRACT: 108 cells.add(""+cc.getAbstract()); 109 break; 110 case CODE: 111 cells.add(cc.getCode()); 112 break; 113 case COUNTER: 114 cells.add(""+cursor); 115 break; 116 case DISPLAY: 117 cells.add(cc.getDisplay()); 118 break; 119 case INACTIVE: 120 cells.add(""+cc.getInactive()); 121 break; 122 case PROPERTY: 123 for (ConceptPropertyComponent p : cc.getProperty()) { 124 if (sp.details.equals(p.getCode())) { 125 cells.add(p.getValue().primitiveValue()); 126 } 127 } 128 break; 129 case SYSTEM: 130 cells.add(cc.getSystem()); 131 break; 132 case VERSION: 133 cells.add(cc.getVersion()); 134 break; 135 default: 136 break; 137 } 138 } 139 return cells; 140 } 141 142 @Override 143 public String cell(String name) throws FHIRException { 144 int i = columns.indexOf(name); 145 return i == -1 ? null : cells().get(i); 146 } 147 148 @Override 149 public void reset() throws FHIRException { 150 cursor = -1; 151 } 152 153}