From a2bfa7635d3534dca1c38f531d687a5b7efb2f3e Mon Sep 17 00:00:00 2001 From: AM1729 Date: Mon, 27 Jul 2026 13:11:40 +0200 Subject: [PATCH] filters based on AssetID AND JsonSeletor; also adds the funtionality to check the assets based on the exact key match --- .../klab/stac/STACEncoder.java | 20 ++++++++++--------- .../klab/stac/STACPathExpression.java | 13 ++++++++++-- 2 files changed, 22 insertions(+), 11 deletions(-) diff --git a/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACEncoder.java b/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACEncoder.java index 0661f5407..b1bd4cd61 100644 --- a/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACEncoder.java +++ b/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACEncoder.java @@ -316,10 +316,16 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou return false; } }; - } else if (resource.getParameters().get("jsonSelector", String.class) != null) { - // based on the JSON Expression on JSONSelector and JSONValue + } + + if (resource.getParameters().get("jsonSelector", String.class) != null) { + // based on the JSON Expression on JSONSelector and JSONValue; try { - assetPredicate = getAssetPredicate(resource); + if (assetPredicate != null) { + assetPredicate = assetPredicate.and(getAssetPredicateFromJSONSelector(resource)); // Predicate based on JSONPath AND the AssetID + } else { + assetPredicate = getAssetPredicateFromJSONSelector(resource); + } } catch (Exception e) { throw new KlabResourceAccessException("Couldn't form a predicate with the JSON Expressions"); } @@ -380,7 +386,7 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou } Predicate predicate; try { - predicate = getAssetPredicate(resource); + predicate = getAssetPredicateFromJSONSelector(resource); } catch (KlabIllegalArgumentException e) { manager.close(); throw e; @@ -599,11 +605,7 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou } } - private Predicate getAssetPredicate(IResource resource) { - String assetId = resource.getParameters().get("asset", String.class); - if (assetId != null) { - return STACPathExpression.STACAssetPredicate.fromHMStacAssetId(assetId); - } + private Predicate getAssetPredicateFromJSONSelector(IResource resource) { String jsonSelector = resource.getParameters().get("jsonSelector", String.class); String jsonValue = resource.getParameters().get("jsonValue", String.class); if (jsonSelector != null && !jsonSelector.isBlank() && jsonValue != null) { diff --git a/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACPathExpression.java b/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACPathExpression.java index dfdfdc726..bc4f73bd6 100644 --- a/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACPathExpression.java +++ b/adapters/klab.ogc/src/main/java/org/integratedmodelling/klab/stac/STACPathExpression.java @@ -282,10 +282,19 @@ public static Predicate fromJsonPath(String jsonPath, String expectedValu } JsonNode node = jsonNodeExtractor.apply(object); - + if (node == null || node.isNull() || node.isMissingNode()) { return false; } + + /* + * Check if {"a.b": expectedValue} exists and also {"a": { "b": expectedValue }} + */ + + JsonNode directValue = node.get(jsonPath); + if (directValue != null && !directValue.isNull()) { + return expectedValue.equals(directValue.asText()); + } return expression.matches(node, expectedValue); }; @@ -300,7 +309,7 @@ public static Predicate fromJsonNode(String jsonPath, String expectedV } public static Predicate fromKongJsonObject(String jsonPath, String expectedValue) { - return fromJsonPath(jsonPath, expectedValue, STACAssetPredicate::toJsonNode); + return fromJsonPath(jsonPath, expectedValue, STACAssetPredicate::toJsonNode); } private static JsonNode toJsonNode(JSONObject jsonObject) {