Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
15 commits
Select commit Hold shift + click to select a range
abdeec0
fix: add @SuppressWarnings to resolve unchecked cast warning in KeyVa…
otaviojava Nov 28, 2025
d522a05
refactor: simplify key-value repository hierarchy by removing unused …
otaviojava Nov 28, 2025
dbd3558
refactor: remove AbstractKeyValueRepositoryProxy as an unused abstrac…
otaviojava Nov 28, 2025
3132db7
feat: introduce CoreRepositoryInvocationHandler for enhanced reposito…
otaviojava Nov 28, 2025
8f1b1b4
feat: enhance CoreRepositoryInvocationHandler with detailed documenta…
otaviojava Nov 28, 2025
6194705
chore: add static factory method for CoreRepositoryInvocationHandler
otaviojava Nov 28, 2025
5d7dee1
feat: update tests to use CoreRepositoryInvocationHandler for improve…
otaviojava Nov 28, 2025
c40571f
test: update test to utilize CoreRepositoryInvocationHandler
otaviojava Nov 28, 2025
a8b6735
refactor: remove AbstractKeyValueRepositoryProxy as an unused abstrac…
otaviojava Nov 28, 2025
609a196
refactor: replace KeyValueRepositoryProxy with CoreRepositoryInvocati…
otaviojava Nov 28, 2025
85071f6
refactor: update DefaultKeyValueRepository and KeyValueRepositoryProd…
otaviojava Nov 28, 2025
d1e3ddc
refactor: simplify metadata retrieval in KeyValueRepositoryProducer a…
otaviojava Nov 28, 2025
ae30d38
test: fix delete verification in KeyValueRepositoryProxyTest
otaviojava Nov 28, 2025
a5bb2c7
test: fix method naming in KeyValueRepositoryProxyTest and UserReposi…
otaviojava Nov 28, 2025
a04fe4d
test: fix method naming in KeyValueRepositoryProxyTest and UserReposi…
otaviojava Nov 28, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,131 @@
/*
* Copyright (c) 2025 Contributors to the Eclipse Foundation
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Apache License v2.0 which accompanies this distribution.
* The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html
* and the Apache License v2.0 is available at http://www.opensource.org/licenses/apache2.0.php.
*
* You may elect to redistribute this code under either of these licenses.
*
* Contributors:
*
* Otavio Santana
*/
package org.eclipse.jnosql.mapping.core.repository;

import jakarta.nosql.Template;
import org.eclipse.jnosql.mapping.core.query.AbstractRepository;
import org.eclipse.jnosql.mapping.metadata.EntityMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoryMetadata;

import java.util.Objects;

