Skip to content

Commit b9af346

Browse files
authored
Merge pull request #239 from eclipse/fixes-repository
Fixes specialization repositories when it uses CrudRepository
2 parents cfb6645 + b6dfd18 commit b9af346

File tree

131 files changed

+486
-217
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

131 files changed

+486
-217
lines changed

CHANGELOG.adoc

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,10 @@ and this project adheres to https://semver.org/spec/v2.0.0.html[Semantic Version
88

99
== [Unreleased]
1010

11+
=== Fixed
12+
13+
- Fixes Repositories specializations when use methods from CrudRepository
14+
1115
=== Added
1216

1317
- Add BucketManagerFactory by injection to Redis

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManager.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,13 @@
1616

1717

1818
import com.arangodb.ArangoDB;
19-
2019
import com.arangodb.entity.BaseDocument;
20+
import jakarta.json.bind.Jsonb;
2121
import org.eclipse.jnosql.communication.Value;
22-
import org.eclipse.jnosql.communication.keyvalue.BucketManager;
23-
import org.eclipse.jnosql.communication.keyvalue.KeyValueEntity;
2422
import org.eclipse.jnosql.communication.driver.JsonbSupplier;
2523
import org.eclipse.jnosql.communication.driver.ValueJSON;
26-
27-
import jakarta.json.bind.Jsonb;
28-
29-
24+
import org.eclipse.jnosql.communication.keyvalue.BucketManager;
25+
import org.eclipse.jnosql.communication.keyvalue.KeyValueEntity;
3026

3127
import java.time.Duration;
3228
import java.util.Objects;

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBucketManagerFactory.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.arangodb.ArangoDB;
1818
import org.eclipse.jnosql.communication.keyvalue.BucketManagerFactory;
1919

20-
2120
import java.util.List;
2221
import java.util.Map;
2322
import java.util.Queue;

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBBuilders.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717
import com.arangodb.Protocol;
1818
import com.arangodb.entity.LoadBalancingStrategy;
1919
import org.eclipse.jnosql.communication.Configurations;
20-
2120
import org.eclipse.jnosql.communication.Settings;
2221

2322
import java.util.Arrays;

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import com.arangodb.entity.LoadBalancingStrategy;
2020
import org.eclipse.jnosql.communication.Settings;
2121

22-
2322
import static java.util.Objects.requireNonNull;
2423

