Skip to content

Commit b3f10c8

Browse files
authored
Issue #2296 - miscellaneous updates (#2393)
* Issue #2296 - miscellaneous updates Signed-off-by: John T.E. Timm <[email protected]> * Issue #2296 - changed visibility of cache config Signed-off-by: John T.E. Timm <[email protected]>
1 parent 1444f70 commit b3f10c8

File tree

6 files changed

+24
-9
lines changed

6 files changed

+24
-9
lines changed

fhir-cache/src/main/java/com/ibm/fhir/cache/CacheKey.java

+5
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,11 @@ public boolean equals(Object obj) {
4545
return Arrays.deepEquals(values, other.values);
4646
}
4747

48+
@Override
49+
public String toString() {
50+
return Arrays.deepToString(values);
51+
}
52+
4853
/**
4954
* A factory method for creating CacheKey instances from one or more values
5055
*

fhir-path/src/main/java/com/ibm/fhir/path/function/ResolveFunction.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030

3131
public class ResolveFunction extends FHIRPathAbstractFunction {
3232
public static final String RESOLVE_RELATIVE_REFERENCES = "resolveRelativeReferences";
33-
public static final boolean DEFAULT_RESOLVE_RELATIVE_REFERENCES = true;
33+
public static final boolean DEFAULT_RESOLVE_RELATIVE_REFERENCES = false;
3434

3535
private static final int BASE_URL_GROUP = 1;
3636
private static final int RESOURCE_TYPE_GROUP = 4;

fhir-server/src/main/java/com/ibm/fhir/server/registry/ServerRegistryResourceProvider.java

+8-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@
77
package com.ibm.fhir.server.registry;
88

99
import static com.ibm.fhir.cache.CacheKey.key;
10-
import static com.ibm.fhir.cache.util.CacheSupport.createCacheAsMap;
1110

1211
import java.time.Duration;
1312
import java.time.temporal.ChronoUnit;
@@ -24,6 +23,8 @@
2423
import java.util.stream.Collectors;
2524

2625
import com.ibm.fhir.cache.CacheKey;
26+
import com.ibm.fhir.cache.CacheManager;
27+
import com.ibm.fhir.cache.CacheManager.Configuration;
2728
import com.ibm.fhir.config.FHIRRequestContext;
2829
import com.ibm.fhir.model.resource.Resource;
2930
import com.ibm.fhir.model.resource.SearchParameter;
@@ -44,9 +45,10 @@
4445
public class ServerRegistryResourceProvider extends AbstractRegistryResourceProvider {
4546
public static final Logger log = Logger.getLogger(ServerRegistryResourceProvider.class.getName());
4647

47-
private final PersistenceHelper persistenceHelper;
48+
public static final String REGISTRY_RESOURCE_CACHE_NAME = "com.ibm.fhir.server.registry.ServerRegistryResourceProvider.registryResourceCache";
49+
public static final Configuration REGISTRY_RESOURCE_CACHE_CONFIGURATION = Configuration.of(1024, Duration.of(1, ChronoUnit.MINUTES));
4850

49-
private final Map<CacheKey, List<FHIRRegistryResource>> registryResourceCache = createCacheAsMap(1024, Duration.of(1, ChronoUnit.MINUTES));
51+
private final PersistenceHelper persistenceHelper;
5052

5153
public ServerRegistryResourceProvider(PersistenceHelper persistenceHelper) {
5254
try {
@@ -58,10 +60,10 @@ public ServerRegistryResourceProvider(PersistenceHelper persistenceHelper) {
5860

5961
@Override
6062
protected List<FHIRRegistryResource> getRegistryResources(Class<? extends Resource> resourceType, String url) {
61-
String tenantId = FHIRRequestContext.get().getTenantId();
6263
String dataStoreId = FHIRRequestContext.get().getDataStoreId();
63-
CacheKey key = key(tenantId, dataStoreId, url);
64-
return registryResourceCache.computeIfAbsent(key, k -> computeRegistryResources(resourceType, url));
64+
CacheKey key = key(dataStoreId, url);
65+
Map<CacheKey, List<FHIRRegistryResource>> cacheAsMap = CacheManager.getCacheAsMap(REGISTRY_RESOURCE_CACHE_NAME, REGISTRY_RESOURCE_CACHE_CONFIGURATION);
66+
return cacheAsMap.computeIfAbsent(key, k -> computeRegistryResources(resourceType, url));
6567
}
6668

6769
@Override

fhir-server/src/main/java/com/ibm/fhir/server/resolve/ServerResolveFunction.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,11 @@
3434
import com.ibm.fhir.search.util.ReferenceUtil;
3535

3636
public class ServerResolveFunction extends ResolveFunction {
37-
public static final Logger log = Logger.getLogger(ServerResolveFunction.class.getName());
37+
private static final Logger log = Logger.getLogger(ServerResolveFunction.class.getName());
3838

3939
public static final String RESOURCE_CACHE_NAME = "com.ibm.fhir.server.resolve.ServerResolveFunction.resourceCache";
40+
public static final Configuration RESOURCE_CACHE_CONFIGURATION = Configuration.of(Duration.of(1, ChronoUnit.MINUTES));
4041

41-
private static final Configuration RESOURCE_CACHE_CONFIGURATION = Configuration.of(Duration.of(1, ChronoUnit.MINUTES));
4242
private static final String VREAD = "vread";
4343
private static final String READ = "read";
4444
private static final Object NULL = new Object();

fhir-server/src/test/java/com/ibm/fhir/server/test/ServerResolveFunctionTest.java

+5
Original file line numberDiff line numberDiff line change
@@ -161,6 +161,7 @@ public void testServerResolveFunction() throws Exception {
161161
FHIRPathEvaluator evaluator = FHIRPathEvaluator.evaluator();
162162
EvaluationContext evaluationContext = new EvaluationContext(observation);
163163

164+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
164165
Collection<FHIRPathNode> nodes = evaluator.evaluate(evaluationContext, "subject.resolve() is Patient");
165166
assertEquals(nodes, SINGLETON_TRUE);
166167

@@ -201,6 +202,7 @@ public void testServerResolveFunction() throws Exception {
201202
.build())
202203
.build();
203204
evaluationContext = new EvaluationContext(observation);
205+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
204206
nodes = evaluator.evaluate(evaluationContext, "subject.resolve() is Patient");
205207
assertEquals(nodes, SINGLETON_TRUE);
206208

@@ -215,6 +217,7 @@ public void testServerResolveFunction() throws Exception {
215217
.build())
216218
.build();
217219
evaluationContext = new EvaluationContext(observation);
220+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
218221
nodes = evaluator.evaluate(evaluationContext, "subject.resolve() is Patient");
219222
assertEquals(nodes, SINGLETON_TRUE);
220223

@@ -229,6 +232,7 @@ public void testServerResolveFunction() throws Exception {
229232
.build())
230233
.build();
231234
evaluationContext = new EvaluationContext(observation);
235+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
232236
nodes = evaluator.evaluate(evaluationContext, "subject.resolve() is Patient");
233237
assertEquals(nodes, SINGLETON_TRUE);
234238

@@ -243,6 +247,7 @@ public void testServerResolveFunction() throws Exception {
243247
.build())
244248
.build();
245249
evaluationContext = new EvaluationContext(observation);
250+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
246251
nodes = evaluator.evaluate(evaluationContext, "subject.resolve() is Patient");
247252
assertEquals(nodes, SINGLETON_TRUE);
248253

fhir-validation/src/main/java/com/ibm/fhir/validation/FHIRValidator.java

+3
Original file line numberDiff line numberDiff line change
@@ -35,12 +35,14 @@
3535
import com.ibm.fhir.model.type.code.IssueSeverity;
3636
import com.ibm.fhir.model.type.code.IssueType;
3737
import com.ibm.fhir.model.util.ModelSupport;
38+
import com.ibm.fhir.path.FHIRPathBooleanValue;
3839
import com.ibm.fhir.path.FHIRPathElementNode;
3940
import com.ibm.fhir.path.FHIRPathNode;
4041
import com.ibm.fhir.path.FHIRPathResourceNode;
4142
import com.ibm.fhir.path.FHIRPathTree;
4243
import com.ibm.fhir.path.evaluator.FHIRPathEvaluator;
4344
import com.ibm.fhir.path.evaluator.FHIRPathEvaluator.EvaluationContext;
45+
import com.ibm.fhir.path.function.ResolveFunction;
4446
import com.ibm.fhir.path.visitor.FHIRPathDefaultNodeVisitor;
4547
import com.ibm.fhir.profile.ProfileSupport;
4648
import com.ibm.fhir.registry.FHIRRegistry;
@@ -168,6 +170,7 @@ public List<Issue> validate(EvaluationContext evaluationContext, boolean include
168170
throw new IllegalArgumentException("Root must be resource node");
169171
}
170172
try {
173+
evaluationContext.setExternalConstant(ResolveFunction.RESOLVE_RELATIVE_REFERENCES, FHIRPathBooleanValue.TRUE);
171174
List<Issue> issues = new ArrayList<>();
172175
validateProfileReferences(evaluationContext.getTree().getRoot().asResourceNode(), Arrays.asList(profiles), false, issues);
173176
issues.addAll(visitor.validate(evaluationContext, includeResourceAssertedProfiles, profiles));

0 commit comments

Comments
 (0)