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 b1bd4cd61..0661f5407 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,16 +316,10 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou return false; } }; - } - - if (resource.getParameters().get("jsonSelector", String.class) != null) { - // based on the JSON Expression on JSONSelector and JSONValue; + } else if (resource.getParameters().get("jsonSelector", String.class) != null) { + // based on the JSON Expression on JSONSelector and JSONValue try { - if (assetPredicate != null) { - assetPredicate = assetPredicate.and(getAssetPredicateFromJSONSelector(resource)); // Predicate based on JSONPath AND the AssetID - } else { - assetPredicate = getAssetPredicateFromJSONSelector(resource); - } + assetPredicate = getAssetPredicate(resource); } catch (Exception e) { throw new KlabResourceAccessException("Couldn't form a predicate with the JSON Expressions"); } @@ -386,7 +380,7 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou } Predicate predicate; try { - predicate = getAssetPredicateFromJSONSelector(resource); + predicate = getAssetPredicate(resource); } catch (KlabIllegalArgumentException e) { manager.close(); throw e; @@ -605,7 +599,11 @@ public boolean test(HMStacAsset asset) { // Assuming for now that "eo:bands" wou } } - private Predicate getAssetPredicateFromJSONSelector(IResource resource) { + private Predicate getAssetPredicate(IResource resource) { + String assetId = resource.getParameters().get("asset", String.class); + if (assetId != null) { + return STACPathExpression.STACAssetPredicate.fromHMStacAssetId(assetId); + } 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 bc4f73bd6..dfdfdc726 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,19 +282,10 @@ 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); }; @@ -309,7 +300,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) {