diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/Condition.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/Condition.java index 92f7206fa..4f437c20e 100644 --- a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/Condition.java +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/Condition.java @@ -93,7 +93,7 @@ public String getNameField() { */ public static Condition parse(String condition) { Objects.requireNonNull(condition, "condition is required"); - return Arrays.stream(Condition.values()) + return Arrays.stream(values()) .filter(c -> c.getNameField() .equals(condition)).findFirst() .orElseThrow(() -> diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/TypeReference.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/TypeReference.java index b7c7a25bd..fdfc08020 100644 --- a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/TypeReference.java +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/TypeReference.java @@ -39,6 +39,7 @@ protected TypeReference() { * * @return the type */ + @Override public Type get() { return type; } diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/ValueWriterDecorator.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/ValueWriterDecorator.java index 1c6b21c76..68256aaf9 100644 --- a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/ValueWriterDecorator.java +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/ValueWriterDecorator.java @@ -30,7 +30,7 @@ */ public final class ValueWriterDecorator implements ValueWriter { - private static final ValueWriter INSTANCE = new ValueWriterDecorator(); + private static final ValueWriter INSTANCE = new ValueWriterDecorator<>(); private final List writers = new ArrayList<>(); diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/EnumReader.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/EnumReader.java index 460f2ba34..118dd036f 100644 --- a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/EnumReader.java +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/EnumReader.java @@ -23,6 +23,7 @@ import java.util.ArrayList; import java.util.EnumSet; import java.util.List; +import java.util.Set; /** * Class to reads and converts to {@link Enum} @@ -35,6 +36,7 @@ public boolean test(Class type) { return Enum.class.isAssignableFrom(type); } + @SuppressWarnings({"unchecked", "rawtypes"}) @Override public T read(Class type, Object value) { @@ -57,10 +59,10 @@ public T read(Class type, Object value) { .orElseThrow(() -> new IllegalArgumentException("There isn't name in enum to value: " + name)); } + @SuppressWarnings({"unchecked", "rawtypes"}) private List getEnumList(Class type) { - EnumSet enumSet = EnumSet.allOf(type); + Set enumSet = EnumSet.allOf(type); return new ArrayList<>(enumSet); } - } diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/NavigableSetTypeReferenceReader.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/NavigableSetTypeReferenceReader.java index c8844e6fd..bed186eee 100644 --- a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/NavigableSetTypeReferenceReader.java +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/reader/NavigableSetTypeReferenceReader.java @@ -48,9 +48,9 @@ public boolean test(TypeSupplier typeReference) { Type collectionType = parameterizedType.getRawType(); Type elementType = parameterizedType.getActualTypeArguments()[0]; - boolean isNavigableSet = (NavigableSet.class.equals(collectionType) + boolean isNavigableSet = NavigableSet.class.equals(collectionType) || - SortedSet.class.equals(collectionType)); + SortedSet.class.equals(collectionType); boolean isElementCompatible = elementType instanceof Class && Comparable.class.isAssignableFrom((Class) elementType); diff --git a/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/util/StringUtils.java b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/util/StringUtils.java new file mode 100644 index 000000000..5fe7c9373 --- /dev/null +++ b/jnosql-communication/jnosql-communication-core/src/main/java/org/eclipse/jnosql/communication/util/StringUtils.java @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2024 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.communication.util; + +public final class StringUtils { + + private StringUtils() { + } + + public static boolean isBlank(final CharSequence cs) { + final int strLen = length(cs); + if (strLen == 0) { + return true; + } + for (int i = 0; i < strLen; i++) { + if (!Character.isWhitespace(cs.charAt(i))) { + return false; + } + } + return true; + } + + + private static int length(final CharSequence cs) { + return cs == null ? 0 : cs.length(); + } +} diff --git a/jnosql-communication/jnosql-communication-core/src/test/java/org/eclipse/jnosql/communication/util/StringUtilsTest.java b/jnosql-communication/jnosql-communication-core/src/test/java/org/eclipse/jnosql/communication/util/StringUtilsTest.java new file mode 100644 index 000000000..b29c41afd --- /dev/null +++ b/jnosql-communication/jnosql-communication-core/src/test/java/org/eclipse/jnosql/communication/util/StringUtilsTest.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2024 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.communication.util; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; + + +class StringUtilsTest { + + @Test + void shouldIsBlank() { + Assertions.assertThat(StringUtils.isBlank(null)).isTrue(); + Assertions.assertThat(StringUtils.isBlank("")).isTrue(); + Assertions.assertThat(StringUtils.isBlank("bob")).isFalse(); + Assertions.assertThat(StringUtils.isBlank(" bob ")).isFalse(); + } + +} diff --git a/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManager.java b/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManager.java index e92c64084..7156805b6 100644 --- a/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManager.java +++ b/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManager.java @@ -123,6 +123,7 @@ public interface BucketManager extends AutoCloseable { /** * closes a resource */ + @Override void close(); } diff --git a/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManagerFactory.java b/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManagerFactory.java index 155128c48..29c514ca2 100644 --- a/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManagerFactory.java +++ b/jnosql-communication/jnosql-communication-key-value/src/main/java/org/eclipse/jnosql/communication/keyvalue/BucketManagerFactory.java @@ -78,5 +78,6 @@ public interface BucketManagerFactory extends Function, A /** * closes a resource */ + @Override void close(); } diff --git a/jnosql-communication/jnosql-communication-query/src/main/java/org/eclipse/jnosql/communication/query/method/QueryTokenizer.java b/jnosql-communication/jnosql-communication-query/src/main/java/org/eclipse/jnosql/communication/query/method/QueryTokenizer.java index 349e939ce..fe96d2445 100644 --- a/jnosql-communication/jnosql-communication-query/src/main/java/org/eclipse/jnosql/communication/query/method/QueryTokenizer.java +++ b/jnosql-communication/jnosql-communication-query/src/main/java/org/eclipse/jnosql/communication/query/method/QueryTokenizer.java @@ -103,8 +103,8 @@ private static String processOrderBy(String query) { String[] tokens = query.split(" "); boolean afterOrderBy = false; - for (int i = 0; i < tokens.length; i++) { - String token = tokens[i]; + for (int index = 0; index < tokens.length; index++) { + String token = tokens[index]; if (token.equals("OrderBy")) { afterOrderBy = true; @@ -115,13 +115,13 @@ private static String processOrderBy(String query) { result.append(token).append(" "); } else { // Combine all tokens until "Asc" or "Desc" - while (i < tokens.length && !tokens[i].equals("Asc") && !tokens[i].equals("Desc")) { - result.append(tokens[i]); - i++; + while (index < tokens.length && !tokens[index].equals("Asc") && !tokens[index].equals("Desc")) { + result.append(tokens[index]); + index++; } // Add the final Asc or Desc if present - if (i < tokens.length) { - result.append(" ").append(tokens[i]).append(" "); + if (index < tokens.length) { + result.append(" ").append(tokens[index]).append(" "); } } afterOrderBy = false; // Processed the relevant tokens after OrderBy diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CommunicationEntity.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CommunicationEntity.java index 4e6584aa6..929ddef19 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CommunicationEntity.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CommunicationEntity.java @@ -61,7 +61,7 @@ public class CommunicationEntity { * @throws NullPointerException if the specified list is {@code null} */ public void addAll(List elements) { - Objects.requireNonNull(elements, "The object column is required"); + requireNonNull(elements, "The object column is required"); elements.forEach(this::add); } @@ -72,7 +72,7 @@ public void addAll(List elements) { * @throws NullPointerException if the specified element is {@code null} */ public void add(Element element) { - Objects.requireNonNull(element, "Column is required"); + requireNonNull(element, "Column is required"); this.elements.put(element.name(), element); } @@ -183,8 +183,8 @@ public Optional find(String columnName) { * @throws NullPointerException if either the specified name or type is {@code null} */ public Optional find(String elementName, Class type) { - Objects.requireNonNull(elementName, "elementName is required"); - Objects.requireNonNull(type, "type is required"); + requireNonNull(elementName, "elementName is required"); + requireNonNull(type, "type is required"); return ofNullable(elements.get(elementName)) .map(c -> c.get(type)); } @@ -200,8 +200,8 @@ public Optional find(String elementName, Class type) { * @throws NullPointerException if either the specified name or type supplier is {@code null} */ public Optional find(String elementName, TypeSupplier type) { - Objects.requireNonNull(elementName, "elementName is required"); - Objects.requireNonNull(type, "type is required"); + requireNonNull(elementName, "elementName is required"); + requireNonNull(type, "type is required"); return ofNullable(elements.get(elementName)) .map(v -> v.get(type)); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CriteriaCondition.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CriteriaCondition.java index c2c92a050..053dbacd9 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CriteriaCondition.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/CriteriaCondition.java @@ -81,7 +81,7 @@ public CriteriaCondition and(CriteriaCondition condition) { Element newElement = getConditions(condition, Condition.AND); return new CriteriaCondition(newElement, Condition.AND); } - return CriteriaCondition.and(this, condition); + return and(this, condition); } /** @@ -115,11 +115,11 @@ public CriteriaCondition or(CriteriaCondition condition) { Element newElement = getConditions(condition, Condition.OR); return new CriteriaCondition(newElement, Condition.OR); } - return CriteriaCondition.or(this, condition); + return or(this, condition); } private Element getConditions(CriteriaCondition criteriaCondition, Condition condition) { - List conditions = new ArrayList<>(element.get(new TypeReference>() { + var conditions = new ArrayList<>(element.get(new TypeReference>() { })); conditions.add(criteriaCondition); return Element.of(condition.getNameField(), conditions); @@ -429,7 +429,7 @@ public static CriteriaCondition not(CriteriaCondition condition) { public static CriteriaCondition and(CriteriaCondition... conditions) { Objects.requireNonNull(conditions, "Condition is required"); Element element = Element.of(Condition.AND.getNameField(), Arrays.asList(conditions)); - return CriteriaCondition.of(element, Condition.AND); + return of(element, Condition.AND); } /** @@ -451,7 +451,7 @@ public static CriteriaCondition and(CriteriaCondition... conditions) { public static CriteriaCondition or(CriteriaCondition... conditions) { Objects.requireNonNull(conditions, "Condition is required"); Element element = Element.of(Condition.OR.getNameField(), Arrays.asList(conditions)); - return CriteriaCondition.of(element, Condition.OR); + return of(element, Condition.OR); } private static void checkInClause(Value value) { diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java index 2630aa7e0..d5b41cfbe 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManager.java @@ -348,5 +348,6 @@ default CursoredPage selectCursor(SelectQuery query, PageRe /** * Closes the database manager and releases any associated resources. */ + @Override void close(); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerFactory.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerFactory.java index 1963daff8..eb782e053 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerFactory.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DatabaseManagerFactory.java @@ -36,5 +36,6 @@ public interface DatabaseManagerFactory extends FunctionNote: Some databases may not perform any specific actions upon closing.

*/ + @Override void close(); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultDeleteQueryBuilder.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultDeleteQueryBuilder.java index ef8ee7cb5..7a1ec2d57 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultDeleteQueryBuilder.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultDeleteQueryBuilder.java @@ -34,7 +34,7 @@ class DefaultDeleteQueryBuilder implements DeleteQueryBuilder { @Override public DeleteQueryBuilder delete(String column) { - Objects.requireNonNull(column, "column is required"); + requireNonNull(column, "column is required"); this.columns.add(column); return this; } @@ -49,14 +49,14 @@ public DeleteQueryBuilder delete(String... columns) { @Override public DeleteQueryBuilder from(String entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); this.entity = entity; return this; } @Override public DeleteQueryBuilder where(CriteriaCondition condition) { - Objects.requireNonNull(condition, "condition is required"); + requireNonNull(condition, "condition is required"); this.condition = condition; return this; } @@ -71,7 +71,7 @@ public DeleteQuery build() { @Override public void delete(DatabaseManager manager) { - Objects.requireNonNull(manager, "manager is required"); + requireNonNull(manager, "manager is required"); manager.delete(build()); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentDeleteQueryBuilder.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentDeleteQueryBuilder.java index 3e77883a7..63226ec29 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentDeleteQueryBuilder.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentDeleteQueryBuilder.java @@ -33,6 +33,7 @@ class DefaultFluentDeleteQueryBuilder extends BaseQueryBuilder implements Entity DefaultFluentDeleteQueryBuilder(List columns) { + super(); this.columns = columns; } @@ -134,4 +135,4 @@ public void delete(DatabaseManager manager) { manager.delete(this.build()); } -} \ No newline at end of file +} diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentSelectQueryBuilderElements.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentSelectQueryBuilderElements.java index 2b3c6602d..93be0f3ff 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentSelectQueryBuilderElements.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultFluentSelectQueryBuilderElements.java @@ -50,6 +50,7 @@ class DefaultFluentSelectQueryBuilderElements extends BaseQueryBuilder implement DefaultFluentSelectQueryBuilderElements(List columns) { + super(); this.columns = columns; } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultQueryBuilder.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultQueryBuilder.java index 048139a53..3f791dee9 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultQueryBuilder.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/DefaultQueryBuilder.java @@ -39,7 +39,7 @@ class DefaultQueryBuilder implements SelectQuery.QueryBuilder { @Override public SelectQuery.QueryBuilder select(String column) { - Objects.requireNonNull(column, "column is required"); + requireNonNull(column, "column is required"); this.columns.add(column); return this; } @@ -54,7 +54,7 @@ public SelectQuery.QueryBuilder select(String... columns) { @Override public SelectQuery.QueryBuilder sort(Sort sort) { - Objects.requireNonNull(sort, "sort is required"); + requireNonNull(sort, "sort is required"); this.sorts.add(sort); return this; } @@ -69,14 +69,14 @@ public SelectQuery.QueryBuilder sort(Sort... sorts) { @Override public SelectQuery.QueryBuilder from(String entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); this.entity = entity; return this; } @Override public SelectQuery.QueryBuilder where(CriteriaCondition condition) { - Objects.requireNonNull(condition, "condition is required"); + requireNonNull(condition, "condition is required"); this.condition = condition; return this; } @@ -110,13 +110,13 @@ public SelectQuery build() { @Override public Stream getResult(DatabaseManager manager) { - Objects.requireNonNull(manager, "manager is required"); + requireNonNull(manager, "manager is required"); return manager.select(build()); } @Override public Optional getSingleResult(DatabaseManager manager) { - Objects.requireNonNull(manager, "manager is required"); + requireNonNull(manager, "manager is required"); return manager.singleResult(build()); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/Elements.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/Elements.java index 2b0ce3ef1..ff871e395 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/Elements.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/Elements.java @@ -64,7 +64,7 @@ public static List of(Map values) { private static Object getValue(Object value) { if (value instanceof Map) { - List list = Elements.of((Map.class.cast(value))); + List list = of(Map.class.cast(value)); if(list.size() == 1) { return list.get(0); } diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/QueryType.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/QueryType.java index 69506eb13..f60312794 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/QueryType.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/QueryType.java @@ -67,7 +67,7 @@ public enum QueryType { */ public static QueryType parse(String query) { Objects.requireNonNull(query, "Query string cannot be null"); - String command = QueryType.extractQueryCommand(query); + String command = extractQueryCommand(query); return switch (command) { case "DELETE" -> DELETE; case "UPDATE" -> UPDATE; diff --git a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/SelectQueryParser.java b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/SelectQueryParser.java index a95a17cac..11403456f 100644 --- a/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/SelectQueryParser.java +++ b/jnosql-communication/jnosql-communication-semistructured/src/main/java/org/eclipse/jnosql/communication/semistructured/SelectQueryParser.java @@ -20,7 +20,6 @@ import java.util.List; import java.util.Objects; import java.util.function.BiFunction; -import java.util.stream.Collectors; import java.util.stream.Stream; import static java.util.stream.Collectors.toList; @@ -28,11 +27,6 @@ public final class SelectQueryParser implements BiFunction { - /** - * The default constructor - */ - public SelectQueryParser() { - } Stream query(String query, String entity, DatabaseManager manager, CommunicationObserverParser observer) { @@ -71,8 +65,7 @@ private SelectQuery query(String query, String entity, CommunicationObserverPars var limit = selectQuery.limit(); var skip = selectQuery.skip(); var columns = selectQuery.fields().stream() - .map(f -> observer.fireSelectField(entityName, f)) - .collect(Collectors.toList()); + .map(f -> observer.fireSelectField(entityName, f)).toList(); List> sorts = selectQuery.orderBy().stream().map(s -> toSort(s, observer, entityName)) .collect(toList()); @@ -94,7 +87,7 @@ private SelectQuery query(Params params, org.eclipse.jnosql.communication.query. long skip = selectQuery.skip(); List columns = selectQuery.fields().stream() .map(f -> observer.fireSelectField(entity, f)) - .collect(Collectors.toList()); + .toList(); List> sorts = selectQuery.orderBy().stream().map(s -> toSort(s, observer, entity)).collect(toList()); CriteriaCondition condition = selectQuery.where() @@ -112,4 +105,4 @@ private Sort toSort(Sort sort, CommunicationObserverParser observer, Strin } -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/DatabaseQualifier.java b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/DatabaseQualifier.java index 8e720ef84..5bb83a2e9 100644 --- a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/DatabaseQualifier.java +++ b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/DatabaseQualifier.java @@ -16,6 +16,7 @@ import jakarta.enterprise.util.AnnotationLiteral; +import org.eclipse.jnosql.communication.util.StringUtils; import java.util.Objects; @@ -78,7 +79,7 @@ public static DatabaseQualifier ofDocument() { */ public static DatabaseQualifier ofDocument(String provider) { Objects.requireNonNull(provider, "provider is required"); - if (provider.trim().isEmpty()) { + if (StringUtils.isBlank(provider)) { return DEFAULT_DOCUMENT_PROVIDER; } return new DatabaseQualifier(provider, DOCUMENT); @@ -104,7 +105,7 @@ public static DatabaseQualifier ofColumn() { */ public static DatabaseQualifier ofColumn(String provider) { Objects.requireNonNull(provider, "provider is required"); - if (provider.trim().isEmpty()) { + if (StringUtils.isBlank(provider)) { return DEFAULT_COLUMN_PROVIDER; } return new DatabaseQualifier(provider, COLUMN); @@ -129,7 +130,7 @@ public static DatabaseQualifier ofKeyValue() { */ public static DatabaseQualifier ofKeyValue(String provider) { Objects.requireNonNull(provider, "provider is required"); - if (provider.trim().isEmpty()) { + if (StringUtils.isBlank(provider)) { return DEFAULT_KEY_VALUE_PROVIDER; } return new DatabaseQualifier(provider, KEY_VALUE); @@ -155,9 +156,9 @@ public static DatabaseQualifier ofGraph() { */ public static DatabaseQualifier ofGraph(String provider) { Objects.requireNonNull(provider, "provider is required"); - if (provider.trim().isEmpty()) { + if (StringUtils.isBlank(provider)) { return DEFAULT_KEY_VALUE_PROVIDER; } return new DatabaseQualifier(provider, GRAPH); } -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/Databases.java b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/Databases.java index 4484fd39c..245057bf2 100644 --- a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/Databases.java +++ b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/Databases.java @@ -47,13 +47,13 @@ public static void addDatabase(final ProcessProducer processProducer, final Data Optional databaseOptional = annotations.stream().filter(a -> a instanceof Database) .map(Database.class::cast).findFirst(); databaseOptional.ifPresent(database -> { - if (!type.equals(database.value())) { - String simpleName = processProducer.getAnnotatedMember().getDeclaringType().getJavaClass().getSimpleName(); - LOGGER.info(String.format("Ignoring because the %s is producing a wrong manager for %s type", simpleName, type)); - } else { + if (type.equals(database.value())) { final DatabaseMetadata metadata = DatabaseMetadata.of(database); LOGGER.info(String.format("Found the type %s to metadata %s", type, metadata)); databases.add(metadata); + } else { + String simpleName = processProducer.getAnnotatedMember().getDeclaringType().getJavaClass().getSimpleName(); + LOGGER.info(String.format("Ignoring because the %s is producing a wrong manager for %s type", simpleName, type)); } }); } diff --git a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/FieldMetadata.java b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/FieldMetadata.java index 366b0cfe5..3b66d9661 100644 --- a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/FieldMetadata.java +++ b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/FieldMetadata.java @@ -66,6 +66,7 @@ public interface FieldMetadata extends FieldParameterMetadata { * * @return true if annotated with {@link Id} */ + @Override boolean isId(); /** @@ -91,4 +92,4 @@ public interface FieldMetadata extends FieldParameterMetadata { * @see java.util.Optional */ Optional value(Class type); -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/MappingType.java b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/MappingType.java index c45e53502..c040c705f 100644 --- a/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/MappingType.java +++ b/jnosql-mapping/jnosql-mapping-api-core/src/main/java/org/eclipse/jnosql/mapping/metadata/MappingType.java @@ -41,21 +41,21 @@ public enum MappingType { */ public static MappingType of(Class type) { if (Collection.class.isAssignableFrom(type)) { - return MappingType.COLLECTION; + return COLLECTION; } if (Map.class.isAssignableFrom(type)) { - return MappingType.MAP; + return MAP; } if (type.isAnnotationPresent(Entity.class)) { - return MappingType.ENTITY; + return ENTITY; } if (type.isAnnotationPresent(Embeddable.class)) { var value = type.getAnnotation(Embeddable.class).value(); - return value == Embeddable.EmbeddableType.FLAT ? MappingType.EMBEDDED : MappingType.EMBEDDED_GROUP; + return value == Embeddable.EmbeddableType.FLAT ? EMBEDDED : EMBEDDED_GROUP; } if(type.isArray()) { - return MappingType.ARRAY; + return ARRAY; } - return MappingType.DEFAULT; + return DEFAULT; } -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/AbstractRepository.java b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/AbstractRepository.java index a32650c9c..0459cc3d9 100644 --- a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/AbstractRepository.java +++ b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/AbstractRepository.java @@ -24,7 +24,6 @@ import org.eclipse.jnosql.mapping.metadata.FieldMetadata; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.function.Function; import java.util.stream.Stream; @@ -104,7 +103,7 @@ protected String getErrorMessage(){ @Override public S save(S entity) { - Objects.requireNonNull(entity, "Entity is required"); + requireNonNull(entity, "Entity is required"); Object id = getIdField().read(entity); if (nonNull(id) && existsById((K) id)) { return template().update(entity); @@ -153,7 +152,7 @@ public boolean existsById(K id) { @Override public void delete(T entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); EntityMetadata metadata = entityMetadata(); FieldMetadata id = metadata.id().orElseThrow(KEY_NOT_FOUND_EXCEPTION_SUPPLIER); template().delete(metadata.type(), id.read(entity)); @@ -161,32 +160,32 @@ public void delete(T entity) { @Override public void deleteAll(List entities) { - Objects.requireNonNull(entities, "entities is required"); + requireNonNull(entities, "entities is required"); entities.forEach(this::delete); } @Override public S insert(S entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); return template().insert(entity); } @Override public List insertAll(List entities) { - Objects.requireNonNull(entities, "entities is required"); + requireNonNull(entities, "entities is required"); return stream(template().insert(entities).spliterator(), false) .toList(); } @Override public S update(S entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); return template().update(entity); } @Override public List updateAll(List entities) { - Objects.requireNonNull(entities, "entities is required"); + requireNonNull(entities, "entities is required"); return stream(template().update(entities).spliterator(), false) .toList(); } @@ -212,4 +211,4 @@ public Stream findAll() { } -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/RepositoryType.java b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/RepositoryType.java index 204c90723..2754cf3b1 100644 --- a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/RepositoryType.java +++ b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/query/RepositoryType.java @@ -144,10 +144,12 @@ public enum RepositoryType { */ public static RepositoryType of(Method method, Class repositoryType) { Objects.requireNonNull(method, "method is required"); - Class declaringClass = method.getDeclaringClass(); + if (method.isDefault()) { return DEFAULT_METHOD; } + + Class declaringClass = method.getDeclaringClass(); if (Object.class.equals(declaringClass)) { return OBJECT_METHOD; } diff --git a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/DynamicReturn.java b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/DynamicReturn.java index da571b44d..2a4469ba4 100644 --- a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/DynamicReturn.java +++ b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/DynamicReturn.java @@ -37,6 +37,22 @@ */ public final class DynamicReturn implements MethodDynamicExecutable { + private final Class classSource; + + private final Method methodSource; + + private final Supplier> singleResult; + + private final Supplier> result; + + private final PageRequest pageRequest; + + private final Function> singleResultPagination; + + private final Function> streamPagination; + + private final Function> page; + /** * A predicate to check it the object is instance of {@link PageRequest} */ @@ -52,7 +68,6 @@ public static Function>, Supplier>> toSingleResul return new SupplierConverter(method); } - /** * Finds {@link SpecialParameters} from array object * @@ -109,22 +124,6 @@ public Supplier> apply(Supplier> supplier) { } - private final Class classSource; - - private final Method methodSource; - - private final Supplier> singleResult; - - private final Supplier> result; - - private final PageRequest pageRequest; - - private final Function> singleResultPagination; - - private final Function> streamPagination; - - private final Function> page; - private DynamicReturn(Class classSource, Method methodSource, Supplier> singleResult, Supplier> result, PageRequest pageRequest, diff --git a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/RepositoryObserverParser.java b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/RepositoryObserverParser.java index d60c945d0..5356e72ac 100644 --- a/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/RepositoryObserverParser.java +++ b/jnosql-mapping/jnosql-mapping-core/src/main/java/org/eclipse/jnosql/mapping/core/repository/RepositoryObserverParser.java @@ -48,24 +48,30 @@ public String name() { * @return the field result */ public String field(String field) { - if (metadata.fieldMapping(field).isPresent()) { + // Early return if direct field mapping is available + Optional directMapping = metadata.fieldMapping(field); + if (directMapping.isPresent()) { return metadata.columnField(field); - } else { - String currentField = ""; - String[] fields = field.split(CAMEL_CASE); - for (int index = 0; index < fields.length; index++) { - if (currentField.isEmpty()) { - currentField = capitalize(fields[index], false); - } else { - currentField = currentField + capitalize(fields[index], true); - } - Optional mapping = metadata.fieldMapping(currentField); - if (mapping.isPresent()) { - String name = mapping.map(FieldMetadata::name).orElseThrow(); - return name + concat(index, fields); - } + } + + StringBuilder currentField = new StringBuilder(); + String[] fieldParts = field.split(CAMEL_CASE); + + // Iterate through parts of the field to find the mapped field name + for (int index = 0; index < fieldParts.length; index++) { + if (currentField.isEmpty()) { + currentField.append(capitalize(fieldParts[index], false)); + } else { + currentField.append(capitalize(fieldParts[index], true)); + } + Optional mappedField = metadata.fieldMapping(currentField.toString()); + if (mappedField.isPresent()) { + String mappedName = mappedField.map(FieldMetadata::name).orElseThrow(); + return mappedName + concat(index, fieldParts); } } + + // No mapping found, return the original field return field; } diff --git a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepository.java b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepository.java index 97b9876fc..c127cc83b 100644 --- a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepository.java +++ b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepository.java @@ -23,6 +23,7 @@ */ public abstract class AbstractKeyValueRepository extends AbstractRepository { + @Override protected abstract KeyValueTemplate template(); @Override diff --git a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepositoryProxy.java b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepositoryProxy.java index 700bed4d1..ace68e8de 100644 --- a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepositoryProxy.java +++ b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/AbstractKeyValueRepositoryProxy.java @@ -26,6 +26,7 @@ public abstract class AbstractKeyValueRepositoryProxy extends AbstractRepo protected abstract Class type(); + @Override protected abstract Class repositoryType(); diff --git a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/RepositoryKeyValueBean.java b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/RepositoryKeyValueBean.java index cd844dc30..86e58dd04 100644 --- a/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/RepositoryKeyValueBean.java +++ b/jnosql-mapping/jnosql-mapping-key-value/src/main/java/org/eclipse/jnosql/mapping/keyvalue/query/RepositoryKeyValueBean.java @@ -70,12 +70,13 @@ public Class getBeanClass() { } + @SuppressWarnings("unchecked") @Override public T create(CreationalContext creationalContext) { KeyValueTemplate template = provider.isEmpty() ? getInstance(KeyValueTemplate.class) : getInstance(KeyValueTemplate.class, DatabaseQualifier.ofKeyValue(provider)); EntitiesMetadata entities = getInstance(EntitiesMetadata.class); - KeyValueRepositoryProxy handler = new KeyValueRepositoryProxy(type, entities, template); + var handler = new KeyValueRepositoryProxy<>(type, entities, template); return (T) Proxy.newProxyInstance(type.getClassLoader(), new Class[]{type}, handler); @@ -97,4 +98,4 @@ public String getId() { return type.getName() + '@' + DatabaseType.KEY_VALUE + "-" + provider; } -} \ No newline at end of file +} diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/ClassGraphClassScanner.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/ClassGraphClassScanner.java index b9d89b353..c7fe0b65b 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/ClassGraphClassScanner.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/ClassGraphClassScanner.java @@ -31,7 +31,6 @@ import java.util.Objects; import java.util.Set; import java.util.logging.Logger; -import java.util.stream.Collectors; import static java.util.Collections.unmodifiableSet; import static java.util.stream.Collectors.toUnmodifiableSet; @@ -108,7 +107,7 @@ public Set> repositoriesStandard() { || interfaces.contains(BasicRepository.class) || interfaces.contains(NoSQLRepository.class) || interfaces.contains(DataRepository.class); - }).collect(Collectors.toUnmodifiableSet()); + }).collect(toUnmodifiableSet()); } @Override diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultConstructorMetadata.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultConstructorMetadata.java index 36f9b0f3f..f68dd57b3 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultConstructorMetadata.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultConstructorMetadata.java @@ -22,6 +22,7 @@ record DefaultConstructorMetadata(Constructor constructor, List parameters) implements ConstructorMetadata { + @Override public boolean isDefault() { return parameters.isEmpty(); } diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultEntityMetadata.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultEntityMetadata.java index 875d17f52..96db6631c 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultEntityMetadata.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/DefaultEntityMetadata.java @@ -107,7 +107,7 @@ public Class type() { @Override public Optional inheritance() { - return Optional.ofNullable(inheritance); + return ofNullable(inheritance); } @Override @@ -157,7 +157,7 @@ public Map fieldsGroupByName() { @Override public Optional id() { - return Optional.ofNullable(id); + return ofNullable(id); } @Override diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/Reflections.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/Reflections.java index 85e490ff0..b777b4f43 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/Reflections.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/Reflections.java @@ -35,7 +35,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.function.Predicate; import java.util.logging.Level; @@ -317,7 +316,7 @@ String getIdName(Field field) { * @throws NullPointerException when type is null */ Optional getInheritance(Class type) { - Objects.requireNonNull(type, "entity is required"); + requireNonNull(type, "entity is required"); if (isInheritance(type)) { Class parent = type.getSuperclass(); String discriminatorColumn = getDiscriminatorColumn(parent); @@ -340,7 +339,7 @@ Optional getInheritance(Class type) { * @return true if it has the {@link Inheritance} annotation */ boolean hasInheritanceAnnotation(Class entity) { - Objects.requireNonNull(entity, "entity is required"); + requireNonNull(entity, "entity is required"); return entity.getAnnotation(Inheritance.class) != null; } @@ -358,7 +357,7 @@ boolean hasInheritanceAnnotation(Class entity) { * @throws NullPointerException if the field is null */ public String getUDTName(Field field) { - Objects.requireNonNull(field, "field is required"); + requireNonNull(field, "field is required"); return Optional.ofNullable(field.getAnnotation(Column.class)) .map(Column::udt) .filter(StringUtils::isNotBlank) diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/DequeSupplier.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/DequeSupplier.java index 81de11a1c..233950a7c 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/DequeSupplier.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/DequeSupplier.java @@ -23,7 +23,7 @@ /** * An implementation of {@link CollectionSupplier} to {@link LinkedList} */ -public class DequeSupplier implements CollectionSupplier> { +public class DequeSupplier implements CollectionSupplier> { @Override public boolean test(Class type) { diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/ListSupplier.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/ListSupplier.java index 315410eb7..56f1595c8 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/ListSupplier.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/ListSupplier.java @@ -23,7 +23,7 @@ /** * An implementation of {@link CollectionSupplier} to {@link ArrayList} */ -public class ListSupplier implements CollectionSupplier> { +public class ListSupplier implements CollectionSupplier> { @Override public boolean test(Class type) { return List.class.equals(type) || diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/SetSupplier.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/SetSupplier.java index d227a17fe..1afffa1a3 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/SetSupplier.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/SetSupplier.java @@ -23,7 +23,7 @@ /** * An implementation of {@link CollectionSupplier} to {@link HashSet} */ -public class SetSupplier implements CollectionSupplier> { +public class SetSupplier implements CollectionSupplier> { @Override public boolean test(Class type) { diff --git a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/TreeSetSupplier.java b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/TreeSetSupplier.java index 6a445827b..b8fa13cc1 100644 --- a/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/TreeSetSupplier.java +++ b/jnosql-mapping/jnosql-mapping-reflection/src/main/java/org/eclipse/jnosql/mapping/reflection/collection/TreeSetSupplier.java @@ -23,7 +23,7 @@ /** * An implementation of {@link CollectionSupplier} to {@link TreeSet} */ -public class TreeSetSupplier implements CollectionSupplier> { +public class TreeSetSupplier implements CollectionSupplier> { @Override public boolean test(Class type) { diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java index 49b40632a..d4904154f 100644 --- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java +++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/AbstractSemiStructuredTemplate.java @@ -40,7 +40,6 @@ import java.time.Duration; import java.util.Iterator; import java.util.List; -import java.util.Objects; import java.util.Optional; import java.util.function.Consumer; import java.util.function.Function; @@ -66,6 +65,10 @@ public abstract class AbstractSemiStructuredTemplate implements SemiStructuredTe private static final QueryParser PARSER = new QueryParser(); + private final UnaryOperator insert = e -> manager().insert(e); + + private final UnaryOperator update = e -> manager().update(e); + /** * Retrieves the converter used to convert between entity objects and communication entities. * @@ -101,10 +104,6 @@ public abstract class AbstractSemiStructuredTemplate implements SemiStructuredTe */ protected abstract Converters converters(); - private final UnaryOperator insert = e -> manager().insert(e); - - private final UnaryOperator update = e -> manager().update(e); - @Override public T insert(T entity) { requireNonNull(entity, "entity is required"); @@ -294,27 +293,27 @@ private Stream executeQuery(SelectQuery query) { @Override public QueryMapper.MapperFrom select(Class type) { - Objects.requireNonNull(type, "type is required"); + requireNonNull(type, "type is required"); EntityMetadata metadata = entities().get(type); return new MapperSelect(metadata, converters(), this); } @Override public QueryMapper.MapperDeleteFrom delete(Class type) { - Objects.requireNonNull(type, "type is required"); + requireNonNull(type, "type is required"); EntityMetadata metadata = entities().get(type); return new MapperDelete(metadata, converters(), this); } @Override public Stream findAll(Class type) { - Objects.requireNonNull(type, "type is required"); + requireNonNull(type, "type is required"); return select(findAllQuery(type)); } @Override public void deleteAll(Class type) { - Objects.requireNonNull(type, "type is required"); + requireNonNull(type, "type is required"); EntityMetadata metadata = entities().get(type); if(metadata.inheritance().isPresent()){ InheritanceMetadata inheritanceMetadata = metadata.inheritance().orElseThrow(); @@ -330,8 +329,8 @@ public void deleteAll(Class type) { @Override public CursoredPage selectCursor(SelectQuery query, PageRequest pageRequest){ - Objects.requireNonNull(query, "query is required"); - Objects.requireNonNull(pageRequest, "pageRequest is required"); + requireNonNull(query, "query is required"); + requireNonNull(pageRequest, "pageRequest is required"); LOGGER.finest(() -> "Executing query: " + query); var enableMultipleSorting = MicroProfileSettings.INSTANCE.get(CURSOR_PAGINATION_MULTIPLE_SORTING, Boolean.class) .orElse(false); @@ -351,8 +350,8 @@ public CursoredPage selectCursor(SelectQuery query, PageRequest pageReque @Override public Page selectOffSet(SelectQuery query, PageRequest pageRequest) { - Objects.requireNonNull(query, "query is required"); - Objects.requireNonNull(pageRequest, "pageRequest is required"); + requireNonNull(query, "query is required"); + requireNonNull(pageRequest, "pageRequest is required"); var queryPage = new MappingQuery(query.sorts(), pageRequest.size(), NoSQLPage.skip(pageRequest), query.condition().orElse(null), query.name()); Stream result = select(queryPage); diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/FieldConverter.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/FieldConverter.java index 882e6ebdf..350185bbb 100644 --- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/FieldConverter.java +++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/FieldConverter.java @@ -111,13 +111,13 @@ public void convert(T instance, List columns, Element element var array = arrayFieldMetadata.arrayInstance(elements); field.write(instance, array); } else { - executeNoEmbeddableField(instance, element, field, converter, arrayFieldMetadata); + executeNoEmbeddableField(instance, element, field, arrayFieldMetadata); } } } - private void executeNoEmbeddableField(T instance, Element element, FieldMetadata field, EntityConverter converter, + private void executeNoEmbeddableField(T instance, Element element, FieldMetadata field, ArrayFieldMetadata arrayFieldMetadata) { var elements = new ArrayList<>(); var value = element.get(); @@ -136,7 +136,7 @@ private void executeNoEmbeddableField(T instance, Element element, Fie field.write(instance, array); } - private void executeIterable(ArrayFieldMetadata arrayFieldMetadata, Iterable iterable, ArrayList elements) { + private void executeIterable(ArrayFieldMetadata arrayFieldMetadata, Iterable iterable, List elements) { for (Object item : iterable) { elements.add(Value.of(item).get(arrayFieldMetadata.elementType())); } diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepository.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepository.java index 39e2909e0..bb815cdc1 100644 --- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepository.java +++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepository.java @@ -37,6 +37,7 @@ */ public abstract class AbstractSemiStructuredRepository extends AbstractRepository { + @Override protected abstract SemiStructuredTemplate template(); @Override diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepositoryProxy.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepositoryProxy.java index a07155931..74bf10285 100644 --- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepositoryProxy.java +++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/AbstractSemiStructuredRepositoryProxy.java @@ -26,12 +26,13 @@ import org.eclipse.jnosql.mapping.metadata.EntityMetadata; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.logging.Logger; import java.util.stream.Stream; +import static java.util.stream.Collectors.toList; + /** * Template method to Repository proxy on column * @@ -138,12 +139,15 @@ protected Object executeParameterBased(Object instance, Method method, Object[] } private static List> getSorts(Method method, EntityMetadata metadata) { - List> sorts = new ArrayList<>(); - OrderBy[] orders = method.getAnnotationsByType(OrderBy.class); - Stream.of(orders) - .map(o -> (o.descending() ? Sort.desc(metadata.columnField(o.value())) : Sort.asc(metadata.columnField(o.value())))) - .forEach(sorts::add); - return sorts; + return Stream.of(method.getAnnotationsByType(OrderBy.class)) + .map(order -> { + String column = metadata.columnField(order.value()); + if (column == null || column.isEmpty()) { + throw new IllegalArgumentException("Invalid field in @OrderBy: " + order.value()); + } + return order.descending() ? Sort.desc(column) : Sort.asc(column); + }) + .collect(toList()); } } diff --git a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/BaseSemiStructuredRepository.java b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/BaseSemiStructuredRepository.java index 8bbfcfab2..37552daeb 100644 --- a/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/BaseSemiStructuredRepository.java +++ b/jnosql-mapping/jnosql-mapping-semistructured/src/main/java/org/eclipse/jnosql/mapping/semistructured/query/BaseSemiStructuredRepository.java @@ -60,6 +60,11 @@ public abstract class BaseSemiStructuredRepository extends AbstractReposit private static final DeleteQueryParser DELETE_PARSER = new DeleteQueryParser(); private static final Object[] EMPTY_PARAM = new Object[0]; + private CommunicationObserverParser parser; + + private ParamsBinder paramsBinder; + + /** * Retrieves the Converters instance responsible for converting data types. * @@ -72,6 +77,7 @@ public abstract class BaseSemiStructuredRepository extends AbstractReposit * * @return The EntityMetadata instance. */ + @Override protected abstract EntityMetadata entityMetadata(); /** @@ -81,10 +87,6 @@ public abstract class BaseSemiStructuredRepository extends AbstractReposit */ protected abstract SemiStructuredTemplate template(); - private CommunicationObserverParser parser; - - private ParamsBinder paramsBinder; - protected org.eclipse.jnosql.communication.semistructured.SelectQuery query(Method method, Object[] args) { var provider = SelectMethodProvider.INSTANCE; diff --git a/pmd/pmd-rules.xml b/pmd/pmd-rules.xml new file mode 100644 index 000000000..9917f8cd4 --- /dev/null +++ b/pmd/pmd-rules.xml @@ -0,0 +1,40 @@ + + + + + Remove rules + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml index 0862df152..8b6be452c 100644 --- a/pom.xml +++ b/pom.xml @@ -95,6 +95,7 @@ 2.3.1 1.16.1 1.2.1 + 3.24.0 @@ -544,6 +545,29 @@ + + org.apache.maven.plugins + maven-pmd-plugin + ${apache.pdm.plugin.version} + + + pmd/pmd-rules.xml + + + **/org/eclipse/jnosql/query/**/*.java + **/org/eclipse/jnosql/communication/query/**/*.java + + true + true + + + + + check + + + +