/**
* Invocation handler responsible for executing repository methods for the
* Core Jakarta NoSQL engine. This handler coordinates the interaction between
* the underlying {@link AbstractRepository} implementation, entity metadata,
* repository metadata, and the execution operators that perform individual
* repository operations.
*
* <p>The Core handler provides the baseline method dispatching mechanism used
* when no storage-specific engine (such as key-value or semi-structured) is
* active. It delegates CRUD operations to the {@link AbstractRepository} and
* forwards all semantic method types to the appropriate components supplied by
* {@link InfrastructureOperatorProvider} and {@link RepositoryOperationProvider}.
*
* <p>This class serves as the default invocation pipeline for repositories
* generated or proxied by the Core API, ensuring consistent resolution of
* repository methods and integration with the underlying {@link Template}.
*/
public class CoreRepositoryInvocationHandler<T, K> extends AbstractRepositoryInvocationHandler<T, K> {

private final AbstractRepository<T, K> repository;

private final EntityMetadata entityMetadata;

private final RepositoryMetadata repositoryMetadata;

private final InfrastructureOperatorProvider infrastructureOperatorProvider;

private final RepositoryOperationProvider repositoryOperationProvider;

private final Template template;

private CoreRepositoryInvocationHandler(
AbstractRepository<T, K> repository,
EntityMetadata entityMetadata,
RepositoryMetadata repositoryMetadata,
InfrastructureOperatorProvider infrastructureOperatorProvider,
RepositoryOperationProvider repositoryOperationProvider,
Template template
) {
this.repository = Objects.requireNonNull(repository, "repository is required");
this.entityMetadata = Objects.requireNonNull(entityMetadata, "entityMetadata is required");
this.repositoryMetadata = Objects.requireNonNull(repositoryMetadata, "repositoryMetadata is required");
this.infrastructureOperatorProvider = Objects.requireNonNull(infrastructureOperatorProvider, "infrastructureOperatorProvider is required");
this.repositoryOperationProvider = Objects.requireNonNull(repositoryOperationProvider, "repositoryOperationProvider is required");
this.template = Objects.requireNonNull(template, "template is required");
}

@Override
protected AbstractRepository<T, K> repository() {
return repository;
}

@Override
protected EntityMetadata entityMetadata() {
return entityMetadata;
}

@Override
protected RepositoryMetadata repositoryMetadata() {
return repositoryMetadata;
}

@Override
protected InfrastructureOperatorProvider infrastructureOperatorProvider() {
return infrastructureOperatorProvider;
}

@Override
protected RepositoryOperationProvider repositoryOperationProvider() {
return repositoryOperationProvider;
}

@Override
protected Template template() {
return template;
}

/**
* Creates a new {@code CoreRepositoryInvocationHandler} with the components
* required to resolve and execute Jakarta Data repository methods through the
* Core engine.
*
* @param repository the repository implementation that provides CRUD semantics
* @param entityMetadata metadata describing the entity type managed by the repository
* @param repositoryMetadata metadata describing the Jakarta Data repository interface
* @param infrastructureOperatorProvider provider for executing built-in or custom infrastructure methods
* @param repositoryOperationProvider provider for executing semantic repository operations
* @param template the underlying NoSQL {@link Template} used for persistence
* @throws NullPointerException if any argument is {@code null}
*/
public static <T, K> CoreRepositoryInvocationHandler<T, K> of(
AbstractRepository<T, K> repository,
EntityMetadata entityMetadata,
RepositoryMetadata repositoryMetadata,
InfrastructureOperatorProvider infrastructureOperatorProvider,
RepositoryOperationProvider repositoryOperationProvider,
Template template
) {
return new CoreRepositoryInvocationHandler<>(
repository,
entityMetadata,
repositoryMetadata,
infrastructureOperatorProvider,
repositoryOperationProvider,
template
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.jnosql.mapping.core.VetedConverter;
import org.eclipse.jnosql.mapping.core.entities.ComicBook;
import org.eclipse.jnosql.mapping.core.entities.ComicBookRepository;
import org.eclipse.jnosql.mapping.core.repository.CoreRepositoryInvocationHandler;
import org.eclipse.jnosql.mapping.core.repository.InfrastructureOperatorProvider;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoriesMetadata;
Expand Down Expand Up @@ -57,14 +58,14 @@ class DeleteOperationRepositoryInvocationHandlerTest {
@Inject
private CoreBaseRepositoryOperationProvider repositoryOperationProvider;
private TestRepositoryExecutor executor;
private TestRepositoryInvocationHandler<?, ?> repositoryHandler;
private CoreRepositoryInvocationHandler<?, ?> repositoryHandler;
private ComicBookRepository comicBookRepository;

@BeforeEach
void setUp() {
this.template = Mockito.mock(Template.class);
this.executor = new TestRepositoryExecutor(this.template, entitiesMetadata);
this.repositoryHandler = new TestRepositoryInvocationHandler<>(executor
this.repositoryHandler = CoreRepositoryInvocationHandler.of(executor
, entitiesMetadata.get(ComicBook.class),
repositoriesMetadata.get(ComicBookRepository.class).orElseThrow(),
infrastructureOperatorProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import org.eclipse.jnosql.mapping.core.VetedConverter;
import org.eclipse.jnosql.mapping.core.entities.ComicBook;
import org.eclipse.jnosql.mapping.core.entities.ComicBookRepository;
import org.eclipse.jnosql.mapping.core.repository.CoreRepositoryInvocationHandler;
import org.eclipse.jnosql.mapping.core.repository.InfrastructureOperatorProvider;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoriesMetadata;
Expand Down Expand Up @@ -56,14 +57,14 @@ class InfrastructureOperationRepositoryInvocationHandlerTest {
@Inject
private CoreBaseRepositoryOperationProvider repositoryOperationProvider;
private TestRepositoryExecutor executor;
private TestRepositoryInvocationHandler<?, ?> repositoryHandler;
private CoreRepositoryInvocationHandler<?, ?> repositoryHandler;
private ComicBookRepository comicBookRepository;

@BeforeEach
void setUp() {
this.template = Mockito.mock(Template.class);
this.executor = new TestRepositoryExecutor(this.template, entitiesMetadata);
this.repositoryHandler = new TestRepositoryInvocationHandler<>(executor
this.repositoryHandler = CoreRepositoryInvocationHandler.of(executor
, entitiesMetadata.get(ComicBook.class),
repositoriesMetadata.get(ComicBookRepository.class).orElseThrow(),
infrastructureOperatorProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.jnosql.mapping.core.VetedConverter;
import org.eclipse.jnosql.mapping.core.entities.ComicBook;
import org.eclipse.jnosql.mapping.core.entities.ComicBookRepository;
import org.eclipse.jnosql.mapping.core.repository.CoreRepositoryInvocationHandler;
import org.eclipse.jnosql.mapping.core.repository.InfrastructureOperatorProvider;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoriesMetadata;
Expand Down Expand Up @@ -57,14 +58,14 @@ class InsertOperationRepositoryInvocationHandlerTest {
@Inject
private CoreBaseRepositoryOperationProvider repositoryOperationProvider;
private TestRepositoryExecutor executor;
private TestRepositoryInvocationHandler<?, ?> repositoryHandler;
private CoreRepositoryInvocationHandler<?, ?> repositoryHandler;
private ComicBookRepository comicBookRepository;

@BeforeEach
void setUp() {
this.template = Mockito.mock(Template.class);
this.executor = new TestRepositoryExecutor(this.template, entitiesMetadata);
this.repositoryHandler = new TestRepositoryInvocationHandler<>(executor
this.repositoryHandler = CoreRepositoryInvocationHandler.of(executor
, entitiesMetadata.get(ComicBook.class),
repositoriesMetadata.get(ComicBookRepository.class).orElseThrow(),
infrastructureOperatorProvider,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.jnosql.mapping.core.VetedConverter;
import org.eclipse.jnosql.mapping.core.entities.ComicBook;
import org.eclipse.jnosql.mapping.core.entities.ComicBookRepository;
import org.eclipse.jnosql.mapping.core.repository.CoreRepositoryInvocationHandler;
import org.eclipse.jnosql.mapping.core.repository.InfrastructureOperatorProvider;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoriesMetadata;
Expand Down Expand Up @@ -58,14 +59,14 @@ class SaveOperationRepositoryInvocationHandlerTest {
@Inject
private CoreBaseRepositoryOperationProvider repositoryOperationProvider;
private TestRepositoryExecutor executor;
private TestRepositoryInvocationHandler<?, ?> repositoryHandler;
private CoreRepositoryInvocationHandler<?, ?> repositoryHandler;
private ComicBookRepository comicBookRepository;

@BeforeEach
void setUp() {
this.template = Mockito.mock(Template.class);
this.executor = new TestRepositoryExecutor(this.template, entitiesMetadata);
this.repositoryHandler = new TestRepositoryInvocationHandler<>(executor
this.repositoryHandler = CoreRepositoryInvocationHandler.of(executor
, entitiesMetadata.get(ComicBook.class),
repositoriesMetadata.get(ComicBookRepository.class).orElseThrow(),
infrastructureOperatorProvider,
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
import org.eclipse.jnosql.mapping.core.VetedConverter;
import org.eclipse.jnosql.mapping.core.entities.ComicBook;
import org.eclipse.jnosql.mapping.core.entities.ComicBookRepository;
import org.eclipse.jnosql.mapping.core.repository.CoreRepositoryInvocationHandler;
import org.eclipse.jnosql.mapping.core.repository.InfrastructureOperatorProvider;
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
import org.eclipse.jnosql.mapping.metadata.repository.RepositoriesMetadata;
Expand Down Expand Up @@ -57,14 +58,14 @@ class UpdateOperationRepositoryInvocationHandlerTest {
@Inject
private CoreBaseRepositoryOperationProvider repositoryOperationProvider;
private TestRepositoryExecutor executor;
private TestRepositoryInvocationHandler<?, ?> repositoryHandler;
private CoreRepositoryInvocationHandler<?, ?> repositoryHandler;
private ComicBookRepository comicBookRepository;

@BeforeEach
void setUp() {
this.template = Mockito.mock(Template.class);
this.executor = new TestRepositoryExecutor(this.template, entitiesMetadata);
this.repositoryHandler = new TestRepositoryInvocationHandler<>(executor
this.repositoryHandler = CoreRepositoryInvocationHandler.of(executor
, entitiesMetadata.get(ComicBook.class),
repositoriesMetadata.get(ComicBookRepository.class).orElseThrow(),
infrastructureOperatorProvider,
Expand Down

This file was deleted.

Loading