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; }