Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.gointerop.fhir.caching;

import java.lang.reflect.Method;

import org.apache.commons.codec.digest.DigestUtils;
import org.hl7.fhir.r4.model.CodeableConcept;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.ConceptMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.interceptor.KeyGenerator;
import org.springframework.stereotype.Component;

import com.gointerop.fhir.utils.FHIRUtil;

@Component
public class TranslateKeyGenerator implements KeyGenerator {

@Autowired
private FHIRUtil fhirUtil;

@Override
public Object generate(Object target, Method method, Object... params) {
String url = (String) params[0];
ConceptMap conceptMap = (ConceptMap) params[1];
String conceptMapVersion = (String) params[2];
String code = (String) params[3];
String system = (String) params[4];
String version = (String) params[5];
Coding coding = (Coding) params[6];
CodeableConcept codeableConcept = (CodeableConcept) params[7];
String targetParam = (String) params[8];
String targetSystem = (String) params[9];
Boolean reverse = (Boolean) params[10];
String xSystemCacheId = (String) params[11];

String txKey;
if (conceptMap != null && conceptMap.getUrl() != null) {
txKey = conceptMap.getUrl();
} else if (conceptMap != null) {
String json = fhirUtil.getIParser().encodeResourceToString(conceptMap);
txKey = DigestUtils.md5Hex(json);
} else {
txKey = "null-resource";
}

return String.join("_",
url,
txKey,
conceptMapVersion,
code,
system,
version,
String.valueOf(coding != null ? coding.hashCode() : "null"),
String.valueOf(codeableConcept != null ? codeableConcept.hashCode() : "null"),
targetParam,
targetSystem,
String.valueOf(reverse),
xSystemCacheId);
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
package com.gointerop.fhir.converter;

import java.util.Arrays;
import java.util.List;

import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.CodeType;
import org.hl7.fhir.r4.model.Coding;
import org.hl7.fhir.r4.model.Parameters;
import org.hl7.fhir.r4.model.StringType;
import org.springframework.stereotype.Component;

import com.gointerop.fhir.model.Mapping;
import com.gointerop.fhir.model.Source;

@Component
public class MappingParametersConverter {
public Parameters toParameters(List<Mapping> mapping, List<Source> targetSources) {
Parameters params = new Parameters();

params.addParameter().setName("result").setValue(new BooleanType(true));

for (int i = 0; i < mapping.size(); i++) {
Mapping map = mapping.get(i);
Source targetSource = targetSources.get(i);
params.addParameter().setName("match").setPart(Arrays.asList(
new Parameters.ParametersParameterComponent().setName("equivalence")
.setValue(new CodeType(toFHIREquivalence(map.getMapType()))),
new Parameters.ParametersParameterComponent().setName("concept")
.setValue(new Coding().setCode(map.getToConceptCode()).setDisplay(
map.getToConceptNameResolved())),
new Parameters.ParametersParameterComponent().setName("source")
.setValue(new StringType(targetSource.getCanonicalUrl()))
));
}

return params;
}

public String toFHIREquivalence(String oclEquivalence) {
switch (oclEquivalence) {
case "SAME-AS":
return "equivalent";
case "NARROWER-THAN":
return "narrower";
case "BROADER-THAN":
return "broader";
case "NOT-EQUIVALENT":
return "disjoint";
default:
return "unmatched";
}
}
}
6 changes: 5 additions & 1 deletion src/main/java/com/gointerop/fhir/hapi/HapiRestfulServer.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import com.gointerop.fhir.interceptor.CapabilityStatementCustomizer;
import com.gointerop.fhir.provider.CodeSystemProvider;
import com.gointerop.fhir.provider.ConceptMapProvider;
import com.gointerop.fhir.provider.TerminologyCapabilitiesProvider;
import com.gointerop.fhir.provider.ValueSetProvider;
import com.gointerop.fhir.service.TerminologyCapabilitiesService;
Expand Down Expand Up @@ -46,6 +46,9 @@ public class HapiRestfulServer extends RestfulServer {
@Autowired
private ValueSetProvider valueSetProvider;

@Autowired
private ConceptMapProvider conceptMapProvider;

@Override
protected void initialize() {
// Leniencia de handler para atributos (Para o TerminologyCapabilities
Expand Down Expand Up @@ -75,6 +78,7 @@ public void unknownReference(IParseLocation theLocation, String theReference) {

registerProvider(codeSystemProvider);
registerProvider(valueSetProvider);
registerProvider(conceptMapProvider);

// ui
registerInterceptor(new ResponseHighlighterInterceptor() {
Expand Down
Loading