
001package org.hl7.fhir.r4.utils.sql; 002 003import java.util.List; 004 005import org.hl7.fhir.exceptions.FHIRException; 006import org.hl7.fhir.r4.utils.sql.Validator.TrueFalseOrUnknown; 007import org.hl7.fhir.r4.model.Base; 008import org.hl7.fhir.r4.utils.sql.Cell; 009import org.hl7.fhir.r4.utils.sql.Column; 010import org.hl7.fhir.r4.utils.sql.Storage; 011import org.hl7.fhir.r4.utils.sql.Store; 012import org.hl7.fhir.r4.utils.sql.Value; 013import org.hl7.fhir.utilities.MarkedToMoveToAdjunctPackage; 014import org.hl7.fhir.utilities.json.model.JsonArray; 015import org.hl7.fhir.utilities.json.model.JsonBoolean; 016import org.hl7.fhir.utilities.json.model.JsonElement; 017import org.hl7.fhir.utilities.json.model.JsonNull; 018import org.hl7.fhir.utilities.json.model.JsonNumber; 019import org.hl7.fhir.utilities.json.model.JsonObject; 020import org.hl7.fhir.utilities.json.model.JsonString; 021 022@MarkedToMoveToAdjunctPackage 023public class StorageJson implements Storage { 024 025 private String name; 026 private JsonArray rows; 027 028 @Override 029 public TrueFalseOrUnknown supportsArrays() { 030 return TrueFalseOrUnknown.TRUE; 031 } 032 033 @Override 034 public Store createStore(String name, List<Column> columns) { 035 this.name = name; 036 this.rows = new JsonArray(); 037 return new Store(name); // we're not doing anything with this 038 } 039 040 @Override 041 public void addRow(Store store, List<Cell> cells) { 042 JsonObject row = new JsonObject(); 043 rows.add(row); 044 for (Cell cell : cells) { 045 if (cell.getColumn().isColl() || cell.getValues().size() > 1) { 046 JsonArray arr = new JsonArray(); 047 row.add(cell.getColumn().getName(), arr); 048 for (Value value : cell.getValues()) { 049 arr.add(makeJsonNode(value)); 050 } 051 } else if (cell.getValues().size() == 0) { 052 row.add(cell.getColumn().getName(), new JsonNull()); 053 } else { 054 row.add(cell.getColumn().getName(), makeJsonNode(cell.getValues().get(0))); 055 } 056 } 057 } 058 059 private JsonElement makeJsonNode(Value value) { 060 if (value == null) { 061 return new JsonNull(); 062 } else if (value.getValueInt() != null) { 063 return new JsonNumber(value.getValueInt().intValue()); 064 } 065 if (value.getValueBoolean() != null) { 066 return new JsonBoolean(value.getValueBoolean().booleanValue()); 067 } 068 if (value.getValueDecimal() != null) { 069 return new JsonNumber(value.getValueDecimal().toPlainString()); 070 } 071 return new JsonString(value.getValueString()); 072 } 073 074 @Override 075 public void finish(Store store) { 076 // nothing 077 } 078 079 public String getName() { 080 return name; 081 } 082 083 public JsonArray getRows() { 084 return rows; 085 } 086 087 @Override 088 public TrueFalseOrUnknown supportsComplexTypes() { 089 return TrueFalseOrUnknown.TRUE; 090 } 091 092 @Override 093 public TrueFalseOrUnknown needsName() { 094 return TrueFalseOrUnknown.FALSE; 095 } 096 097 @Override 098 public String getKeyForSourceResource(Base res) { 099 return res.fhirType()+"/"+res.getIdBase(); 100 } 101 102 @Override 103 public String getKeyForTargetResource(Base res) { 104 return res.fhirType()+"/"+res.getIdBase(); 105 } 106 107}