package ch.elexis.core.findings.util.fhir.accessor; import java.time.LocalDate; import java.time.LocalDateTime; import java.time.ZoneId; import java.time.ZonedDateTime; import java.util.Date; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.stream.Collectors; import org.hl7.fhir.dstu3.model.DomainResource; import org.hl7.fhir.dstu3.model.Extension; import org.hl7.fhir.dstu3.model.Narrative; import org.hl7.fhir.dstu3.model.StringType; import ch.elexis.core.findings.util.ModelUtil; public abstract class AbstractFindingsAccessor { public Optional<String> getText(DomainResource resource){ Narrative narrative = resource.getText(); if (narrative != null && narrative.getDivAsString() != null) { return ModelUtil.getNarrativeAsString(narrative); } return Optional.empty(); } public void setText(DomainResource resource, String text){ Narrative narrative = resource.getText(); if (narrative == null) { narrative = new Narrative(); } String divEncodedText = text.replaceAll("<", "<").replaceAll(">", ">") .replaceAll("&", "&").replaceAll("(\r\n|\r|\n)", "<br />"); narrative.setDivAsString(divEncodedText); resource.setText(narrative); } public void addStringExtension(DomainResource resource, String theUrl, String theValue){ Extension extension = new Extension(theUrl); extension.setValue(new StringType().setValue(theValue)); resource.addExtension(extension); } public Map<String, String> getStringExtensions(DomainResource resource){ List<Extension> extensions = resource.getExtension(); return extensions.stream().filter(extension -> extension.getValue() instanceof StringType) .collect(Collectors.toMap(extension -> extension.getUrl(), extension -> ((StringType) extension.getValue()).getValueAsString())); } /** * Method to convert form {@link LocalDateTime} to {@link Date} * * @param localDateTime * @return */ protected Date getDate(LocalDateTime localDateTime){ ZonedDateTime zdt = localDateTime.atZone(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } /** * Method to convert form {@link LocalDateTime} to {@link Date} * * @param localDateTime * @return */ protected Date getDate(LocalDate localDate){ ZonedDateTime zdt = localDate.atStartOfDay(ZoneId.systemDefault()); return Date.from(zdt.toInstant()); } /** * Method to convert form {@link Date} to {@link LocalDateTime} * * @param localDateTime * @return */ protected LocalDateTime getLocalDateTime(Date date){ return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()); } /** * Method to convert form {@link Date} to {@link LocalDateTime} * * @param localDateTime * @return */ protected LocalDate getLocalDate(Date date){ return LocalDateTime.ofInstant(date.toInstant(), ZoneId.systemDefault()).toLocalDate(); } }