You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2020/12/24 17:21:02 UTC
[isis] branch master updated: ISIS-2033: encapsulate query range
logic within QueryRangeModel
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 5a2f174 ISIS-2033: encapsulate query range logic within QueryRangeModel
5a2f174 is described below
commit 5a2f1745d1cd94b7a84a879e67f81b20e9821e56
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Dec 24 18:20:46 2020 +0100
ISIS-2033: encapsulate query range logic within QueryRangeModel
---
.../PersistenceQueryProcessorForAllInstances.java | 2 +-
.../PersistenceQueryProcessorForApplibQuery.java | 8 +-
...ava => _PersistenceQueryProcessorAbstract.java} | 2 +-
.../persistence/query/PersistenceQuery.java | 11 +--
.../query/PersistenceQueryAbstract.java | 101 ---------------------
.../persistence/query/PersistenceQueryFactory.java | 8 +-
.../query/PersistenceQueryFindAllInstances.java | 24 +----
...ersistenceQueryFindUsingApplibQueryDefault.java | 13 +--
.../persistence/query/QueryRangeModel.java | 63 +++++++++++++
...ceQuery.java => _PersistenceQueryAbstract.java} | 35 +++----
10 files changed, 89 insertions(+), 178 deletions(-)
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForAllInstances.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForAllInstances.java
index 5b935fa..8d5cb05 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForAllInstances.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForAllInstances.java
@@ -27,7 +27,7 @@ import lombok.extern.log4j.Log4j2;
@Log4j2
public class PersistenceQueryProcessorForAllInstances
-extends PersistenceQueryProcessorAbstract<PersistenceQueryFindAllInstances> {
+extends _PersistenceQueryProcessorAbstract<PersistenceQueryFindAllInstances> {
@Override
public Can<ManagedObject> process(
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForApplibQuery.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForApplibQuery.java
index c1189ac..9e3ef3e 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForApplibQuery.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorForApplibQuery.java
@@ -37,7 +37,7 @@ import lombok.extern.log4j.Log4j2;
@RequiredArgsConstructor
@Log4j2
public class PersistenceQueryProcessorForApplibQuery
-extends PersistenceQueryProcessorAbstract<PersistenceQueryFindUsingApplibQueryDefault> {
+extends _PersistenceQueryProcessorAbstract<PersistenceQueryFindUsingApplibQueryDefault> {
@Override
public Can<ManagedObject> process(
@@ -111,8 +111,10 @@ extends PersistenceQueryProcessorAbstract<PersistenceQueryFindUsingApplibQueryDe
final Query<?> jdoQuery = queryContext.newJdoNamedQuery(cls, queryName);
isisJdoSupport.disableMultivaluedFetch(jdoQuery);
- if(persistenceQuery.hasRange()) {
- jdoQuery.setRange(persistenceQuery.getStart(), persistenceQuery.getEnd());
+ val queryRangeModel = persistenceQuery.getQueryRangeModel();
+
+ if(queryRangeModel.hasRange()) {
+ jdoQuery.setRange(queryRangeModel.getStart(), queryRangeModel.getEnd());
}
if (log.isDebugEnabled()) {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/_PersistenceQueryProcessorAbstract.java
similarity index 97%
rename from persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java
rename to persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/_PersistenceQueryProcessorAbstract.java
index 554b439..43d34d1 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/PersistenceQueryProcessorAbstract.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/queries/_PersistenceQueryProcessorAbstract.java
@@ -35,7 +35,7 @@ import org.apache.isis.persistence.jdo.integration.persistence.query.Persistence
import lombok.val;
-public abstract class PersistenceQueryProcessorAbstract<T extends PersistenceQuery>
+abstract class _PersistenceQueryProcessorAbstract<T extends PersistenceQuery>
implements PersistenceQueryProcessor<T> {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java
index b8b300e..55651b5 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java
@@ -36,16 +36,7 @@ public interface PersistenceQuery {
*/
ObjectSpecification getSpecification();
- /**
- * The index of the first record to return, 0 means the first.
- * @return
- */
- public long getStart() ;
- /**
- * The number of records to return, 0 means all.
- * @return
- */
- public long getCount() ;
+ QueryRangeModel getQueryRangeModel() ;
Can<ManagedObject> execute(PersistenceQueryContext queryContext);
}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryAbstract.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryAbstract.java
deleted file mode 100644
index 8138ac3..0000000
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryAbstract.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.isis.persistence.jdo.integration.persistence.query;
-
-import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-
-public abstract class PersistenceQueryAbstract implements PersistenceQuery {
-
- // -- constructor, fields
-
- protected final long start;
- protected final long count;
-
- private final ObjectSpecification specification;
-
- public PersistenceQueryAbstract(
- final ObjectSpecification specification,
- final long... range) {
- this.start = range.length > 0 ? range[0]:0;
- this.count = range.length > 1 ? range[1]:0;
-
- this.specification = specification;
- // nothing to do
- }
-
- /**
- * The start index into the set table
- * @return
- */
- @Override
- public long getStart() {
- return start;
- }
-
-
- /**
- * The number of items to return, starting at {@link #getStart()}
- */
- @Override
- public long getCount() {
- return count;
- }
-
-
- @Override
- public ObjectSpecification getSpecification() {
- return specification;
- }
-
- // -- equals, hashCode
- @Override
- public boolean equals(final Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PersistenceQueryAbstract other = (PersistenceQueryAbstract) obj;
- if (specification == null) {
- if (other.specification != null) {
- return false;
- }
- } else if (!specification.equals(other.specification)) {
- return false;
- }
- return true;
- }
-
- @Override
- public int hashCode() {
- final int PRIME = 31;
- int result = 1;
- result = PRIME * result + 1231;
- result = PRIME * result + ((specification == null) ? 0 : specification.hashCode());
- return result;
- }
-
-
-
-}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
index ad487d9..406d0d7 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFactory.java
@@ -56,13 +56,12 @@ public class PersistenceQueryFactory implements HasMetaModelContext {
}
val queryResultTypeSpec = specFor(query);
+ val range = QueryRangeModel.of(query.getStart(), query.getCount());
if (query instanceof AllInstancesQuery) {
- val allInstancesQuery = (AllInstancesQuery<?>) query;
return new PersistenceQueryFindAllInstances(
queryResultTypeSpec,
- allInstancesQuery.getStart(),
- allInstancesQuery.getCount());
+ range);
} if (query instanceof NamedQuery) {
val namedQuery = (NamedQuery<?>) query;
@@ -74,8 +73,7 @@ public class PersistenceQueryFactory implements HasMetaModelContext {
queryName,
Collections.unmodifiableMap(parametersByName),
getSpecificationLoader(),
- namedQuery.getStart(),
- namedQuery.getCount());
+ range);
}
throw _Exceptions.unsupportedOperation("query type %s (%s) not supported by this persistence implementation",
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindAllInstances.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindAllInstances.java
index b4cf62d..12aaa87 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindAllInstances.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindAllInstances.java
@@ -30,34 +30,14 @@ import org.apache.isis.persistence.jdo.integration.persistence.queries.Persisten
/**
* Corresponds to {@link AllInstancesQuery}
*/
-public class PersistenceQueryFindAllInstances extends PersistenceQueryAbstract {
-
-// protected long index;
-// protected long countedSoFar;
+public class PersistenceQueryFindAllInstances extends _PersistenceQueryAbstract {
public PersistenceQueryFindAllInstances(
final ObjectSpecification specification,
- final long... range) {
+ final QueryRangeModel range) {
super(specification, range);
-// index=0;
-// countedSoFar=0;
}
-//TODO not used, remove?
-// public boolean matches(final ManagedObject object) {
-//
-// if (getCount() == 0 && getStart() == 0){
-// return true;
-// }
-// if (index++ < start){
-// return false;
-// }
-// if (countedSoFar++ < count){
-// return true;
-// }
-// return false;
-// }
-
@Override
public String toString() {
final ToString str = ToString.createAnonymous(this);
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
index 0b9f211..be8276e 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQueryFindUsingApplibQueryDefault.java
@@ -35,7 +35,7 @@ import lombok.Getter;
/**
* Corresponds to an object-store specific implementation of {@link Query}.
*/
-public class PersistenceQueryFindUsingApplibQueryDefault extends PersistenceQueryAbstract {
+public class PersistenceQueryFindUsingApplibQueryDefault extends _PersistenceQueryAbstract {
@Getter private final String queryName;
@Getter private final Map<String, Object> queryParametersByName;
@@ -45,7 +45,7 @@ public class PersistenceQueryFindUsingApplibQueryDefault extends PersistenceQuer
final String queryName,
final Map<String, Object> queryParametersByName,
final SpecificationLoader specificationLoader,
- final long... range) {
+ final QueryRangeModel range) {
super(specification, range);
this.queryName = queryName;
this.queryParametersByName = queryParametersByName;
@@ -58,16 +58,7 @@ public class PersistenceQueryFindUsingApplibQueryDefault extends PersistenceQuer
return str.toString();
}
- public long getEnd() {
- // we default to Integer.MAX_VALUE because HSQLDB blows up
- // (with a ClassCastException from Long to Integer)
- // if we return Long.MAX_VALUE
- return getCount() != 0? getStart() + getCount(): Integer.MAX_VALUE;
- }
- public boolean hasRange() {
- return getStart() != 0 || getCount() != 0;
- }
@Override
public Can<ManagedObject> execute(PersistenceQueryContext queryContext) {
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/QueryRangeModel.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/QueryRangeModel.java
new file mode 100644
index 0000000..106427f
--- /dev/null
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/QueryRangeModel.java
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.isis.persistence.jdo.integration.persistence.query;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+
+@EqualsAndHashCode
+public final class QueryRangeModel {
+
+ // -- FACTORY
+
+ public static QueryRangeModel of(long... range) {
+ return new QueryRangeModel(range);
+ }
+
+ /**
+ * The start index into the set table
+ */
+ @Getter private final long start;
+
+ /**
+ * The number of items to return, starting at {@link #getStart()}
+ */
+ @Getter private final long count;
+
+ private QueryRangeModel(
+ final long[] range) {
+ this.start = range.length > 0 ? range[0]:0;
+ this.count = range.length > 1 ? range[1]:0;
+ }
+
+ public long getEnd() {
+ // we default to Integer.MAX_VALUE because HSQLDB blows up
+ // (with a ClassCastException from Long to Integer)
+ // if we return Long.MAX_VALUE
+ return getCount() != 0
+ ? getStart() + getCount()
+ : Integer.MAX_VALUE;
+ }
+
+ public boolean hasRange() {
+ return getStart() != 0
+ || getCount() != 0;
+ }
+
+}
diff --git a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/_PersistenceQueryAbstract.java
similarity index 54%
copy from persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java
copy to persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/_PersistenceQueryAbstract.java
index b8b300e..f8eaffa 100644
--- a/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/PersistenceQuery.java
+++ b/persistence/jdo/integration/src/main/java/org/apache/isis/persistence/jdo/integration/persistence/query/_PersistenceQueryAbstract.java
@@ -19,33 +19,20 @@
package org.apache.isis.persistence.jdo.integration.persistence.query;
-import org.apache.isis.applib.query.Query;
-import org.apache.isis.commons.collections.Can;
-import org.apache.isis.core.metamodel.spec.ManagedObject;
import org.apache.isis.core.metamodel.spec.ObjectSpecification;
-import org.apache.isis.persistence.jdo.integration.persistence.queries.PersistenceQueryContext;
-/**
- * Defines a criteria for including instances in set, corresponds to
- * {@link Query} in the applib.
- */
-public interface PersistenceQuery {
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.NonNull;
+import lombok.RequiredArgsConstructor;
+
+@RequiredArgsConstructor
+@Getter @EqualsAndHashCode
+abstract class _PersistenceQueryAbstract implements PersistenceQuery {
- /**
- * The type of instances in the resulting set.
- */
- ObjectSpecification getSpecification();
+ // -- constructor, fields
- /**
- * The index of the first record to return, 0 means the first.
- * @return
- */
- public long getStart() ;
- /**
- * The number of records to return, 0 means all.
- * @return
- */
- public long getCount() ;
+ protected final @NonNull ObjectSpecification specification;
+ protected final @NonNull QueryRangeModel queryRangeModel;
- Can<ManagedObject> execute(PersistenceQueryContext queryContext);
}