From 8db22f3859b1099d0c681622403fba4ee84bca84 Mon Sep 17 00:00:00 2001
From: Paul Latzelsperger <43503240+paullatzelsperger@users.noreply.github.com>
Date: Tue, 6 Feb 2024 17:10:05 +0100
Subject: [PATCH] chore: incorporate latest changes of EDC (#264)
* chore: adapt to latest EDC changes
* DEPENDENCIES
* DEPENDENCIES-2
---
DEPENDENCIES | 1 -
...ter.java => CredentialResourceLookup.java} | 21 +++++++++----------
.../defaults/InMemoryCredentialStore.java | 3 ++-
.../defaults/InMemoryEntityStore.java | 10 ++++++++-
.../InMemoryKeyPairResourceStore.java | 3 +--
.../InMemoryParticipantContextStore.java | 3 +--
.../defaults/DidDefaultServicesExtension.java | 7 ++++++-
.../defaults/InMemoryDidResourceStore.java | 6 +++++-
.../InMemoryDidResourceStoreTest.java | 3 ++-
.../keypairs/KeyPairServiceExtension.java | 2 ++
10 files changed, 38 insertions(+), 21 deletions(-)
rename core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/{CriterionToCredentialResourceConverter.java => CredentialResourceLookup.java} (71%)
diff --git a/DEPENDENCIES b/DEPENDENCIES
index 0e96af9fd..4a3ac96b8 100644
--- a/DEPENDENCIES
+++ b/DEPENDENCIES
@@ -203,7 +203,6 @@ maven/mavencentral/org.apache.velocity/velocity-engine-core/2.3, Apache-2.0, app
maven/mavencentral/org.apache.velocity/velocity-engine-scripting/2.3, Apache-2.0, approved, clearlydefined
maven/mavencentral/org.apiguardian/apiguardian-api/1.1.2, Apache-2.0, approved, clearlydefined
maven/mavencentral/org.assertj/assertj-core/3.25.1, Apache-2.0, approved, #12585
-maven/mavencentral/org.assertj/assertj-core/3.25.2, Apache-2.0, approved, #12585
maven/mavencentral/org.assertj/assertj-core/3.25.3, Apache-2.0, approved, #12585
maven/mavencentral/org.awaitility/awaitility/4.2.0, Apache-2.0, approved, clearlydefined
maven/mavencentral/org.bouncycastle/bcpkix-jdk18on/1.72, MIT, approved, #3789
diff --git a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CriterionToCredentialResourceConverter.java b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CredentialResourceLookup.java
similarity index 71%
rename from core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CriterionToCredentialResourceConverter.java
rename to core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CredentialResourceLookup.java
index d1ef2e3e1..91d6cbb6c 100644
--- a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CriterionToCredentialResourceConverter.java
+++ b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/CredentialResourceLookup.java
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2023 Metaform Systems, Inc.
+ * Copyright (c) 2024 Metaform Systems, Inc.
*
* This program and the accompanying materials are made available under the
* terms of the Apache License, Version 2.0 which is available at
@@ -14,27 +14,26 @@
package org.eclipse.edc.identityhub.defaults;
-import org.eclipse.edc.connector.core.store.CriterionToPredicateConverterImpl;
+import org.eclipse.edc.connector.core.store.ReflectionPropertyLookup;
import org.eclipse.edc.identityhub.spi.model.VerifiableCredentialResource;
-import org.eclipse.edc.spi.query.CriterionToPredicateConverter;
+import org.eclipse.edc.identitytrust.model.VerifiableCredentialContainer;
import org.eclipse.edc.spi.types.PathItem;
import org.eclipse.edc.util.reflection.ReflectionUtil;
import java.time.Instant;
import java.util.Objects;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
+
/**
- * This converts a Criterion to a Predicate, that can be used to query a {@link Stream} of {@link VerifiableCredentialResource} objects.
- *
- * Since the object graph of a {@link org.eclipse.edc.identitytrust.model.VerifiableCredential} is quite open, some special handling is required, e.g. for the
- * {@code credentialSubject} object.
+ * This class performs the lookup of properties in a {@link VerifiableCredentialResource}.
+ * There is some special handling for raw JSON properties like the {@link VerifiableCredentialContainer#rawVc()} and the {@code credentialSubject}, as the latter is
+ * basically schema-less.
*/
-public class CriterionToCredentialResourceConverter extends CriterionToPredicateConverterImpl implements CriterionToPredicateConverter {
+public class CredentialResourceLookup extends ReflectionPropertyLookup {
@Override
- protected Object property(String key, Object object) {
- var fieldValue = super.property(key, object);
+ public Object getProperty(String key, Object object) {
+ var fieldValue = super.getProperty(key, object);
if (fieldValue instanceof Instant) {
fieldValue = fieldValue.toString();
}
diff --git a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryCredentialStore.java b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryCredentialStore.java
index 9b070ce66..de3a26414 100644
--- a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryCredentialStore.java
+++ b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryCredentialStore.java
@@ -31,6 +31,7 @@ protected String getId(VerifiableCredentialResource newObject) {
@Override
protected QueryResolver createQueryResolver() {
- return new ReflectionBasedQueryResolver<>(VerifiableCredentialResource.class, new CriterionToCredentialResourceConverter());
+ criterionOperatorRegistry.registerPropertyLookup(new CredentialResourceLookup());
+ return new ReflectionBasedQueryResolver<>(VerifiableCredentialResource.class, criterionOperatorRegistry);
}
}
diff --git a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryEntityStore.java b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryEntityStore.java
index db15f4e05..3c030207c 100644
--- a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryEntityStore.java
+++ b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryEntityStore.java
@@ -14,6 +14,8 @@
package org.eclipse.edc.identityhub.defaults;
+import org.eclipse.edc.connector.core.store.CriterionOperatorRegistryImpl;
+import org.eclipse.edc.spi.query.CriterionOperatorRegistry;
import org.eclipse.edc.spi.query.QueryResolver;
import org.eclipse.edc.spi.query.QuerySpec;
import org.eclipse.edc.spi.result.StoreResult;
@@ -34,7 +36,13 @@
abstract class InMemoryEntityStore {
protected final Map store = new HashMap<>();
protected final ReentrantReadWriteLock lock = new ReentrantReadWriteLock(true);
- protected final QueryResolver queryResolver = createQueryResolver();
+ protected final QueryResolver queryResolver;
+ protected final CriterionOperatorRegistry criterionOperatorRegistry;
+
+ protected InMemoryEntityStore() {
+ criterionOperatorRegistry = CriterionOperatorRegistryImpl.ofDefaults();
+ queryResolver = createQueryResolver();
+ }
/**
* Creates a new entity if none exists.
diff --git a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryKeyPairResourceStore.java b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryKeyPairResourceStore.java
index fa2a8c347..cf328488f 100644
--- a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryKeyPairResourceStore.java
+++ b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryKeyPairResourceStore.java
@@ -14,7 +14,6 @@
package org.eclipse.edc.identityhub.defaults;
-import org.eclipse.edc.connector.core.store.CriterionToPredicateConverterImpl;
import org.eclipse.edc.connector.core.store.ReflectionBasedQueryResolver;
import org.eclipse.edc.identityhub.spi.model.KeyPairResource;
import org.eclipse.edc.identityhub.spi.store.KeyPairResourceStore;
@@ -28,7 +27,7 @@ protected String getId(KeyPairResource newObject) {
@Override
protected QueryResolver createQueryResolver() {
- return new ReflectionBasedQueryResolver<>(KeyPairResource.class, new CriterionToPredicateConverterImpl());
+ return new ReflectionBasedQueryResolver<>(KeyPairResource.class, criterionOperatorRegistry);
}
}
diff --git a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryParticipantContextStore.java b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryParticipantContextStore.java
index 41b0fc929..47c3df6bb 100644
--- a/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryParticipantContextStore.java
+++ b/core/identity-hub-credentials/src/main/java/org/eclipse/edc/identityhub/defaults/InMemoryParticipantContextStore.java
@@ -14,7 +14,6 @@
package org.eclipse.edc.identityhub.defaults;
-import org.eclipse.edc.connector.core.store.CriterionToPredicateConverterImpl;
import org.eclipse.edc.connector.core.store.ReflectionBasedQueryResolver;
import org.eclipse.edc.identityhub.spi.model.participant.ParticipantContext;
import org.eclipse.edc.identityhub.spi.store.ParticipantContextStore;
@@ -31,6 +30,6 @@ protected String getId(ParticipantContext newObject) {
@Override
protected QueryResolver createQueryResolver() {
- return new ReflectionBasedQueryResolver<>(ParticipantContext.class, new CriterionToPredicateConverterImpl());
+ return new ReflectionBasedQueryResolver<>(ParticipantContext.class, criterionOperatorRegistry);
}
}
diff --git a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/DidDefaultServicesExtension.java b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/DidDefaultServicesExtension.java
index c88be87bb..c9a5cef94 100644
--- a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/DidDefaultServicesExtension.java
+++ b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/DidDefaultServicesExtension.java
@@ -16,7 +16,9 @@
import org.eclipse.edc.identithub.did.spi.store.DidResourceStore;
import org.eclipse.edc.runtime.metamodel.annotation.Extension;
+import org.eclipse.edc.runtime.metamodel.annotation.Inject;
import org.eclipse.edc.runtime.metamodel.annotation.Provider;
+import org.eclipse.edc.spi.query.CriterionOperatorRegistry;
import org.eclipse.edc.spi.system.ServiceExtension;
import static org.eclipse.edc.identityhub.did.defaults.DidDefaultServicesExtension.NAME;
@@ -25,6 +27,9 @@
public class DidDefaultServicesExtension implements ServiceExtension {
public static final String NAME = "DID Default Services Extension";
+ @Inject
+ private CriterionOperatorRegistry criterionOperatorRegistry;
+
@Override
public String name() {
return NAME;
@@ -32,6 +37,6 @@ public String name() {
@Provider(isDefault = true)
public DidResourceStore createInMemoryDidResourceStore() {
- return new InMemoryDidResourceStore();
+ return new InMemoryDidResourceStore(criterionOperatorRegistry);
}
}
diff --git a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStore.java b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStore.java
index 95bf5568a..fc2f76e91 100644
--- a/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStore.java
+++ b/core/identity-hub-did/src/main/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStore.java
@@ -17,6 +17,7 @@
import org.eclipse.edc.connector.core.store.ReflectionBasedQueryResolver;
import org.eclipse.edc.identithub.did.spi.model.DidResource;
import org.eclipse.edc.identithub.did.spi.store.DidResourceStore;
+import org.eclipse.edc.spi.query.CriterionOperatorRegistry;
import org.eclipse.edc.spi.query.QueryResolver;
import org.eclipse.edc.spi.query.QuerySpec;
import org.eclipse.edc.spi.result.StoreResult;
@@ -32,8 +33,11 @@
public class InMemoryDidResourceStore implements DidResourceStore {
private final Map store = new HashMap<>();
private final ReentrantReadWriteLock lock = new ReentrantReadWriteLock();
- private final QueryResolver queryResolver = new ReflectionBasedQueryResolver<>(DidResource.class);
+ private final QueryResolver queryResolver;
+ public InMemoryDidResourceStore(CriterionOperatorRegistry criterionOperatorRegistry) {
+ queryResolver = new ReflectionBasedQueryResolver<>(DidResource.class, criterionOperatorRegistry);
+ }
@Override
public StoreResult save(DidResource resource) {
diff --git a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStoreTest.java b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStoreTest.java
index a3c397271..f220cce21 100644
--- a/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStoreTest.java
+++ b/core/identity-hub-did/src/test/java/org/eclipse/edc/identityhub/did/defaults/InMemoryDidResourceStoreTest.java
@@ -14,12 +14,13 @@
package org.eclipse.edc.identityhub.did.defaults;
+import org.eclipse.edc.connector.core.store.CriterionOperatorRegistryImpl;
import org.eclipse.edc.identithub.did.spi.store.DidResourceStore;
import org.eclipse.edc.identityhub.did.store.test.DidResourceStoreTestBase;
class InMemoryDidResourceStoreTest extends DidResourceStoreTestBase {
- private final DidResourceStore store = new InMemoryDidResourceStore();
+ private final DidResourceStore store = new InMemoryDidResourceStore(CriterionOperatorRegistryImpl.ofDefaults());
@Override
protected DidResourceStore getStore() {
diff --git a/core/identity-hub-keypairs/src/main/java/org/eclipse/edc/identityhub/keypairs/KeyPairServiceExtension.java b/core/identity-hub-keypairs/src/main/java/org/eclipse/edc/identityhub/keypairs/KeyPairServiceExtension.java
index 776383817..482bc894e 100644
--- a/core/identity-hub-keypairs/src/main/java/org/eclipse/edc/identityhub/keypairs/KeyPairServiceExtension.java
+++ b/core/identity-hub-keypairs/src/main/java/org/eclipse/edc/identityhub/keypairs/KeyPairServiceExtension.java
@@ -15,6 +15,7 @@
package org.eclipse.edc.identityhub.keypairs;
import org.eclipse.edc.identityhub.spi.KeyPairService;
+import org.eclipse.edc.identityhub.spi.events.diddocument.DidDocumentPublished;
import org.eclipse.edc.identityhub.spi.events.keypair.KeyPairObservable;
import org.eclipse.edc.identityhub.spi.events.participant.ParticipantContextCreated;
import org.eclipse.edc.identityhub.spi.events.participant.ParticipantContextDeleted;
@@ -56,6 +57,7 @@ public KeyPairService createParticipantService(ServiceExtensionContext context)
var service = new KeyPairServiceImpl(keyPairResourceStore, vault, context.getMonitor(), keyPairObservable());
eventRouter.registerSync(ParticipantContextCreated.class, service);
eventRouter.registerSync(ParticipantContextDeleted.class, service);
+ eventRouter.registerSync(DidDocumentPublished.class, service);
return service;
}