package ch.elexis.core.findings.fhir.po.codes;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;
import org.osgi.service.component.annotations.Component;
import ch.elexis.core.findings.ICoding;
import ch.elexis.core.findings.codes.CodingSystem;
import ch.elexis.core.findings.codes.ICodingContribution;
import ch.elexis.core.findings.codes.ILocalCodingContribution;
import ch.elexis.data.Query;
@Component
public class LocalCodingContribution implements ICodingContribution, ILocalCodingContribution {
@Override
public String getCodeSystem(){
return CodingSystem.ELEXIS_LOCAL_CODESYSTEM.getSystem();
}
@Override
public List<ICoding> getCodes(){
Query<LocalCoding> query = new Query<>(LocalCoding.class);
query.add(LocalCoding.FLD_ID, Query.NOT_EQUAL, "VERSION");
return new ArrayList<ICoding>(query.execute());
}
@Override
public void addCoding(ICoding coding){
if(coding.getSystem().equals(getCodeSystem())) {
Optional<ICoding> exists = getCodingByCode(coding.getCode());
if (!exists.isPresent()) {
new LocalCoding(coding);
}
}
}
private Optional<ICoding> getCodingByCode(String code){
Query<LocalCoding> query = new Query<>(LocalCoding.class);
query.add(LocalCoding.FLD_ID, Query.NOT_EQUAL, LocalCoding.VERSION);
query.add(LocalCoding.FLD_CODE, Query.EQUALS, code);
List<LocalCoding> existing = query.execute();
if (!existing.isEmpty()) {
return Optional.of(existing.get(0));
}
return Optional.empty();
}
@Override
public void removeCoding(ICoding coding){
if (coding.getSystem().equals(getCodeSystem())) {
Optional<ICoding> exists = getCodingByCode(coding.getCode());
exists.ifPresent(existing -> ((LocalCoding) existing).delete());
}
}
@Override
public Optional<ICoding> getCode(String code){
return getCodingByCode(code);
}
}