2524
/**

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentConfiguration.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import org.eclipse.jnosql.communication.Settings;
2020
import org.eclipse.jnosql.communication.document.DocumentConfiguration;
2121

22-
2322
import static java.util.Objects.requireNonNull;
2423

2524
/**

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/ArangoDBDocumentManager.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,8 @@
1515
package org.eclipse.jnosql.databases.arangodb.communication;
1616

1717
import org.eclipse.jnosql.communication.document.DocumentEntity;
18-
1918
import org.eclipse.jnosql.communication.document.DocumentManager;
2019

21-
2220
import java.util.Map;
2321
import java.util.stream.Stream;
2422

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/communication/QueryAQLConverter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
package org.eclipse.jnosql.databases.arangodb.communication;
1616

1717
import jakarta.data.repository.Direction;
18-
1918
import jakarta.data.repository.Sort;
2019
import org.eclipse.jnosql.communication.TypeReference;
2120
import org.eclipse.jnosql.communication.document.Document;

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/mapping/ArangoDBDocumentRepositoryProxy.java

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,13 @@
1616

1717

1818
import jakarta.data.repository.PageableRepository;
19+
import org.eclipse.jnosql.mapping.Converters;
20+
import org.eclipse.jnosql.mapping.document.JNoSQLDocumentTemplate;
21+
import org.eclipse.jnosql.mapping.document.query.AbstractDocumentRepositoryProxy;
22+
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
23+
import org.eclipse.jnosql.mapping.metadata.EntityMetadata;
1924
import org.eclipse.jnosql.mapping.repository.DynamicReturn;
2025

21-
import java.lang.reflect.InvocationHandler;
2226
import java.lang.reflect.Method;
2327
import java.lang.reflect.ParameterizedType;
2428
import java.util.Map;
@@ -28,25 +32,60 @@
2832
import static java.util.Collections.emptyMap;
2933
import static org.eclipse.jnosql.mapping.repository.DynamicReturn.toSingleResult;
3034

31-
class ArangoDBDocumentRepositoryProxy<T> implements InvocationHandler {
35+
class ArangoDBDocumentRepositoryProxy<T> extends AbstractDocumentRepositoryProxy<T> {
3236

3337
private final Class<T> typeClass;
3438

3539
private final ArangoDBTemplate template;
3640

3741
private final PageableRepository<?, ?> repository;
3842

43+
private final Class<?> repositoryType;
3944

40-
ArangoDBDocumentRepositoryProxy(ArangoDBTemplate template, Class<?> repositoryType, PageableRepository<?, ?> repository) {
45+
private final Converters converters;
46+
47+
private final EntityMetadata entityMetadata;
48+
49+
ArangoDBDocumentRepositoryProxy(ArangoDBTemplate template, Class<?> repositoryType,
50+
PageableRepository<?, ?> repository, Converters converters,
51+
EntitiesMetadata entitiesMetadata) {
4152
this.template = template;
4253
this.typeClass = Class.class.cast(ParameterizedType.class.cast(repositoryType.getGenericInterfaces()[0])
4354
.getActualTypeArguments()[0]);
4455
this.repository = repository;
56+
this.repositoryType = repositoryType;
57+
this.converters = converters;
58+
this.entityMetadata = entitiesMetadata.get(typeClass);
59+
}
60+
61+
62+
@Override
63+
protected PageableRepository getRepository() {
64+
return repository;
65+
}
66+
67+
@Override
68+
protected Class<?> repositoryType() {
69+
return repositoryType;
4570
}
4671

72+
@Override
73+
protected Converters getConverters() {
74+
return converters;
75+
}
4776

4877
@Override
49-
public Object invoke(Object o, Method method, Object[] args) throws Throwable {
78+
protected EntityMetadata getEntityMetadata() {
79+
return entityMetadata;
80+
}
81+
82+
@Override
83+
protected JNoSQLDocumentTemplate getTemplate() {
84+
return template;
85+
}
86+
87+
@Override
88+
public Object invoke(Object instance, Method method, Object[] args) throws Throwable {
5089

5190
AQL aql = method.getAnnotation(AQL.class);
5291
if (Objects.nonNull(aql)) {
@@ -64,8 +103,9 @@ public Object invoke(Object o, Method method, Object[] args) throws Throwable {
64103
.withSingleResult(toSingleResult(method).apply(() -> result))
65104
.build().execute();
66105
}
67-
return method.invoke(repository, args);
106+
return super.invoke(instance, method, args);
68107
}
69108

70109

110+
71111
}

jnosql-arangodb/src/main/java/org/eclipse/jnosql/databases/arangodb/mapping/ArangoDBRepositoryBean.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,9 @@
1818
import jakarta.enterprise.context.spi.CreationalContext;
1919
import jakarta.enterprise.inject.Default;
2020
import jakarta.enterprise.util.AnnotationLiteral;
21+
import org.eclipse.jnosql.mapping.Converters;
2122
import org.eclipse.jnosql.mapping.document.query.DocumentRepositoryProducer;
23+
import org.eclipse.jnosql.mapping.metadata.EntitiesMetadata;
2224
import org.eclipse.jnosql.mapping.spi.AbstractBean;
2325

2426
import java.lang.annotation.Annotation;
@@ -52,10 +54,11 @@ public Class<?> getBeanClass() {
5254
public ArangoDBRepository create(CreationalContext<ArangoDBRepository> creationalContext) {
5355
ArangoDBTemplate template = getInstance(ArangoDBTemplate.class);
5456
DocumentRepositoryProducer producer = getInstance(DocumentRepositoryProducer.class);
55-
57+
Converters converters = getInstance(Converters.class);
58+
EntitiesMetadata entitiesMetadata = getInstance(EntitiesMetadata.class);
5659
PageableRepository<Object, Object> repository = producer.get((Class<PageableRepository<Object, Object>>) type, template);
5760

58-
ArangoDBDocumentRepositoryProxy handler = new ArangoDBDocumentRepositoryProxy(template,type, repository);
61+
ArangoDBDocumentRepositoryProxy handler = new ArangoDBDocumentRepositoryProxy(template,type, repository, converters, entitiesMetadata);
5962
return (ArangoDBRepository) Proxy.newProxyInstance(type.getClassLoader(),
6063
new Class[]{type},
6164
handler);

0 commit comments

Comments
 (0)