http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/Query.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/Query.java b/core/api/src/main/java/org/apache/zest/api/query/Query.java deleted file mode 100644 index 4e985b8..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/Query.java +++ /dev/null @@ -1,143 +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.zest.api.query; - -import java.io.Serializable; -import java.util.stream.Stream; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.query.grammar.OrderBy; - -/** - * This represents a Query in an indexing system. It is created from a - * {@link QueryBuilder}, which decides the "where" clause in the query. - * <p> - * Additional limitations, such as paging, ordering, and variables, can be set on - * a Query before it is executed by calling one of find(), iterator(), - * or count(). - * </p> - * <p> - * DDD tip: typically Queries are created in the Domain Model and passed to the UI, - * which sets the order and paging before executing it. - * </p> - */ -public interface Query<T> - extends Iterable<T>, Serializable -{ - /** - * Set the ordering rules. If many segments are used for ordering - * then they will be applied in order. - * - * @param segments the segments to order by - * - * @return the Query - */ - Query<T> orderBy( OrderBy... segments ); - - /** - * Append an ordering rule to the existing segments. - * - * @param property the property to order by - * @param order the order to apply - * - * @return the Query - */ - Query<T> orderBy( final Property<?> property, final OrderBy.Order order ); - - /** - * Append an ascending ordering rule to the existing segments. - * - * @param property the property to order by - * - * @return the Query - */ - Query<T> orderBy( Property<?> property ); - - /** - * Set the index of the first result. Default is 0 (zero). - * - * @param firstResult which index to use as the first one - * - * @return the Query - */ - Query<T> firstResult( int firstResult ); - - /** - * Set how many results should be returned. Default is that - * there is no limit set. - * - * @param maxResults that shouldbe returned - * - * @return the query - */ - Query<T> maxResults( int maxResults ); - - /** - * Get the first Entity that matches the criteria. This - * executes the Query. - * - * @return the first found Entity or null if none were found - * - * @throws QueryExecutionException if the query fails - */ - T find() - throws QueryExecutionException; - - /** - * Set the value of a named variable. - * - * @param name of the variable - * @param value of the variable - * - * @return the query - */ - Query<T> setVariable( String name, Object value ); - - /** - * Get the value of a named variable. - * - * @param name of the variable - * - * @return value of the variable - */ - <V> V getVariable( String name ); - - /** - * Get the result type of this Query - * - * @return the result type - */ - Class<T> resultType(); - - /** - * Count how many results would be returned by this Query. - * This executes the Query. - * - * @return result count - * - * @throws QueryExecutionException if the query fails - */ - long count() - throws QueryExecutionException; - - /** - * @return Stream results - */ - Stream<T> stream(); -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryBuilder.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryBuilder.java b/core/api/src/main/java/org/apache/zest/api/query/QueryBuilder.java deleted file mode 100644 index 7baed9b..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryBuilder.java +++ /dev/null @@ -1,56 +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.zest.api.query; - -import java.util.function.Predicate; -import org.apache.zest.api.composite.Composite; - -/** - * QueryBuilders are used to create {@link Query} instances. - * Iteratively add where() clauses to the query, and then use - * {@link org.apache.zest.api.unitofwork.UnitOfWork#newQuery(QueryBuilder)} to instantiate the Query. - * QueryBuilders are immutable, so when adding new where-clauses you get new instances. This - * - * DDD tip: Query objects are not executed immediately, so they - * should be constructed in the domain model and handed over to - * the UI, which can then further constrain it before actual - * execution. - */ -public interface QueryBuilder<T> -{ - /** - * Add a where-clause to the Query. Use {@link QueryExpressions} - * to create the expression. - * - * @param specification the where clause - * - * @return a new builder with the added where-clause - */ - QueryBuilder<T> where( Predicate<Composite> specification ); - - /** - * Create a new query with the declared where-clauses that will be evaluated against the iterable entries. - * - * @param iterable collection of objects (composites?) - * - * @return a new Query instance - */ - Query<T> newQuery( Iterable<T> iterable ); -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryBuilderFactory.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryBuilderFactory.java b/core/api/src/main/java/org/apache/zest/api/query/QueryBuilderFactory.java deleted file mode 100644 index 6aad9a3..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryBuilderFactory.java +++ /dev/null @@ -1,40 +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.zest.api.query; - -/** - * This is used to create QueryBuilders. - * - * @see QueryBuilder - */ -public interface QueryBuilderFactory -{ - /** - * Create a new QueryBuilder. - * - * @param resultType the type of the result that you want - * - * @return a QueryBuilder - * - * @throws MissingIndexingSystemException if there is no EntityFinder service available - */ - <T> QueryBuilder<T> newQueryBuilder( Class<T> resultType ) - throws MissingIndexingSystemException; -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryException.java b/core/api/src/main/java/org/apache/zest/api/query/QueryException.java deleted file mode 100644 index fe27b54..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryException.java +++ /dev/null @@ -1,43 +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.zest.api.query; - -/** - * Base class for Query exceptions. - */ -public abstract class QueryException - extends RuntimeException -{ - private static final long serialVersionUID = -3602596752342902060L; - - public QueryException() - { - } - - public QueryException( final String message ) - { - super( message ); - } - - public QueryException( final String message, final Throwable cause ) - { - super( message, cause ); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryExecutionException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryExecutionException.java b/core/api/src/main/java/org/apache/zest/api/query/QueryExecutionException.java deleted file mode 100644 index 1360717..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryExecutionException.java +++ /dev/null @@ -1,39 +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.zest.api.query; - -/** - * Throw this exception if a query could not be executed - */ -public final class QueryExecutionException - extends QueryException -{ - private static final long serialVersionUID = 5147421865890379209L; - - public QueryExecutionException( String message ) - { - super( message ); - } - - public QueryExecutionException( String message, Throwable cause ) - { - super( message, cause ); - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryExpressionException.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryExpressionException.java b/core/api/src/main/java/org/apache/zest/api/query/QueryExpressionException.java deleted file mode 100644 index 4589915..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryExpressionException.java +++ /dev/null @@ -1,36 +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.zest.api.query; - -/** - * Throw this exception if a QueryExpression is invalid. - */ -public class QueryExpressionException - extends QueryException -{ - - private static final long serialVersionUID = 1L; - - public QueryExpressionException( String message ) - { - super( message ); - } - -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/QueryExpressions.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/QueryExpressions.java b/core/api/src/main/java/org/apache/zest/api/query/QueryExpressions.java deleted file mode 100644 index ffd29eb..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/QueryExpressions.java +++ /dev/null @@ -1,940 +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.zest.api.query; - -import java.lang.reflect.Field; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Method; -import java.lang.reflect.Proxy; -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.Iterator; -import java.util.List; -import java.util.function.Predicate; -import org.apache.zest.api.association.Association; -import org.apache.zest.api.association.GenericAssociationInfo; -import org.apache.zest.api.association.ManyAssociation; -import org.apache.zest.api.association.NamedAssociation; -import org.apache.zest.api.composite.Composite; -import org.apache.zest.api.identity.HasIdentity; -import org.apache.zest.api.identity.Identity; -import org.apache.zest.api.injection.scope.State; -import org.apache.zest.api.property.GenericPropertyInfo; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.query.grammar.AndPredicate; -import org.apache.zest.api.query.grammar.AssociationFunction; -import org.apache.zest.api.query.grammar.AssociationNotNullPredicate; -import org.apache.zest.api.query.grammar.AssociationNullPredicate; -import org.apache.zest.api.query.grammar.ContainsAllPredicate; -import org.apache.zest.api.query.grammar.ContainsPredicate; -import org.apache.zest.api.query.grammar.EqPredicate; -import org.apache.zest.api.query.grammar.GePredicate; -import org.apache.zest.api.query.grammar.GtPredicate; -import org.apache.zest.api.query.grammar.LePredicate; -import org.apache.zest.api.query.grammar.LtPredicate; -import org.apache.zest.api.query.grammar.ManyAssociationContainsPredicate; -import org.apache.zest.api.query.grammar.ManyAssociationFunction; -import org.apache.zest.api.query.grammar.MatchesPredicate; -import org.apache.zest.api.query.grammar.NamedAssociationContainsNamePredicate; -import org.apache.zest.api.query.grammar.NamedAssociationContainsPredicate; -import org.apache.zest.api.query.grammar.NamedAssociationFunction; -import org.apache.zest.api.query.grammar.NePredicate; -import org.apache.zest.api.query.grammar.Notpredicate; -import org.apache.zest.api.query.grammar.OrPredicate; -import org.apache.zest.api.query.grammar.OrderBy; -import org.apache.zest.api.query.grammar.PropertyFunction; -import org.apache.zest.api.query.grammar.PropertyNotNullPredicate; -import org.apache.zest.api.query.grammar.PropertyNullPredicate; -import org.apache.zest.api.query.grammar.PropertyReference; -import org.apache.zest.api.query.grammar.Variable; -import org.apache.zest.api.util.NullArgumentException; - -import static org.apache.zest.api.identity.HasIdentity.IDENTITY_METHOD; - -/** - * Static factory methods for query expressions and operators. - */ -public final class QueryExpressions -{ - // This is used for eq(Association,Composite) - - // Templates and variables -----------------------------------------------| - - /** - * Create a Query Template using the given type. - * - * @param <T> the type of the template - * @param clazz a class declaring the type of the template - * - * @return a new Query Template - */ - public static <T> T templateFor( Class<T> clazz ) - { - NullArgumentException.validateNotNull( "Template class", clazz ); - - if( clazz.isInterface() ) - { - return clazz.cast( Proxy.newProxyInstance( clazz.getClassLoader(), - array( clazz ), - new TemplateHandler<T>( null, null, null, null ) ) ); - } - else - { - try - { - T mixin = clazz.newInstance(); - for( Field field : clazz.getFields() ) - { - if( field.getAnnotation( State.class ) != null ) - { - if( field.getType().equals( Property.class ) ) - { - field.set( mixin, - Proxy.newProxyInstance( field.getType().getClassLoader(), - array( field.getType() ), - new PropertyReferenceHandler<>( new PropertyFunction<T>( null, null, null, null, field ) ) ) ); - } - else if( field.getType().equals( Association.class ) ) - { - field.set( mixin, - Proxy.newProxyInstance( field.getType().getClassLoader(), - array( field.getType() ), - new AssociationReferenceHandler<>( new AssociationFunction<T>( null, null, null, field ) ) ) ); - } - else if( field.getType().equals( ManyAssociation.class ) ) - { - field.set( mixin, - Proxy.newProxyInstance( field.getType().getClassLoader(), - array( field.getType() ), - new ManyAssociationReferenceHandler<>( new ManyAssociationFunction<T>( null, null, null, field ) ) ) ); - } - else if( field.getType().equals( NamedAssociation.class ) ) - { - field.set( mixin, - Proxy.newProxyInstance( field.getType().getClassLoader(), - array( field.getType() ), - new NamedAssociationReferenceHandler<>( new NamedAssociationFunction<T>( null, null, null, field ) ) ) ); - } - } - } - return mixin; - } - catch( IllegalAccessException | IllegalArgumentException | InstantiationException | SecurityException e ) - { - throw new IllegalArgumentException( "Cannot use class as template", e ); - } - } - } - - /** - * Create a Query Template using the given mixin class and association. - * - * @param <T> the type of the template - * @param mixinType a class declaring the type of the template - * @param association an association - * - * @return a new Query Template - */ - public static <T> T templateFor( final Class<T> mixinType, Association<?> association ) - { - NullArgumentException.validateNotNull( "Mixin class", mixinType ); - NullArgumentException.validateNotNull( "Association", association ); - return mixinType.cast( Proxy.newProxyInstance( mixinType.getClassLoader(), - array( mixinType ), - new TemplateHandler<T>( null, - association( association ), - null, - null ) ) ); - } - - public static <T> T oneOf( final ManyAssociation<T> association ) - { - NullArgumentException.validateNotNull( "Association", association ); - return association.get( 0 ); - } - - public static <T> T oneOf( final NamedAssociation<T> association ) - { - NullArgumentException.validateNotNull( "Association", association ); - Iterator<String> iterator = association.iterator(); - return association.get( iterator.hasNext() ? iterator.next() : null ); - } - - /** - * Create a new Query Variable. - * - * @param name a name for the Variable - * - * @return a new Query Variable. - */ - public static Variable variable( String name ) - { - NullArgumentException.validateNotNull( "Variable name", name ); - return new Variable( name ); - } - - /** - * Create a new Query Template PropertyFunction. - * - * @param <T> type of the Property - * @param property a Property - * - * @return a new Query Template PropertyFunction - */ - @SuppressWarnings( "unchecked" ) - public static <T> PropertyFunction<T> property( Property<T> property ) - { - return ( (PropertyReferenceHandler<T>) Proxy.getInvocationHandler( property ) ).property(); - } - - /** - * Create a new Query Property instance. - * - * @param <T> type of the Property - * @param mixinClass mixin of the Property - * @param fieldName name of the Property field - * - * @return a new Query Property instance for the given mixin and property name. - */ - @SuppressWarnings( "unchecked" ) - public static <T> Property<T> property( Class<?> mixinClass, String fieldName ) - { - try - { - Field field = mixinClass.getField( fieldName ); - if( !Property.class.isAssignableFrom( field.getType() ) ) - { - throw new IllegalArgumentException( "Field must be of type Property<?>" ); - } - return (Property<T>) Proxy.newProxyInstance( - mixinClass.getClassLoader(), - array( field.getType() ), - new PropertyReferenceHandler<>( new PropertyFunction<T>( null, null, null, null, field ) ) ); - } - catch( NoSuchFieldException e ) - { - throw new IllegalArgumentException( "No such field '" + fieldName + "' in mixin " + mixinClass.getName() ); - } - } - - /** - * Create a new Query Template AssociationFunction. - * - * @param <T> type of the Association - * @param association an Association - * - * @return a new Query Template AssociationFunction - */ - @SuppressWarnings( "unchecked" ) - public static <T> AssociationFunction<T> association( Association<T> association ) - { - return ( (AssociationReferenceHandler<T>) Proxy.getInvocationHandler( association ) ).association(); - } - - /** - * Create a new Query Template ManyAssociationFunction. - * - * @param <T> type of the ManyAssociation - * @param association a ManyAssociation - * - * @return a new Query Template ManyAssociationFunction - */ - @SuppressWarnings( "unchecked" ) - public static <T> ManyAssociationFunction<T> manyAssociation( ManyAssociation<T> association ) - { - return ( (ManyAssociationReferenceHandler<T>) Proxy.getInvocationHandler( association ) ).manyAssociation(); - } - - /** - * Create a new Query Template NamedAssociationFunction. - * - * @param <T> type of the NamedAssociation - * @param association a NamedAssociation - * - * @return a new Query Template NamedAssociationFunction - */ - @SuppressWarnings( "unchecked" ) - public static <T> NamedAssociationFunction<T> namedAssociation( NamedAssociation<T> association ) - { - return ( (NamedAssociationReferenceHandler<T>) Proxy.getInvocationHandler( association ) ).namedAssociation(); - } - - // And/Or/Not ------------------------------------------------------------| - /** - * Create a new AND specification. - * - * @param left first operand - * @param right second operand - * @param optionalRight optional operands - * - * @return a new AND specification - */ - @SafeVarargs - public static AndPredicate and( Predicate<Composite> left, - Predicate<Composite> right, - Predicate<Composite>... optionalRight - ) - { - List<Predicate<Composite>> predicates = new ArrayList<>( 2 + optionalRight.length ); - predicates.add( left ); - predicates.add( right ); - Collections.addAll( predicates, optionalRight ); - return new AndPredicate( predicates ); - } - - /** - * Create a new OR specification. - * - * @param specs operands - * - * @return a new OR specification - */ - @SafeVarargs - public static OrPredicate or( Predicate<Composite>... specs ) - { - return new OrPredicate( Arrays.asList( specs ) ); - } - - /** - * Create a new NOT specification. - * - * @param operand specification to be negated - * - * @return a new NOT specification - */ - public static Notpredicate not( Predicate<Composite> operand ) - { - return new Notpredicate( operand ); - } - - // Comparisons -----------------------------------------------------------| - - /** - * Create a new EQUALS specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new EQUALS specification for a Property. - */ - public static <T> EqPredicate<T> eq( Property<T> property, T value ) - { - return new EqPredicate<>( property( property ), value ); - } - - /** - * Create a new EQUALS specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new EQUALS specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> EqPredicate<T> eq( Property<T> property, Variable variable ) - { - return new EqPredicate( property( property ), variable ); - } - - /** - * Create a new EQUALS specification for an Association. - * - * @param association an Association - * @param value its value - * - * @return a new EQUALS specification for an Association. - */ - public static <T> EqPredicate<Identity> eq( Association<T> association, T value ) - { - return new EqPredicate<>( - new PropertyFunction<>( - null, - association(association), - null, - null, - IDENTITY_METHOD), - ((HasIdentity) value).identity().get()); - } - - /** - * Create a new GREATER OR EQUALS specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new GREATER OR EQUALS specification for a Property. - */ - public static <T> GePredicate<T> ge( Property<T> property, T value ) - { - return new GePredicate<>( property( property ), value ); - } - - /** - * Create a new GREATER OR EQUALS specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new GREATER OR EQUALS specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> GePredicate<T> ge( Property<T> property, Variable variable ) - { - return new GePredicate( property( property ), variable ); - } - - /** - * Create a new GREATER THAN specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new GREATER THAN specification for a Property. - */ - public static <T> GtPredicate<T> gt( Property<T> property, T value ) - { - return new GtPredicate<>( property( property ), value ); - } - - /** - * Create a new GREATER THAN specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new GREATER THAN specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> GtPredicate<T> gt( Property<T> property, Variable variable ) - { - return new GtPredicate( property( property ), variable ); - } - - /** - * Create a new LESS OR EQUALS specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new LESS OR EQUALS specification for a Property. - */ - public static <T> LePredicate<T> le( Property<T> property, T value ) - { - return new LePredicate<>( property( property ), value ); - } - - /** - * Create a new LESS OR EQUALS specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new LESS OR EQUALS specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> LePredicate<T> le( Property<T> property, Variable variable ) - { - return new LePredicate( property( property ), variable ); - } - - /** - * Create a new LESSER THAN specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new LESSER THAN specification for a Property. - */ - public static <T> LtPredicate<T> lt( Property<T> property, T value ) - { - return new LtPredicate<>( property( property ), value ); - } - - /** - * Create a new LESSER THAN specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new LESSER THAN specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> LtPredicate<T> lt( Property<T> property, Variable variable ) - { - return new LtPredicate( property( property ), variable ); - } - - /** - * Create a new NOT EQUALS specification for a Property. - * - * @param property a Property - * @param value its value - * - * @return a new NOT EQUALS specification for a Property. - */ - public static <T> NePredicate<T> ne( Property<T> property, T value ) - { - return new NePredicate<>( property( property ), value ); - } - - /** - * Create a new NOT EQUALS specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new NOT EQUALS specification for a Property using a named Variable. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> NePredicate<T> ne( Property<T> property, Variable variable ) - { - return new NePredicate( property( property ), variable ); - } - - /** - * Create a new REGULAR EXPRESSION specification for a Property. - * - * @param property a Property - * @param regexp its value - * - * @return a new REGULAR EXPRESSION specification for a Property. - */ - public static MatchesPredicate matches( Property<String> property, String regexp ) - { - return new MatchesPredicate( property( property ), regexp ); - } - - /** - * Create a new REGULAR EXPRESSION specification for a Property using a named Variable. - * - * @param property a Property - * @param variable a Query Variable - * - * @return a new REGULAR EXPRESSION specification for a Property using a named Variable. - */ - public static MatchesPredicate matches( Property<String> property, Variable variable ) - { - return new MatchesPredicate( property( property ), variable ); - } - - // Null checks -----------------------------------------------------------| - - /** - * Create a new NOT NULL specification for a Property. - * - * @param property a Property - * - * @return a new NOT NULL specification for a Property. - */ - public static <T> PropertyNotNullPredicate<T> isNotNull( Property<T> property ) - { - return new PropertyNotNullPredicate<>( property( property ) ); - } - - /** - * Create a new NULL specification for a Property. - * - * @param property a Property - * - * @return a new NULL specification for a Property. - */ - public static <T> PropertyNullPredicate<T> isNull( Property<T> property ) - { - return new PropertyNullPredicate<>( property( property ) ); - } - - /** - * Create a new NOT NULL specification for an Association. - * - * @param association an Association - * - * @return a new NOT NULL specification for an Association. - */ - public static <T> AssociationNotNullPredicate<T> isNotNull( Association<T> association ) - { - return new AssociationNotNullPredicate<>( association( association ) ); - } - - /** - * Create a new NULL specification for an Association. - * - * @param association an Association - * - * @return a new NULL specification for an Association. - */ - public static <T> AssociationNullPredicate<T> isNull( Association<T> association ) - { - return new AssociationNullPredicate<>( association( association ) ); - } - - // Collections -----------------------------------------------------------| - - /** - * Create a new CONTAINS ALL specification for a Collection Property. - * - * @param collectionProperty a Collection Property - * @param values its values - * - * @return a new CONTAINS ALL specification for a Collection Property. - */ - public static <T> ContainsAllPredicate<T> containsAll( Property<? extends Collection<T>> collectionProperty, - Collection<T> values ) - { - NullArgumentException.validateNotNull( "Values", values ); - return new ContainsAllPredicate<>( property( collectionProperty ), values ); - } - - /** - * Create a new CONTAINS ALL specification for a Collection Property using named Variables. - * - * @param collectionProperty a Collection Property - * @param variables named Variables - * - * @return a new CONTAINS ALL specification for a Collection Property using named Variables. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> ContainsAllPredicate<T> containsAllVariables( - Property<? extends Collection<T>> collectionProperty, - Collection<Variable> variables ) - { - NullArgumentException.validateNotNull( "Variables", variables ); - return new ContainsAllPredicate( property( collectionProperty ), variables ); - } - - /** - * Create a new CONTAINS specification for a Collection Property. - * - * @param collectionProperty a Collection Property - * @param value the value - * - * @return a new CONTAINS specification for a Collection Property. - */ - public static <T> ContainsPredicate<T> contains( Property<? extends Collection<T>> collectionProperty, - T value ) - { - NullArgumentException.validateNotNull( "Value", value ); - return new ContainsPredicate<>( property( collectionProperty ), value ); - } - - /** - * Create a new CONTAINS specification for a Collection Property using named Variables. - * - * @param collectionProperty a Collection Property - * @param variable named Variable - * - * @return a new CONTAINS specification for a Collection Property using named Variables. - */ - @SuppressWarnings( {"raw", "unchecked"} ) - public static <T> ContainsPredicate<T> contains( Property<? extends Collection<T>> collectionProperty, - Variable variable ) - { - NullArgumentException.validateNotNull( "Variable", variable ); - return new ContainsPredicate( property( collectionProperty ), variable ); - } - - /** - * Create a new CONTAINS specification for a ManyAssociation. - * - * @param manyAssoc a ManyAssociation - * @param value the value - * - * @return a new CONTAINS specification for a ManyAssociation. - */ - public static <T> ManyAssociationContainsPredicate<T> contains( ManyAssociation<T> manyAssoc, T value ) - { - return new ManyAssociationContainsPredicate<>( manyAssociation( manyAssoc ), value ); - } - - /** - * Create a new CONTAINS specification for a NamedAssociation. - * - * @param namedAssoc a NamedAssociation - * @param value the value - * - * @return a new CONTAINS specification for a NamedAssociation. - */ - public static <T> NamedAssociationContainsPredicate<T> contains( NamedAssociation<T> namedAssoc, T value ) - { - return new NamedAssociationContainsPredicate<>( namedAssociation( namedAssoc ), value ); - } - - /** - * Create a new CONTAINS NAME specification for a NamedAssociation. - * - * @param namedAssoc a NamedAssociation - * @param name the name - * - * @return a new CONTAINS NAME specification for a NamedAssociation. - */ - public static <T> NamedAssociationContainsNamePredicate<T> containsName( NamedAssociation<T> namedAssoc, - String name ) - { - return new NamedAssociationContainsNamePredicate<>( namedAssociation( namedAssoc ), name ); - } - - // Ordering --------------------------------------------------------------| - /** - * Create a new Query ascending order segment for a Property. - * - * @param <T> type of the Property - * @param property a Property - * - * @return a new Query ascending order segment for a Property. - */ - public static <T> OrderBy orderBy( final Property<T> property ) - { - return orderBy( property, OrderBy.Order.ASCENDING ); - } - - /** - * Create a new Query ordering segment for a Property. - * - * @param <T> type of the Property - * @param property a Property - * @param order ascending or descending - * - * @return a new Query ordering segment for a Property. - */ - public static <T> OrderBy orderBy( final Property<T> property, final OrderBy.Order order ) - { - return new OrderBy( property( property ), order ); - } - - // Query Templates InvocationHandlers ------------------------------------| - - private static class TemplateHandler<T> - implements InvocationHandler - { - private final PropertyFunction<?> compositeProperty; - private final AssociationFunction<?> compositeAssociation; - private final ManyAssociationFunction<?> compositeManyAssociation; - private final NamedAssociationFunction<?> compositeNamedAssociation; - - private TemplateHandler( PropertyFunction<?> compositeProperty, - AssociationFunction<?> compositeAssociation, - ManyAssociationFunction<?> compositeManyAssociation, - NamedAssociationFunction<?> compositeNamedAssociation - ) - { - this.compositeProperty = compositeProperty; - this.compositeAssociation = compositeAssociation; - this.compositeManyAssociation = compositeManyAssociation; - this.compositeNamedAssociation = compositeNamedAssociation; - } - - @Override - public Object invoke( Object o, Method method, Object[] objects ) - throws Throwable - { - if( Property.class.isAssignableFrom( method.getReturnType() ) ) - { - return Proxy.newProxyInstance( - method.getReturnType().getClassLoader(), - array( method.getReturnType() ), - new PropertyReferenceHandler<>( new PropertyFunction<T>( compositeProperty, - compositeAssociation, - compositeManyAssociation, - compositeNamedAssociation, - method ) ) ); - } - else if( Association.class.isAssignableFrom( method.getReturnType() ) ) - { - return Proxy.newProxyInstance( - method.getReturnType().getClassLoader(), - array( method.getReturnType() ), - new AssociationReferenceHandler<>( new AssociationFunction<T>( compositeAssociation, - compositeManyAssociation, - compositeNamedAssociation, - method ) ) ); - } - else if( ManyAssociation.class.isAssignableFrom( method.getReturnType() ) ) - { - return Proxy.newProxyInstance( - method.getReturnType().getClassLoader(), - array( method.getReturnType() ), - new ManyAssociationReferenceHandler<>( new ManyAssociationFunction<T>( compositeAssociation, - compositeManyAssociation, - compositeNamedAssociation, - method ) ) ); - } - else if( NamedAssociation.class.isAssignableFrom( method.getReturnType() ) ) - { - return Proxy.newProxyInstance( - method.getReturnType().getClassLoader(), - array( method.getReturnType() ), - new NamedAssociationReferenceHandler<>( new NamedAssociationFunction<T>( compositeAssociation, - compositeManyAssociation, - compositeNamedAssociation, - method ) ) ); - } - - return null; - } - } - - private static class PropertyReferenceHandler<T> - implements InvocationHandler - { - private final PropertyFunction<T> property; - - private PropertyReferenceHandler( PropertyFunction<T> property ) - { - this.property = property; - } - - private PropertyFunction<T> property() - { - return property; - } - - @Override - public Object invoke( Object o, final Method method, Object[] objects ) - throws Throwable - { - if( method.equals( Property.class.getMethod( "get" ) ) ) - { - Type propertyType = GenericPropertyInfo.propertyTypeOf( property.accessor() ); - if( propertyType.getClass().equals( Class.class ) ) - { - return Proxy.newProxyInstance( method.getDeclaringClass().getClassLoader(), - array( (Class<?>) propertyType, PropertyReference.class ), - new TemplateHandler<T>( property, null, null, null ) ); - } - } - - return null; - } - } - - private static class AssociationReferenceHandler<T> - implements InvocationHandler - { - private final AssociationFunction<T> association; - - private AssociationReferenceHandler( AssociationFunction<T> association ) - { - this.association = association; - } - - private AssociationFunction<T> association() - { - return association; - } - - @Override - public Object invoke( Object o, final Method method, Object[] objects ) - throws Throwable - { - if( method.equals( Association.class.getMethod( "get" ) ) ) - { - Type associationType = GenericAssociationInfo.associationTypeOf( association.accessor() ); - if( associationType.getClass().equals( Class.class ) ) - { - return Proxy.newProxyInstance( method.getDeclaringClass().getClassLoader(), - array( (Class) associationType, PropertyReference.class ), - new TemplateHandler<T>( null, association, null, null ) ); - } - } - - return null; - } - } - - private static class ManyAssociationReferenceHandler<T> - implements InvocationHandler - { - private final ManyAssociationFunction<T> manyAssociation; - - private ManyAssociationReferenceHandler( ManyAssociationFunction<T> manyAssociation ) - { - this.manyAssociation = manyAssociation; - } - - public ManyAssociationFunction<T> manyAssociation() - { - return manyAssociation; - } - - @Override - public Object invoke( Object o, final Method method, Object[] objects ) - throws Throwable - { - if( method.equals( ManyAssociation.class.getMethod( "get", Integer.TYPE ) ) ) - { - Type manyAssociationType = GenericAssociationInfo.associationTypeOf( manyAssociation.accessor() ); - if( manyAssociationType.getClass().equals( Class.class ) ) - { - return Proxy.newProxyInstance( method.getDeclaringClass().getClassLoader(), - array( (Class) manyAssociationType, PropertyReference.class ), - new TemplateHandler<T>( null, null, manyAssociation, null ) ); - } - } - - return null; - } - } - - private static class NamedAssociationReferenceHandler<T> - implements InvocationHandler - { - private final NamedAssociationFunction<T> namedAssociation; - - private NamedAssociationReferenceHandler( NamedAssociationFunction<T> namedAssociation ) - { - this.namedAssociation = namedAssociation; - } - - public NamedAssociationFunction<T> namedAssociation() - { - return namedAssociation; - } - - @Override - public Object invoke( Object o, final Method method, Object[] objects ) - throws Throwable - { - if( method.equals( NamedAssociation.class.getMethod( "get", String.class ) ) ) - { - Type namedAssociationType = GenericAssociationInfo.associationTypeOf( namedAssociation.accessor() ); - if( namedAssociationType.getClass().equals( Class.class ) ) - { - return Proxy.newProxyInstance( method.getDeclaringClass().getClassLoader(), - array( (Class) namedAssociationType, PropertyReference.class ), - new TemplateHandler<T>( null, null, null, namedAssociation ) ); - } - } - - return null; - } - } - - @SafeVarargs - private static <T> T[] array( T... array ) - { - return array; - } - - private QueryExpressions() - { - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java deleted file mode 100644 index bd6c694..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/AndPredicate.java +++ /dev/null @@ -1,61 +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.zest.api.query.grammar; - -import java.util.Collection; -import java.util.function.Predicate; -import org.apache.zest.api.composite.Composite; - -/** - * AND Specification. - */ -public class AndPredicate - extends BinaryPredicate -{ - public AndPredicate( Collection<Predicate<Composite>> operands ) - { - super( operands ); - } - - @Override - public boolean test( Composite item ) - { - Predicate<Composite> master = t -> true; - for( Predicate<Composite> p : operands ) - { - master = master.and( p ); - } - return master.test( item ); - } - - @Override - public String toString() - { - StringBuilder sb = new StringBuilder( "(" ); - String and = ""; - for( Predicate<Composite> operand : operands ) - { - sb.append( and ).append( operand ); - and = " and "; - } - return sb.append( ")" ).toString(); - } - -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationFunction.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationFunction.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationFunction.java deleted file mode 100644 index 965dcc0..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationFunction.java +++ /dev/null @@ -1,149 +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.zest.api.query.grammar; - -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Member; -import java.lang.reflect.Proxy; -import java.lang.reflect.Type; -import java.util.function.Function; -import org.apache.zest.api.association.Association; -import org.apache.zest.api.association.AssociationStateHolder; -import org.apache.zest.api.association.GenericAssociationInfo; -import org.apache.zest.api.association.ManyAssociation; -import org.apache.zest.api.association.NamedAssociation; -import org.apache.zest.api.composite.Composite; -import org.apache.zest.api.composite.CompositeInstance; -import org.apache.zest.api.query.QueryExpressionException; -import org.apache.zest.api.util.Classes; - -import static org.apache.zest.api.util.Classes.typeOf; - -/** - * Function to get Entity Associations - */ -public class AssociationFunction<T> - implements Function<Composite, Association<T>> -{ - private final AssociationFunction<?> traversedAssociation; - private final ManyAssociationFunction<?> traversedManyAssociation; - private final NamedAssociationFunction<?> traversedNamedAssociation; - private final AccessibleObject accessor; - - public AssociationFunction( AssociationFunction<?> traversedAssociation, - ManyAssociationFunction<?> traversedManyAssociation, - NamedAssociationFunction<?> traversedNamedAssociation, - AccessibleObject accessor - ) - { - this.traversedAssociation = traversedAssociation; - this.traversedManyAssociation = traversedManyAssociation; - this.traversedNamedAssociation = traversedNamedAssociation; - this.accessor = accessor; - - Type returnType = typeOf( accessor ); - if( !Association.class.isAssignableFrom( Classes.RAW_CLASS.apply( returnType ) ) - && !ManyAssociation.class.isAssignableFrom( Classes.RAW_CLASS.apply( returnType ) ) - && !NamedAssociation.class.isAssignableFrom( Classes.RAW_CLASS.apply( returnType ) ) ) - { - throw new QueryExpressionException( "Unsupported association type:" + returnType ); - } - Type associationTypeAsType = GenericAssociationInfo.toAssociationType( returnType ); - if( !( associationTypeAsType instanceof Class ) ) - { - throw new QueryExpressionException( "Unsupported association type:" + associationTypeAsType ); - } - } - - public AssociationFunction<?> traversedAssociation() - { - return traversedAssociation; - } - - public ManyAssociationFunction<?> traversedManyAssociation() - { - return traversedManyAssociation; - } - - public NamedAssociationFunction<?> traversedNamedAssociation() - { - return traversedNamedAssociation; - } - - public AccessibleObject accessor() - { - return accessor; - } - - @Override - public Association<T> apply( Composite entity ) - { - try - { - Object target = entity; - if( traversedAssociation != null ) - { - Association<?> association = traversedAssociation.apply( entity ); - if( association == null ) - { - return null; - } - target = association.get(); - } - else if( traversedManyAssociation != null ) - { - throw new IllegalArgumentException( "Cannot evaluate a ManyAssociation" ); - } - else if( traversedNamedAssociation != null ) - { - throw new IllegalArgumentException( "Cannot evaluate a NamedAssociation" ); - } - - if( target == null ) - { - return null; - } - - CompositeInstance handler = (CompositeInstance) Proxy.getInvocationHandler( target ); - return ( (AssociationStateHolder) handler.state() ).associationFor( accessor ); - } - catch( IllegalArgumentException e ) - { - throw e; - } - catch( Throwable e ) - { - throw new IllegalArgumentException( e ); - } - } - - @Override - public String toString() - { - if( traversedAssociation != null ) - { - return traversedAssociation.toString() + "." + ( (Member) accessor ).getName(); - } - else - { - return ( (Member) accessor ).getName(); - } - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNotNullPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNotNullPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNotNullPredicate.java deleted file mode 100644 index 29ce85e..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNotNullPredicate.java +++ /dev/null @@ -1,68 +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.zest.api.query.grammar; - -import org.apache.zest.api.association.Association; -import org.apache.zest.api.composite.Composite; - -/** - * Association not null Specification. - */ -public class AssociationNotNullPredicate<T> - extends ExpressionPredicate -{ - private AssociationFunction<T> association; - - public AssociationNotNullPredicate( AssociationFunction<T> association ) - { - this.association = association; - } - - public AssociationFunction<T> association() - { - return association; - } - - @Override - public boolean test( Composite item ) - { - try - { - Association<T> assoc = association.apply( item ); - - if( assoc == null ) - { - return false; - } - - return assoc.get() != null; - } - catch( IllegalArgumentException e ) - { - return false; - } - } - - @Override - public String toString() - { - return association.toString() + " is not null"; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNullPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNullPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNullPredicate.java deleted file mode 100644 index a304ae0..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/AssociationNullPredicate.java +++ /dev/null @@ -1,68 +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.zest.api.query.grammar; - -import org.apache.zest.api.association.Association; -import org.apache.zest.api.composite.Composite; - -/** - * Association null Specification. - */ -public class AssociationNullPredicate<T> - extends ExpressionPredicate -{ - private AssociationFunction<T> association; - - public AssociationNullPredicate( AssociationFunction<T> association ) - { - this.association = association; - } - - public AssociationFunction<T> association() - { - return association; - } - - @Override - public boolean test( Composite item ) - { - try - { - Association<T> assoc = association.apply( item ); - - if( assoc == null ) - { - return true; - } - - return assoc.get() == null; - } - catch( IllegalArgumentException e ) - { - return true; - } - } - - @Override - public String toString() - { - return association.toString() + " is null"; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/BinaryPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/BinaryPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/BinaryPredicate.java deleted file mode 100644 index 4e2e218..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/BinaryPredicate.java +++ /dev/null @@ -1,44 +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.zest.api.query.grammar; - -import java.util.Collection; -import java.util.Collections; -import java.util.function.Predicate; -import org.apache.zest.api.composite.Composite; - -/** - * Base binary Specification, used for AND and OR Specifications.. - */ -public abstract class BinaryPredicate - extends ExpressionPredicate -{ - protected final Collection<Predicate<Composite>> operands; - - protected BinaryPredicate( Collection<Predicate<Composite>> operands ) - { - this.operands = Collections.unmodifiableCollection( operands ); - } - - public Collection<Predicate<Composite>> operands() - { - return operands; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/ComparisonPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/ComparisonPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/ComparisonPredicate.java deleted file mode 100644 index 41fb7f5..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/ComparisonPredicate.java +++ /dev/null @@ -1,77 +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.zest.api.query.grammar; - -import org.apache.zest.api.composite.Composite; -import org.apache.zest.api.property.Property; - -/** - * Base comparison Specification. - */ -public abstract class ComparisonPredicate<T> - extends ExpressionPredicate -{ - protected final PropertyFunction<T> property; - protected final T value; - - public ComparisonPredicate( PropertyFunction<T> property, T value ) - { - this.property = property; - this.value = value; - } - - public PropertyFunction<T> property() - { - return property; - } - - @Override - public final boolean test( Composite item ) - { - try - { - Property<T> prop = property.apply( item ); - - if( prop == null ) - { - return false; - } - - T propValue = prop.get(); - if( propValue == null ) - { - return false; - } - - return compare( propValue ); - } - catch( IllegalArgumentException e ) - { - return false; - } - } - - protected abstract boolean compare( T value ); - - public T value() - { - return value; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsAllPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsAllPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsAllPredicate.java deleted file mode 100644 index 52a1b27..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsAllPredicate.java +++ /dev/null @@ -1,80 +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.zest.api.query.grammar; - -import java.util.Collection; -import java.util.Collections; -import java.util.List; -import org.apache.zest.api.composite.Composite; - -/** - * Contains All Specification. - */ -public class ContainsAllPredicate<T> - extends ExpressionPredicate -{ - private PropertyFunction<? extends Collection<T>> collectionProperty; - private Collection<T> valueCollection; - - public ContainsAllPredicate( PropertyFunction<? extends Collection<T>> collectionProperty, - Collection<T> valueCollection - ) - { - this.collectionProperty = collectionProperty; - this.valueCollection = Collections.unmodifiableCollection( valueCollection ); - } - - public PropertyFunction<? extends Collection<T>> collectionProperty() - { - return collectionProperty; - } - - public Collection<T> containedValues() - { - return valueCollection; - } - - @Override - public boolean test( Composite item ) - { - Collection<T> collection = collectionProperty.apply( item ).get(); - - if( collection == null ) - { - return false; - } - - for( T value : valueCollection ) - { - if( !collection.contains( value ) ) - { - return false; - } - } - - return true; - } - - @Override - public String toString() - { - return collectionProperty + " contains " + valueCollection; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsPredicate.java deleted file mode 100644 index c8b90fd..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/ContainsPredicate.java +++ /dev/null @@ -1,68 +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.zest.api.query.grammar; - -import java.util.Collection; -import org.apache.zest.api.composite.Composite; - -/** - * Contains Specification. - */ -public class ContainsPredicate<T> - extends ExpressionPredicate -{ - private PropertyFunction<? extends Collection<T>> collectionProperty; - private T value; - - public ContainsPredicate( PropertyFunction<? extends Collection<T>> collectionProperty, T value ) - { - this.collectionProperty = collectionProperty; - this.value = value; - } - - public PropertyFunction<? extends Collection<T>> collectionProperty() - { - return collectionProperty; - } - - public T value() - { - return value; - } - - @Override - public boolean test( Composite item ) - { - Collection<T> collection = collectionProperty.apply( item ).get(); - - if( collection == null ) - { - return false; - } - - return collection.contains( value ); - } - - @Override - public String toString() - { - return collectionProperty + " contains " + value; - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/EqPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/EqPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/EqPredicate.java deleted file mode 100644 index d06b4e6..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/EqPredicate.java +++ /dev/null @@ -1,44 +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.zest.api.query.grammar; - -/** - * Equals Specification. - */ -public class EqPredicate<T> - extends ComparisonPredicate<T> -{ - public EqPredicate( PropertyFunction<T> property, T value ) - { - super( property, value ); - } - - @Override - protected boolean compare( T value ) - { - return value.equals( this.value ); - } - - @Override - public String toString() - { - return property.toString() + "=" + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/ExpressionPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/ExpressionPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/ExpressionPredicate.java deleted file mode 100644 index 4fca55d..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/ExpressionPredicate.java +++ /dev/null @@ -1,31 +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.zest.api.query.grammar; - -import java.util.function.Predicate; -import org.apache.zest.api.composite.Composite; - -/** - * Base expression Specification. - */ -public abstract class ExpressionPredicate - implements Predicate<Composite> -{ -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/GePredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/GePredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/GePredicate.java deleted file mode 100644 index 232cff6..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/GePredicate.java +++ /dev/null @@ -1,45 +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.zest.api.query.grammar; - -/** - * Greater or equals Specification. - */ -public class GePredicate<T> - extends ComparisonPredicate<T> -{ - public GePredicate( PropertyFunction<T> property, T value ) - { - super( property, value ); - } - - @Override - @SuppressWarnings( "unchecked" ) - protected boolean compare( T value ) - { - return ( (Comparable) value ).compareTo( this.value ) >= 0; - } - - @Override - public String toString() - { - return property.toString() + ">=" + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/GtPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/GtPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/GtPredicate.java deleted file mode 100644 index d26c8ee..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/GtPredicate.java +++ /dev/null @@ -1,45 +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.zest.api.query.grammar; - -/** - * Greater than Specification. - */ -public class GtPredicate<T> - extends ComparisonPredicate<T> -{ - public GtPredicate( PropertyFunction<T> property, T value ) - { - super( property, value ); - } - - @Override - @SuppressWarnings( "unchecked" ) - protected boolean compare( T value ) - { - return ( (Comparable) value ).compareTo( this.value ) > 0; - } - - @Override - public String toString() - { - return property.toString() + ">" + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/LePredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/LePredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/LePredicate.java deleted file mode 100644 index 504ab91..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/LePredicate.java +++ /dev/null @@ -1,45 +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.zest.api.query.grammar; - -/** - * Less or equals Specification. - */ -public class LePredicate<T> - extends ComparisonPredicate<T> -{ - public LePredicate( PropertyFunction<T> property, T value ) - { - super( property, value ); - } - - @Override - @SuppressWarnings( "unchecked" ) - protected boolean compare( T value ) - { - return ( (Comparable) value ).compareTo( this.value ) <= 0; - } - - @Override - public String toString() - { - return property.toString() + "<=" + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/LtPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/LtPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/LtPredicate.java deleted file mode 100644 index 8723743..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/LtPredicate.java +++ /dev/null @@ -1,45 +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.zest.api.query.grammar; - -/** - * Lesser than Specification. - */ -public class LtPredicate<T> - extends ComparisonPredicate<T> -{ - public LtPredicate( PropertyFunction<T> property, T value ) - { - super( property, value ); - } - - @Override - @SuppressWarnings( "unchecked" ) - protected boolean compare( T value ) - { - return ( (Comparable) value ).compareTo( this.value ) < 0; - } - - @Override - public String toString() - { - return property.toString() + "<" + value.toString(); - } -} http://git-wip-us.apache.org/repos/asf/zest-java/blob/1c722f44/core/api/src/main/java/org/apache/zest/api/query/grammar/ManyAssociationContainsPredicate.java ---------------------------------------------------------------------- diff --git a/core/api/src/main/java/org/apache/zest/api/query/grammar/ManyAssociationContainsPredicate.java b/core/api/src/main/java/org/apache/zest/api/query/grammar/ManyAssociationContainsPredicate.java deleted file mode 100644 index 1e71ff8..0000000 --- a/core/api/src/main/java/org/apache/zest/api/query/grammar/ManyAssociationContainsPredicate.java +++ /dev/null @@ -1,66 +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.zest.api.query.grammar; - -import org.apache.zest.api.association.ManyAssociation; -import org.apache.zest.api.composite.Composite; - -/** - * ManyAssociation Contains Specification. - */ -public class ManyAssociationContainsPredicate<T> - extends ExpressionPredicate -{ - private final ManyAssociationFunction<T> manyAssociationFunction; - private final T value; - - public ManyAssociationContainsPredicate( ManyAssociationFunction<T> manyAssociationFunction, T value ) - { - this.manyAssociationFunction = manyAssociationFunction; - this.value = value; - } - - public ManyAssociationFunction<T> manyAssociation() - { - return manyAssociationFunction; - } - - public T value() - { - return value; - } - - @Override - public boolean test( Composite item ) - { - ManyAssociation<T> collection = manyAssociationFunction.apply( item ); - if( collection == null ) - { - return false; - } - return collection.contains( value ); - } - - @Override - public String toString() - { - return manyAssociationFunction + " contains:" + value; - } -}
