You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/08/26 17:45:11 UTC

[08/24] zest-java git commit: ZEST-113; Removed the use of Specification and replaced with Java 8 Predicate.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
index 0f934aa..bdf002c 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleInstance.java
@@ -27,6 +27,7 @@ import java.util.Stack;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.BiFunction;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.activation.Activation;
 import org.apache.zest.api.activation.ActivationEventListener;
 import org.apache.zest.api.activation.ActivationException;
@@ -66,7 +67,6 @@ import org.apache.zest.api.value.ValueComposite;
 import org.apache.zest.api.value.ValueDescriptor;
 import org.apache.zest.api.value.ValueSerialization;
 import org.apache.zest.api.value.ValueSerializationException;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.activation.ActivationDelegate;
 import org.apache.zest.runtime.composite.FunctionStateResolver;
@@ -684,25 +684,25 @@ public class ModuleInstance
     public Iterable<ModelModule<ObjectDescriptor>> visibleObjects( Visibility visibility )
     {
         return map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ),
-                    filter( new VisibilitySpecification( visibility ), objects.models() ) );
+                    filter( new Visibilitypredicate( visibility ), objects.models() ) );
     }
 
     public Iterable<ModelModule<TransientDescriptor>> visibleTransients( Visibility visibility )
     {
         return map( ModelModule.<TransientDescriptor>modelModuleFunction( this ),
-                    filter( new VisibilitySpecification( visibility ), transients.models() ) );
+                    filter( new Visibilitypredicate( visibility ), transients.models() ) );
     }
 
     public Iterable<ModelModule<EntityDescriptor>> visibleEntities( Visibility visibility )
     {
         return map( ModelModule.<EntityDescriptor>modelModuleFunction( this ),
-                    filter( new VisibilitySpecification( visibility ), entities.models() ) );
+                    filter( new Visibilitypredicate( visibility ), entities.models() ) );
     }
 
     public Iterable<ModelModule<ValueDescriptor>> visibleValues( Visibility visibility )
     {
         return map( ModelModule.<ValueDescriptor>modelModuleFunction( this ),
-                    filter( new VisibilitySpecification( visibility ), values.models() ) );
+                    filter( new Visibilitypredicate( visibility ), values.models() ) );
     }
 
     public Iterable<ServiceReference<?>> visibleServices( Visibility visibility )
@@ -732,8 +732,8 @@ public class ModuleInstance
             Class<?> clazz = classes.get( name );
             if( clazz == null )
             {
-                Specification<ModelDescriptor> modelTypeSpecification = modelTypeSpecification( name );
-                Specification<ModelModule<ModelDescriptor>> translate = Specifications.translate( ModelModule.modelFunction(), modelTypeSpecification );
+                Predicate<ModelDescriptor> modelTypeSpecification = modelTypeSpecification( name );
+                Predicate<ModelModule<ModelDescriptor>> translate = Specifications.translate( ModelModule.modelFunction(), modelTypeSpecification );
                 // Check module
                 {
                     Iterable<ModelModule<ModelDescriptor>> i = cast( flatten(

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
index c61adcd..af796fa 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ModuleUnitOfWork.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.association.AssociationDescriptor;
 import org.apache.zest.api.association.AssociationStateHolder;
 import org.apache.zest.api.common.QualifiedName;
@@ -50,7 +51,6 @@ import org.apache.zest.api.util.NullArgumentException;
 import org.apache.zest.api.value.ValueBuilder;
 import org.apache.zest.api.value.ValueComposite;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.runtime.association.AssociationInstance;
 import org.apache.zest.runtime.association.ManyAssociationInstance;
 import org.apache.zest.runtime.association.NamedAssociationInstance;
@@ -488,7 +488,7 @@ public class ModuleUnitOfWork
 
         @Override
         public <T> T find( Class<T> resultType,
-                           Specification<Composite> whereClause,
+                           Predicate<Composite> whereClause,
                            Iterable<OrderBy> orderBySegments,
                            Integer firstResult,
                            Integer maxResults,
@@ -523,7 +523,7 @@ public class ModuleUnitOfWork
 
         @Override
         public <T> long count( Class<T> resultType,
-                               Specification<Composite> whereClause,
+                               Predicate<Composite> whereClause,
                                Iterable<OrderBy> orderBySegments,
                                Integer firstResult,
                                Integer maxResults,
@@ -545,7 +545,7 @@ public class ModuleUnitOfWork
 
         @Override
         public <T> Iterator<T> iterator( final Class<T> resultType,
-                                         Specification<Composite> whereClause,
+                                         Predicate<Composite> whereClause,
                                          Iterable<OrderBy> orderBySegments,
                                          Integer firstResult,
                                          Integer maxResults,

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookup.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookup.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookup.java
index fcae944..db52048 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookup.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/TypeLookup.java
@@ -28,11 +28,11 @@ import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.AmbiguousTypeException;
 import org.apache.zest.api.composite.ModelDescriptor;
 import org.apache.zest.api.service.NoSuchServiceException;
 import org.apache.zest.api.service.ServiceReference;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.functional.Specifications;
 import org.apache.zest.runtime.composite.TransientModel;
 import org.apache.zest.runtime.entity.EntityModel;
@@ -441,21 +441,21 @@ public class TypeLookup
     }
 
     @SuppressWarnings( { "raw", "unchecked" } )
-    private static <T extends ModelDescriptor> Iterable<ModelModule<T>> findModels( Specification<Iterable<Class<?>>> specification,
+    private static <T extends ModelDescriptor> Iterable<ModelModule<T>> findModels( Predicate<Iterable<Class<?>>> specification,
                                                                                     Iterable<ModelModule<T>>... models
     )
     {
-        Specification<ModelModule<T>> spec = Specifications.translate( new ModelModuleTypesFunction(), specification );
+        Predicate<ModelModule<T>> spec = Specifications.translate( new ModelModuleTypesFunction(), specification );
         Iterable<ModelModule<T>> flattened = flattenIterables( iterable( models ) );
         return filter( spec, flattened );
     }
 
     @SuppressWarnings( { "raw", "unchecked" } )
-    private static Iterable<ServiceReference<?>> findServiceReferences( Specification<Iterable<Class<?>>> specification,
+    private static Iterable<ServiceReference<?>> findServiceReferences( Predicate<Iterable<Class<?>>> specification,
                                                                         Iterable<ServiceReference<?>>... references
     )
     {
-        Specification<ServiceReference<?>> spec = Specifications.translate( new ServiceReferenceTypesFunction(), specification );
+        Predicate<ServiceReference<?>> spec = Specifications.translate( new ServiceReferenceTypesFunction(), specification );
         Iterable<ServiceReference<?>> flattened = flattenIterables( iterable( references ) );
         return filter( spec, flattened );
     }
@@ -532,7 +532,7 @@ public class TypeLookup
     }
 
     private static abstract class AbstractTypeLookupSpecification
-        implements Specification<Iterable<Class<?>>>
+        implements Predicate<Iterable<Class<?>>>
     {
 
         protected final Type lookedUpType;
@@ -543,7 +543,7 @@ public class TypeLookup
         }
 
         @Override
-        public final boolean satisfiedBy( Iterable<Class<?>> types )
+        public final boolean test( Iterable<Class<?>> types )
         {
             if( lookedUpType instanceof Class )
             {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/structure/VisibilitySpecification.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/VisibilitySpecification.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/VisibilitySpecification.java
deleted file mode 100644
index bb646eb..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/VisibilitySpecification.java
+++ /dev/null
@@ -1,47 +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.runtime.structure;
-
-import org.apache.zest.api.common.Visibility;
-import org.apache.zest.api.composite.ModelDescriptor;
-import org.apache.zest.functional.Specification;
-
-/**
- * TODO
- */
-public class VisibilitySpecification
-    implements Specification<ModelDescriptor>
-{
-    public static final Specification<ModelDescriptor> MODULE = new VisibilitySpecification( Visibility.module );
-    public static final Specification<ModelDescriptor> LAYER = new VisibilitySpecification( Visibility.layer );
-    public static final Specification<ModelDescriptor> APPLICATION = new VisibilitySpecification( Visibility.application );
-
-    private final Visibility visibility;
-
-    public VisibilitySpecification( Visibility visibility )
-    {
-        this.visibility = visibility;
-    }
-
-    @Override
-    public boolean satisfiedBy( ModelDescriptor item )
-    {
-        return item.visibility().ordinal() >= visibility.ordinal();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/structure/Visibilitypredicate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/Visibilitypredicate.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/Visibilitypredicate.java
new file mode 100644
index 0000000..175ecf7
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/Visibilitypredicate.java
@@ -0,0 +1,47 @@
+/*
+ * 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.runtime.structure;
+
+import java.util.function.Predicate;
+import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.composite.ModelDescriptor;
+
+/**
+ * TODO
+ */
+public class Visibilitypredicate
+    implements Predicate<ModelDescriptor>
+{
+    public static final Predicate<ModelDescriptor> MODULE = new Visibilitypredicate( Visibility.module );
+    public static final Predicate<ModelDescriptor> LAYER = new Visibilitypredicate( Visibility.layer );
+    public static final Predicate<ModelDescriptor> APPLICATION = new Visibilitypredicate( Visibility.application );
+
+    private final Visibility visibility;
+
+    public Visibilitypredicate( Visibility visibility )
+    {
+        this.visibility = visibility;
+    }
+
+    @Override
+    public boolean test( ModelDescriptor item )
+    {
+        return item.visibility().ordinal() >= visibility.ordinal();
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/types/ValueTypeFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/types/ValueTypeFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/types/ValueTypeFactory.java
index e3195ba..4626105 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/types/ValueTypeFactory.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/types/ValueTypeFactory.java
@@ -210,7 +210,7 @@ public class ValueTypeFactory
             else if( visited instanceof ValueModel )
             {
                 ValueModel valueModel = (ValueModel) visited;
-                boolean typeEquality = Specifications.in( valueModel.types() ).satisfiedBy( type );
+                boolean typeEquality = Specifications.in( valueModel.types() ).test( type );
                 if( typeEquality && valueModel.visibility().ordinal() >= visibility.ordinal() )
                 {
                     foundModel = valueModel;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/BuilderEntityState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/BuilderEntityState.java b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/BuilderEntityState.java
index a390874..a112f51 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/BuilderEntityState.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/BuilderEntityState.java
@@ -81,7 +81,7 @@ public final class BuilderEntityState
     @Override
     public boolean isAssignableTo( Class<?> type )
     {
-        return Classes.exactTypeSpecification( type ).satisfiedBy( entityType );
+        return Classes.exactTypeSpecification( type ).test( entityType );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/test/java/org/apache/zest/runtime/injection/ServiceInjectionTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/injection/ServiceInjectionTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/injection/ServiceInjectionTest.java
index 4f44a68..fbf691e 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/injection/ServiceInjectionTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/injection/ServiceInjectionTest.java
@@ -17,6 +17,7 @@ package org.apache.zest.runtime.injection;
 import java.io.Serializable;
 import java.lang.annotation.Retention;
 import java.lang.annotation.RetentionPolicy;
+import java.util.function.Predicate;
 import org.junit.Test;
 import org.apache.zest.api.activation.ActivationException;
 import org.apache.zest.api.common.ConstructionException;
@@ -36,7 +37,6 @@ import org.apache.zest.bootstrap.LayerAssembly;
 import org.apache.zest.bootstrap.ModuleAssembly;
 import org.apache.zest.bootstrap.ServiceDeclaration;
 import org.apache.zest.bootstrap.SingletonAssembler;
-import org.apache.zest.functional.Specification;
 
 import static org.junit.Assert.assertEquals;
 import static org.apache.zest.api.common.Visibility.application;
@@ -294,11 +294,11 @@ public class ServiceInjectionTest
     public static final class NamedSelector
         implements AnnotationQualifier<Named>
     {
-        public <T> Specification<ServiceReference<?>> qualifier( final Named named )
+        public <T> Predicate<ServiceReference<?>> qualifier( final Named named )
         {
-            return new Specification<ServiceReference<?>>()
+            return new Predicate<ServiceReference<?>>()
             {
-                public boolean satisfiedBy( ServiceReference<?> service )
+                public boolean test( ServiceReference<?> service )
                 {
                     ServiceName serviceName = service.metaInfo( ServiceName.class );
                     return ( serviceName != null && serviceName.getName().equals( named.value() ) );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/runtime/src/test/java/org/apache/zest/runtime/mixin/JDKMixinTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/mixin/JDKMixinTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/mixin/JDKMixinTest.java
index ef7aae2..66888eb 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/mixin/JDKMixinTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/mixin/JDKMixinTest.java
@@ -20,6 +20,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.json.JSONObject;
 import org.junit.Before;
 import org.junit.Test;
@@ -30,7 +31,6 @@ import org.apache.zest.api.injection.scope.This;
 import org.apache.zest.api.service.ServiceReference;
 import org.apache.zest.bootstrap.AssemblyException;
 import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.test.AbstractZestTest;
 
 import static org.hamcrest.core.IsEqual.*;
@@ -103,8 +103,8 @@ public class JDKMixinTest
 
     private static final String EXTENDS_IDENTITY = ExtendsJDKMixin.class.getName();
     private static final String COMPOSE_IDENTITY = ComposeWithJDKMixin.class.getName();
-    private static final Specification<ServiceReference<?>> EXTENDS_IDENTITY_SPEC = new ServiceIdentitySpec( EXTENDS_IDENTITY );
-    private static final Specification<ServiceReference<?>> COMPOSE_IDENTITY_SPEC = new ServiceIdentitySpec( COMPOSE_IDENTITY );
+    private static final Predicate<ServiceReference<?>> EXTENDS_IDENTITY_SPEC = new ServiceIdentitySpec( EXTENDS_IDENTITY );
+    private static final Predicate<ServiceReference<?>> COMPOSE_IDENTITY_SPEC = new ServiceIdentitySpec( COMPOSE_IDENTITY );
     private static final List<String> CONCERN_RECORDS = new ArrayList<String>();
 
     @Before
@@ -170,7 +170,7 @@ public class JDKMixinTest
     }
 
     private static class ServiceIdentitySpec
-        implements Specification<ServiceReference<?>>
+        implements Predicate<ServiceReference<?>>
     {
 
         private final String identity;
@@ -181,7 +181,7 @@ public class JDKMixinTest
         }
 
         @Override
-        public boolean satisfiedBy( ServiceReference<?> item )
+        public boolean test( ServiceReference<?> item )
         {
             return item.identity().equals( identity );
         }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/DefaultEntityState.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/DefaultEntityState.java b/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/DefaultEntityState.java
index 6594364..459fba0 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/DefaultEntityState.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/DefaultEntityState.java
@@ -208,7 +208,7 @@ public final class DefaultEntityState
     @Override
     public boolean isAssignableTo( Class<?> type )
     {
-        return Classes.exactTypeSpecification( type ).satisfiedBy( entityDescriptor );
+        return Classes.exactTypeSpecification( type ).test( entityDescriptor );
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/spi/src/main/java/org/apache/zest/spi/query/EntityFinder.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/zest/spi/query/EntityFinder.java b/core/spi/src/main/java/org/apache/zest/spi/query/EntityFinder.java
index 3b62743..1663895 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/query/EntityFinder.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/query/EntityFinder.java
@@ -19,11 +19,11 @@
 package org.apache.zest.spi.query;
 
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityReference;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 
 /**
  * Entity Finder.
@@ -42,7 +42,7 @@ public interface EntityFinder
      * @return Single entity matching the query criterion.
      */
     Iterable<EntityReference> findEntities( Class<?> resultType,
-                                            @Optional Specification<Composite> whereClause,
+                                            @Optional Predicate<Composite> whereClause,
                                             @Optional OrderBy[] orderBySegments,
                                             @Optional Integer firstResult,
                                             @Optional Integer maxResults,
@@ -59,7 +59,7 @@ public interface EntityFinder
      * @return Single entity matching the query criterion.
      */
     EntityReference findEntity( Class<?> resultType,
-                                @Optional Specification<Composite> whereClause,
+                                @Optional Predicate<Composite> whereClause,
                                 Map<String, Object> variables
     )
         throws EntityFinderException;
@@ -73,7 +73,7 @@ public interface EntityFinder
      * @return Count entities matching the query criterion.
      */
     long countEntities( Class<?> resultType,
-                        @Optional Specification<Composite> whereClause,
+                        @Optional Predicate<Composite> whereClause,
                         Map<String, Object> variables
     )
         throws EntityFinderException;

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/spi/src/main/java/org/apache/zest/spi/query/QuerySource.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/zest/spi/query/QuerySource.java b/core/spi/src/main/java/org/apache/zest/spi/query/QuerySource.java
index 46ea8a0..1562534 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/query/QuerySource.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/query/QuerySource.java
@@ -20,9 +20,9 @@ package org.apache.zest.spi.query;
 
 import java.util.Iterator;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 
 /**
  * Query Source, used in QueryBuilder SPI.
@@ -30,7 +30,7 @@ import org.apache.zest.functional.Specification;
 public interface QuerySource
 {
     <T> T find( Class<T> resultType,
-                Specification<Composite> whereClause,
+                Predicate<Composite> whereClause,
                 Iterable<OrderBy> orderBySegments,
                 Integer firstResult,
                 Integer maxResults,
@@ -38,7 +38,7 @@ public interface QuerySource
     );
 
     <T> long count( Class<T> resultType,
-                    Specification<Composite> whereClause,
+                    Predicate<Composite> whereClause,
                     Iterable<OrderBy> orderBySegments,
                     Integer firstResult,
                     Integer maxResults,
@@ -46,7 +46,7 @@ public interface QuerySource
     );
 
     <T> Iterator<T> iterator( Class<T> resultType,
-                              Specification<Composite> whereClause,
+                              Predicate<Composite> whereClause,
                               Iterable<OrderBy> orderBySegments,
                               Integer firstResult,
                               Integer maxResults,

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractEntityFinderTest.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractEntityFinderTest.java b/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractEntityFinderTest.java
index c5b2a4c..f02c0f9 100644
--- a/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractEntityFinderTest.java
+++ b/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractEntityFinderTest.java
@@ -26,13 +26,13 @@ import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.junit.Before;
 import org.junit.Test;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityReference;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.api.service.ServiceReference;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.EntityFinder;
 import org.apache.zest.spi.query.EntityFinderException;
 import org.apache.zest.spi.query.IndexExporter;
@@ -65,7 +65,7 @@ public abstract class AbstractEntityFinderTest
     extends AbstractAnyQueryTest
 {
 
-    private static final Specification<Composite> ALL = null;
+    private static final Predicate<Composite> ALL = null;
 
     private static final OrderBy[] NO_SORTING = null;
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractNamedQueryTest.java
----------------------------------------------------------------------
diff --git a/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractNamedQueryTest.java b/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractNamedQueryTest.java
index 2d0637b..1f52478 100644
--- a/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractNamedQueryTest.java
+++ b/core/testsupport/src/main/java/org/apache/zest/test/indexing/AbstractNamedQueryTest.java
@@ -20,13 +20,13 @@ package org.apache.zest.test.indexing;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.junit.Test;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.Query;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.bootstrap.AssemblyException;
 import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.EntityFinderException;
 import org.apache.zest.spi.query.IndexExporter;
 import org.apache.zest.test.EntityTestAssembler;
@@ -51,7 +51,7 @@ public abstract class AbstractNamedQueryTest
     extends AbstractAnyQueryTest
 {
 
-    private final Map<String, Specification<Composite>> queries = new HashMap<>();
+    private final Map<String, Predicate<Composite>> queries = new HashMap<>();
 
     @Override
     public void assemble( ModuleAssembly module )
@@ -65,7 +65,7 @@ public abstract class AbstractNamedQueryTest
             String queryName = String.format( "script%02d", i + 1 );
             if( query[i].length() != 0 )
             {
-                Specification<Composite> expression = createNamedQueryDescriptor( queryName, query[i] );
+                Predicate<Composite> expression = createNamedQueryDescriptor( queryName, query[i] );
                 queries.put( queryName, expression );
             }
         }
@@ -73,7 +73,7 @@ public abstract class AbstractNamedQueryTest
 
     protected abstract String[] queryStrings();
 
-    protected abstract Specification<Composite> createNamedQueryDescriptor( String queryName, String queryString );
+    protected abstract Predicate<Composite> createNamedQueryDescriptor( String queryName, String queryString );
 
     @Test
     public void showNetwork()

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinder.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinder.java b/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinder.java
index b1a6883..7c9b979 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinder.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinder.java
@@ -20,6 +20,7 @@ package org.apache.zest.index.elasticsearch;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.function.Function;
+import java.util.function.Predicate;
 import org.elasticsearch.action.count.CountRequestBuilder;
 import org.elasticsearch.action.count.CountResponse;
 import org.elasticsearch.action.search.SearchRequestBuilder;
@@ -34,32 +35,31 @@ import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityReference;
 import org.apache.zest.api.injection.scope.This;
 import org.apache.zest.api.mixin.Mixins;
-import org.apache.zest.api.query.grammar.AndSpecification;
-import org.apache.zest.api.query.grammar.AssociationNotNullSpecification;
-import org.apache.zest.api.query.grammar.AssociationNullSpecification;
-import org.apache.zest.api.query.grammar.BinarySpecification;
-import org.apache.zest.api.query.grammar.ComparisonSpecification;
-import org.apache.zest.api.query.grammar.ContainsAllSpecification;
-import org.apache.zest.api.query.grammar.ContainsSpecification;
-import org.apache.zest.api.query.grammar.EqSpecification;
-import org.apache.zest.api.query.grammar.GeSpecification;
-import org.apache.zest.api.query.grammar.GtSpecification;
-import org.apache.zest.api.query.grammar.LeSpecification;
-import org.apache.zest.api.query.grammar.LtSpecification;
-import org.apache.zest.api.query.grammar.ManyAssociationContainsSpecification;
-import org.apache.zest.api.query.grammar.MatchesSpecification;
-import org.apache.zest.api.query.grammar.NamedAssociationContainsNameSpecification;
-import org.apache.zest.api.query.grammar.NamedAssociationContainsSpecification;
-import org.apache.zest.api.query.grammar.NeSpecification;
-import org.apache.zest.api.query.grammar.NotSpecification;
-import org.apache.zest.api.query.grammar.OrSpecification;
+import org.apache.zest.api.query.grammar.AndPredicate;
+import org.apache.zest.api.query.grammar.AssociationNotNullPredicate;
+import org.apache.zest.api.query.grammar.AssociationNullPredicate;
+import org.apache.zest.api.query.grammar.BinaryPredicate;
+import org.apache.zest.api.query.grammar.ComparisonPredicate;
+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.MatchesPredicate;
+import org.apache.zest.api.query.grammar.NamedAssociationContainsNamePredicate;
+import org.apache.zest.api.query.grammar.NamedAssociationContainsPredicate;
+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.PropertyNotNullSpecification;
-import org.apache.zest.api.query.grammar.PropertyNullSpecification;
+import org.apache.zest.api.query.grammar.PropertyNotNullPredicate;
+import org.apache.zest.api.query.grammar.PropertyNullPredicate;
 import org.apache.zest.api.query.grammar.QuerySpecification;
 import org.apache.zest.api.value.ValueComposite;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.elasticsearch.ElasticSearchFinderSupport.ComplexTypeSupport;
 import org.apache.zest.spi.query.EntityFinder;
 import org.apache.zest.spi.query.EntityFinderException;
@@ -93,7 +93,7 @@ public interface ElasticSearchFinder
 
         @Override
         public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                       Specification<Composite> whereClause,
+                                                       Predicate<Composite> whereClause,
                                                        OrderBy[] orderBySegments,
                                                        Integer firstResult, Integer maxResults,
                                                        Map<String, Object> variables )
@@ -146,7 +146,7 @@ public interface ElasticSearchFinder
 
         @Override
         public EntityReference findEntity( Class<?> resultType,
-                                           Specification<Composite> whereClause,
+                                           Predicate<Composite> whereClause,
                                            Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -175,7 +175,7 @@ public interface ElasticSearchFinder
 
         @Override
         public long countEntities( Class<?> resultType,
-                                   Specification<Composite> whereClause,
+                                   Predicate<Composite> whereClause,
                                    Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -202,7 +202,7 @@ public interface ElasticSearchFinder
         }
 
         private QueryBuilder processWhereSpecification( AndFilterBuilder filterBuilder,
-                                                        Specification<Composite> spec,
+                                                        Predicate<Composite> spec,
                                                         Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -221,76 +221,76 @@ public interface ElasticSearchFinder
         }
 
         private void processSpecification( FilterBuilder filterBuilder,
-                                           Specification<Composite> spec,
+                                           Predicate<Composite> spec,
                                            Map<String, Object> variables )
             throws EntityFinderException
         {
-            if( spec instanceof BinarySpecification )
+            if( spec instanceof BinaryPredicate )
             {
-                BinarySpecification binSpec = (BinarySpecification) spec;
+                BinaryPredicate binSpec = (BinaryPredicate) spec;
                 processBinarySpecification( filterBuilder, binSpec, variables );
             }
-            else if( spec instanceof NotSpecification )
+            else if( spec instanceof Notpredicate )
             {
-                NotSpecification notSpec = (NotSpecification) spec;
+                Notpredicate notSpec = (Notpredicate) spec;
                 processNotSpecification( filterBuilder, notSpec, variables );
             }
-            else if( spec instanceof ComparisonSpecification )
+            else if( spec instanceof ComparisonPredicate )
             {
-                ComparisonSpecification<?> compSpec = (ComparisonSpecification<?>) spec;
+                ComparisonPredicate<?> compSpec = (ComparisonPredicate<?>) spec;
                 processComparisonSpecification( filterBuilder, compSpec, variables );
             }
-            else if( spec instanceof ContainsAllSpecification )
+            else if( spec instanceof ContainsAllPredicate )
             {
-                ContainsAllSpecification<?> contAllSpec = (ContainsAllSpecification) spec;
+                ContainsAllPredicate<?> contAllSpec = (ContainsAllPredicate) spec;
                 processContainsAllSpecification( filterBuilder, contAllSpec, variables );
             }
-            else if( spec instanceof ContainsSpecification )
+            else if( spec instanceof ContainsPredicate )
             {
-                ContainsSpecification<?> contSpec = (ContainsSpecification) spec;
+                ContainsPredicate<?> contSpec = (ContainsPredicate) spec;
                 processContainsSpecification( filterBuilder, contSpec, variables );
             }
-            else if( spec instanceof MatchesSpecification )
+            else if( spec instanceof MatchesPredicate )
             {
-                MatchesSpecification matchSpec = (MatchesSpecification) spec;
+                MatchesPredicate matchSpec = (MatchesPredicate) spec;
                 processMatchesSpecification( filterBuilder, matchSpec, variables );
             }
-            else if( spec instanceof PropertyNotNullSpecification )
+            else if( spec instanceof PropertyNotNullPredicate )
             {
-                PropertyNotNullSpecification<?> propNotNullSpec = (PropertyNotNullSpecification) spec;
+                PropertyNotNullPredicate<?> propNotNullSpec = (PropertyNotNullPredicate) spec;
                 processPropertyNotNullSpecification( filterBuilder, propNotNullSpec );
             }
-            else if( spec instanceof PropertyNullSpecification )
+            else if( spec instanceof PropertyNullPredicate )
             {
-                PropertyNullSpecification<?> propNullSpec = (PropertyNullSpecification) spec;
+                PropertyNullPredicate<?> propNullSpec = (PropertyNullPredicate) spec;
                 processPropertyNullSpecification( filterBuilder, propNullSpec );
             }
-            else if( spec instanceof AssociationNotNullSpecification )
+            else if( spec instanceof AssociationNotNullPredicate )
             {
-                AssociationNotNullSpecification<?> assNotNullSpec = (AssociationNotNullSpecification) spec;
+                AssociationNotNullPredicate<?> assNotNullSpec = (AssociationNotNullPredicate) spec;
                 processAssociationNotNullSpecification( filterBuilder, assNotNullSpec );
             }
-            else if( spec instanceof AssociationNullSpecification )
+            else if( spec instanceof AssociationNullPredicate )
             {
-                AssociationNullSpecification<?> assNullSpec = (AssociationNullSpecification) spec;
+                AssociationNullPredicate<?> assNullSpec = (AssociationNullPredicate) spec;
                 processAssociationNullSpecification( filterBuilder, assNullSpec );
             }
-            else if( spec instanceof ManyAssociationContainsSpecification )
+            else if( spec instanceof ManyAssociationContainsPredicate )
             {
-                ManyAssociationContainsSpecification<?> manyAssContSpec = (ManyAssociationContainsSpecification) spec;
+                ManyAssociationContainsPredicate<?> manyAssContSpec = (ManyAssociationContainsPredicate) spec;
                 processManyAssociationContainsSpecification( filterBuilder, manyAssContSpec, variables );
             }
-            else if( spec instanceof NamedAssociationContainsSpecification )
+            else if( spec instanceof NamedAssociationContainsPredicate )
             {
 
-                NamedAssociationContainsSpecification<?> namedAssContSpec = (NamedAssociationContainsSpecification) spec;
+                NamedAssociationContainsPredicate<?> namedAssContSpec = (NamedAssociationContainsPredicate) spec;
                 processNamedAssociationContainsSpecification( filterBuilder, namedAssContSpec, variables );
 
             }
-            else if( spec instanceof NamedAssociationContainsNameSpecification )
+            else if( spec instanceof NamedAssociationContainsNamePredicate )
             {
 
-                NamedAssociationContainsNameSpecification<?> namedAssContNameSpec = (NamedAssociationContainsNameSpecification) spec;
+                NamedAssociationContainsNamePredicate<?> namedAssContNameSpec = (NamedAssociationContainsNamePredicate) spec;
                 processNamedAssociationContainsNameSpecification( filterBuilder, namedAssContNameSpec, variables );
 
             }
@@ -319,26 +319,26 @@ public interface ElasticSearchFinder
         }
 
         private void processBinarySpecification( FilterBuilder filterBuilder,
-                                                 BinarySpecification spec,
+                                                 BinaryPredicate spec,
                                                  Map<String, Object> variables )
             throws EntityFinderException
         {
             LOGGER.trace( "Processing BinarySpecification {}", spec );
-            Iterable<Specification<Composite>> operands = spec.operands();
+            Iterable<Predicate<Composite>> operands = spec.operands();
 
-            if( spec instanceof AndSpecification )
+            if( spec instanceof AndPredicate )
             {
                 AndFilterBuilder andFilterBuilder = new AndFilterBuilder();
-                for( Specification<Composite> operand : operands )
+                for( Predicate<Composite> operand : operands )
                 {
                     processSpecification( andFilterBuilder, operand, variables );
                 }
                 addFilter( andFilterBuilder, filterBuilder );
             }
-            else if( spec instanceof OrSpecification )
+            else if( spec instanceof OrPredicate )
             {
                 OrFilterBuilder orFilterBuilder = new OrFilterBuilder();
-                for( Specification<Composite> operand : operands )
+                for( Predicate<Composite> operand : operands )
                 {
                     processSpecification( orFilterBuilder, operand, variables );
                 }
@@ -352,7 +352,7 @@ public interface ElasticSearchFinder
         }
 
         private void processNotSpecification( FilterBuilder filterBuilder,
-                                              NotSpecification spec,
+                                              Notpredicate spec,
                                               Map<String, Object> variables )
             throws EntityFinderException
         {
@@ -363,7 +363,7 @@ public interface ElasticSearchFinder
         }
 
         private void processComparisonSpecification( FilterBuilder filterBuilder,
-                                                     ComparisonSpecification<?> spec,
+                                                     ComparisonPredicate<?> spec,
                                                      Map<String, Object> variables )
         {
             LOGGER.trace( "Processing ComparisonSpecification {}", spec );
@@ -385,29 +385,29 @@ public interface ElasticSearchFinder
                 // Query by simple property value
                 String name = spec.property().toString();
                 Object value = resolveVariable( spec.value(), variables );
-                if( spec instanceof EqSpecification )
+                if( spec instanceof EqPredicate )
                 {
                     addFilter( termFilter( name, value ), filterBuilder );
                 }
-                else if( spec instanceof NeSpecification )
+                else if( spec instanceof NePredicate )
                 {
                     addFilter( andFilter( existsFilter( name ),
                                           notFilter( termFilter( name, value ) ) ),
                                filterBuilder );
                 }
-                else if( spec instanceof GeSpecification )
+                else if( spec instanceof GePredicate )
                 {
                     addFilter( rangeFilter( name ).gte( value ), filterBuilder );
                 }
-                else if( spec instanceof GtSpecification )
+                else if( spec instanceof GtPredicate )
                 {
                     addFilter( rangeFilter( name ).gt( value ), filterBuilder );
                 }
-                else if( spec instanceof LeSpecification )
+                else if( spec instanceof LePredicate )
                 {
                     addFilter( rangeFilter( name ).lte( value ), filterBuilder );
                 }
-                else if( spec instanceof LtSpecification )
+                else if( spec instanceof LtPredicate )
                 {
                     addFilter( rangeFilter( name ).lt( value ), filterBuilder );
                 }
@@ -421,7 +421,7 @@ public interface ElasticSearchFinder
         }
 
         private void processContainsAllSpecification( FilterBuilder filterBuilder,
-                                                      ContainsAllSpecification<?> spec,
+                                                      ContainsAllPredicate<?> spec,
                                                       Map<String, Object> variables )
         {
             LOGGER.trace( "Processing ContainsAllSpecification {}", spec );
@@ -450,7 +450,7 @@ public interface ElasticSearchFinder
         }
 
         private void processContainsSpecification( FilterBuilder filterBuilder,
-                                                   ContainsSpecification<?> spec,
+                                                   ContainsPredicate<?> spec,
                                                    Map<String, Object> variables )
         {
             LOGGER.trace( "Processing ContainsSpecification {}", spec );
@@ -474,7 +474,7 @@ public interface ElasticSearchFinder
         }
 
         private void processMatchesSpecification( FilterBuilder filterBuilder,
-                                                  MatchesSpecification spec,
+                                                  MatchesPredicate spec,
                                                   Map<String, Object> variables )
         {
             LOGGER.trace( "Processing MatchesSpecification {}", spec );
@@ -484,35 +484,35 @@ public interface ElasticSearchFinder
         }
 
         private void processPropertyNotNullSpecification( FilterBuilder filterBuilder,
-                                                          PropertyNotNullSpecification<?> spec )
+                                                          PropertyNotNullPredicate<?> spec )
         {
             LOGGER.trace( "Processing PropertyNotNullSpecification {}", spec );
             addFilter( existsFilter( spec.property().toString() ), filterBuilder );
         }
 
         private void processPropertyNullSpecification( FilterBuilder filterBuilder,
-                                                       PropertyNullSpecification<?> spec )
+                                                       PropertyNullPredicate<?> spec )
         {
             LOGGER.trace( "Processing PropertyNullSpecification {}", spec );
             addFilter( missingFilter( spec.property().toString() ), filterBuilder );
         }
 
         private void processAssociationNotNullSpecification( FilterBuilder filterBuilder,
-                                                             AssociationNotNullSpecification<?> spec )
+                                                             AssociationNotNullPredicate<?> spec )
         {
             LOGGER.trace( "Processing AssociationNotNullSpecification {}", spec );
             addFilter( existsFilter( spec.association().toString() + ".identity" ), filterBuilder );
         }
 
         private void processAssociationNullSpecification( FilterBuilder filterBuilder,
-                                                          AssociationNullSpecification<?> spec )
+                                                          AssociationNullPredicate<?> spec )
         {
             LOGGER.trace( "Processing AssociationNullSpecification {}", spec );
             addFilter( missingFilter( spec.association().toString() + ".identity" ), filterBuilder );
         }
 
         private void processManyAssociationContainsSpecification( FilterBuilder filterBuilder,
-                                                                  ManyAssociationContainsSpecification<?> spec,
+                                                                  ManyAssociationContainsPredicate<?> spec,
                                                                   Map<String, Object> variables )
         {
             LOGGER.trace( "Processing ManyAssociationContainsSpecification {}", spec );
@@ -522,7 +522,7 @@ public interface ElasticSearchFinder
         }
 
         private void processNamedAssociationContainsSpecification( FilterBuilder filterBuilder,
-                                                                   NamedAssociationContainsSpecification<?> spec,
+                                                                   NamedAssociationContainsPredicate<?> spec,
                                                                    Map<String, Object> variables )
         {
             LOGGER.trace( "Processing NamedAssociationContainsSpecification {}", spec );
@@ -532,7 +532,7 @@ public interface ElasticSearchFinder
         }
 
         private void processNamedAssociationContainsNameSpecification( FilterBuilder filterBuilder,
-                                                                       NamedAssociationContainsNameSpecification<?> spec,
+                                                                       NamedAssociationContainsNamePredicate<?> spec,
                                                                        Map<String, Object> variables )
         {
             LOGGER.trace( "Processing NamedAssociationContainsNameSpecification {}", spec );

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinderSupport.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinderSupport.java b/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinderSupport.java
index 1682b49..629c09c 100644
--- a/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinderSupport.java
+++ b/extensions/indexing-elasticsearch/src/main/java/org/apache/zest/index/elasticsearch/ElasticSearchFinderSupport.java
@@ -19,9 +19,9 @@ package org.apache.zest.index.elasticsearch;
 
 import java.util.Map;
 import org.elasticsearch.index.query.FilterBuilder;
-import org.apache.zest.api.query.grammar.ComparisonSpecification;
-import org.apache.zest.api.query.grammar.ContainsAllSpecification;
-import org.apache.zest.api.query.grammar.ContainsSpecification;
+import org.apache.zest.api.query.grammar.ComparisonPredicate;
+import org.apache.zest.api.query.grammar.ContainsAllPredicate;
+import org.apache.zest.api.query.grammar.ContainsPredicate;
 import org.apache.zest.api.query.grammar.Variable;
 
 
@@ -50,11 +50,11 @@ import org.apache.zest.api.query.grammar.Variable;
     /* package */ static interface ComplexTypeSupport
     {
 
-        FilterBuilder comparison( ComparisonSpecification<?> spec, Map<String, Object> variables );
+        FilterBuilder comparison( ComparisonPredicate<?> spec, Map<String, Object> variables );
 
-        FilterBuilder contains( ContainsSpecification<?> spec, Map<String, Object> variables );
+        FilterBuilder contains( ContainsPredicate<?> spec, Map<String, Object> variables );
 
-        FilterBuilder containsAll( ContainsAllSpecification<?> spec, Map<String, Object> variables );
+        FilterBuilder containsAll( ContainsAllPredicate<?> spec, Map<String, Object> variables );
 
     }
 

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryParser.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryParser.java b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryParser.java
index 0082c13..e4afc8c 100644
--- a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryParser.java
+++ b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryParser.java
@@ -19,14 +19,14 @@
 package org.apache.zest.index.rdf.query;
 
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 
 public interface RdfQueryParser
 {
     String constructQuery( Class<?> resultType,
-                           Specification<Composite> whereClause,
+                           Predicate<Composite> whereClause,
                            OrderBy[] orderBySegments,
                            Integer firstResult,
                            Integer maxResults,

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryService.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryService.java b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryService.java
index 1e1f4aa..4b62213 100644
--- a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryService.java
+++ b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/RdfQueryService.java
@@ -18,6 +18,7 @@
 package org.apache.zest.index.rdf.query;
 
 import java.util.Map;
+import java.util.function.Predicate;
 import org.openrdf.query.QueryLanguage;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityReference;
@@ -27,7 +28,6 @@ import org.apache.zest.api.mixin.Mixins;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.api.query.grammar.QuerySpecification;
 import org.apache.zest.api.service.ServiceComposite;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.EntityFinder;
 import org.apache.zest.spi.query.EntityFinderException;
 
@@ -55,7 +55,7 @@ public interface RdfQueryService
 
         @Override
         public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                       Specification<Composite> whereClause,
+                                                       Predicate<Composite> whereClause,
                                                        OrderBy[] orderBySegments,
                                                        Integer firstResult,
                                                        Integer maxResults,
@@ -82,7 +82,7 @@ public interface RdfQueryService
         }
 
         @Override
-        public EntityReference findEntity( Class<?> resultType, Specification<Composite> whereClause, Map<String, Object> variables )
+        public EntityReference findEntity( Class<?> resultType, Predicate<Composite> whereClause, Map<String, Object> variables )
             throws EntityFinderException
         {
             final SingleQualifiedIdentityResultCallback singleCallback = new SingleQualifiedIdentityResultCallback();
@@ -102,7 +102,7 @@ public interface RdfQueryService
         }
 
         @Override
-        public long countEntities( Class<?> resultType, Specification<Composite> whereClause, Map<String, Object> variables )
+        public long countEntities( Class<?> resultType, Predicate<Composite> whereClause, Map<String, Object> variables )
             throws EntityFinderException
         {
             if (QuerySpecification.isQueryLanguage( "SERQL", whereClause ))

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/internal/RdfQueryParserImpl.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/internal/RdfQueryParserImpl.java b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/internal/RdfQueryParserImpl.java
index 2a4202f..f65d76b 100644
--- a/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/internal/RdfQueryParserImpl.java
+++ b/extensions/indexing-rdf/src/main/java/org/apache/zest/index/rdf/query/internal/RdfQueryParserImpl.java
@@ -27,35 +27,35 @@ import java.util.HashSet;
 import java.util.Map;
 import java.util.Set;
 import java.util.TimeZone;
+import java.util.function.Predicate;
 import org.apache.commons.lang.StringEscapeUtils;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityComposite;
-import org.apache.zest.api.query.grammar.AndSpecification;
-import org.apache.zest.api.query.grammar.AssociationNotNullSpecification;
-import org.apache.zest.api.query.grammar.AssociationNullSpecification;
-import org.apache.zest.api.query.grammar.ComparisonSpecification;
-import org.apache.zest.api.query.grammar.ContainsAllSpecification;
-import org.apache.zest.api.query.grammar.ContainsSpecification;
-import org.apache.zest.api.query.grammar.EqSpecification;
-import org.apache.zest.api.query.grammar.GeSpecification;
-import org.apache.zest.api.query.grammar.GtSpecification;
-import org.apache.zest.api.query.grammar.LeSpecification;
-import org.apache.zest.api.query.grammar.LtSpecification;
-import org.apache.zest.api.query.grammar.ManyAssociationContainsSpecification;
-import org.apache.zest.api.query.grammar.MatchesSpecification;
-import org.apache.zest.api.query.grammar.NeSpecification;
-import org.apache.zest.api.query.grammar.NotSpecification;
-import org.apache.zest.api.query.grammar.OrSpecification;
+import org.apache.zest.api.query.grammar.AndPredicate;
+import org.apache.zest.api.query.grammar.AssociationNotNullPredicate;
+import org.apache.zest.api.query.grammar.AssociationNullPredicate;
+import org.apache.zest.api.query.grammar.ComparisonPredicate;
+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.MatchesPredicate;
+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.PropertyNotNullSpecification;
-import org.apache.zest.api.query.grammar.PropertyNullSpecification;
+import org.apache.zest.api.query.grammar.PropertyNotNullPredicate;
+import org.apache.zest.api.query.grammar.PropertyNullPredicate;
 import org.apache.zest.api.query.grammar.QuerySpecification;
 import org.apache.zest.api.query.grammar.Variable;
 import org.apache.zest.api.value.ValueSerializer;
 import org.apache.zest.api.value.ValueSerializer.Options;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.rdf.query.RdfQueryParser;
 import org.apache.zest.spi.ZestSPI;
 import org.slf4j.LoggerFactory;
@@ -79,7 +79,7 @@ public class RdfQueryParserImpl
         }
     };
 
-    private static final Map<Class<? extends ComparisonSpecification>, String> OPERATORS;
+    private static final Map<Class<? extends ComparisonPredicate>, String> OPERATORS;
     private static final Set<Character> RESERVED_CHARS;
 
     private final Namespaces namespaces = new Namespaces();
@@ -91,12 +91,12 @@ public class RdfQueryParserImpl
     static
     {
         OPERATORS = new HashMap<>( 6 );
-        OPERATORS.put( EqSpecification.class, "=" );
-        OPERATORS.put( GeSpecification.class, ">=" );
-        OPERATORS.put( GtSpecification.class, ">" );
-        OPERATORS.put( LeSpecification.class, "<=" );
-        OPERATORS.put( LtSpecification.class, "<" );
-        OPERATORS.put( NeSpecification.class, "!=" );
+        OPERATORS.put( EqPredicate.class, "=" );
+        OPERATORS.put( GePredicate.class, ">=" );
+        OPERATORS.put( GtPredicate.class, ">" );
+        OPERATORS.put( LePredicate.class, "<=" );
+        OPERATORS.put( LtPredicate.class, "<" );
+        OPERATORS.put( NePredicate.class, "!=" );
 
         RESERVED_CHARS = new HashSet<>( Arrays.asList(
             '\"', '^', '.', '\\', '?', '*', '+', '{', '}', '(', ')', '|', '$', '[', ']'
@@ -111,7 +111,7 @@ public class RdfQueryParserImpl
 
     @Override
     public String constructQuery( final Class<?> resultType,
-                                  final Specification<Composite> specification,
+                                  final Predicate<Composite> specification,
                                   final OrderBy[] orderBySegments,
                                   final Integer firstResult,
                                   final Integer maxResults,
@@ -214,20 +214,20 @@ public class RdfQueryParserImpl
         return query.toString();
     }
 
-    private void processFilter( final Specification<Composite> expression, boolean allowInline, StringBuilder builder )
+    private void processFilter( final Predicate<Composite> expression, boolean allowInline, StringBuilder builder )
     {
         if( expression == null )
         {
             return;
         }
 
-        if( expression instanceof AndSpecification )
+        if( expression instanceof AndPredicate )
         {
-            final AndSpecification conjunction = (AndSpecification) expression;
+            final AndPredicate conjunction = (AndPredicate) expression;
 
             int start = builder.length();
             boolean first = true;
-            for( Specification<Composite> operand : conjunction.operands() )
+            for( Predicate<Composite> operand : conjunction.operands() )
             {
                 int size = builder.length();
                 processFilter( operand, allowInline, builder );
@@ -250,13 +250,13 @@ public class RdfQueryParserImpl
                 builder.append( ')' );
             }
         }
-        else if( expression instanceof OrSpecification )
+        else if( expression instanceof OrPredicate )
         {
-            final OrSpecification disjunction = (OrSpecification) expression;
+            final OrPredicate disjunction = (OrPredicate) expression;
 
             int start = builder.length();
             boolean first = true;
-            for( Specification<Composite> operand : disjunction.operands() )
+            for( Predicate<Composite> operand : disjunction.operands() )
             {
                 int size = builder.length();
                 processFilter( operand, false, builder );
@@ -279,47 +279,47 @@ public class RdfQueryParserImpl
                 builder.append( ')' );
             }
         }
-        else if( expression instanceof NotSpecification )
+        else if( expression instanceof Notpredicate )
         {
             builder.insert( 0, "(!" );
-            processFilter( ( (NotSpecification) expression ).operand(), false, builder );
+            processFilter( ( (Notpredicate) expression ).operand(), false, builder );
             builder.append( ")" );
         }
-        else if( expression instanceof ComparisonSpecification )
+        else if( expression instanceof ComparisonPredicate )
         {
             processComparisonPredicate( expression, allowInline, builder );
         }
-        else if( expression instanceof ContainsAllSpecification )
+        else if( expression instanceof ContainsAllPredicate )
         {
-            processContainsAllPredicate( (ContainsAllSpecification) expression, builder );
+            processContainsAllPredicate( (ContainsAllPredicate) expression, builder );
         }
-        else if( expression instanceof ContainsSpecification<?> )
+        else if( expression instanceof ContainsPredicate<?> )
         {
-            processContainsPredicate( (ContainsSpecification<?>) expression, builder );
+            processContainsPredicate( (ContainsPredicate<?>) expression, builder );
         }
-        else if( expression instanceof MatchesSpecification )
+        else if( expression instanceof MatchesPredicate )
         {
-            processMatchesPredicate( (MatchesSpecification) expression, builder );
+            processMatchesPredicate( (MatchesPredicate) expression, builder );
         }
-        else if( expression instanceof PropertyNotNullSpecification<?> )
+        else if( expression instanceof PropertyNotNullPredicate<?> )
         {
-            processNotNullPredicate( (PropertyNotNullSpecification) expression, builder );
+            processNotNullPredicate( (PropertyNotNullPredicate) expression, builder );
         }
-        else if( expression instanceof PropertyNullSpecification<?> )
+        else if( expression instanceof PropertyNullPredicate<?> )
         {
-            processNullPredicate( (PropertyNullSpecification) expression, builder );
+            processNullPredicate( (PropertyNullPredicate) expression, builder );
         }
-        else if( expression instanceof AssociationNotNullSpecification<?> )
+        else if( expression instanceof AssociationNotNullPredicate<?> )
         {
-            processNotNullPredicate( (AssociationNotNullSpecification) expression, builder );
+            processNotNullPredicate( (AssociationNotNullPredicate) expression, builder );
         }
-        else if( expression instanceof AssociationNullSpecification<?> )
+        else if( expression instanceof AssociationNullPredicate<?> )
         {
-            processNullPredicate( (AssociationNullSpecification) expression, builder );
+            processNullPredicate( (AssociationNullPredicate) expression, builder );
         }
-        else if( expression instanceof ManyAssociationContainsSpecification<?> )
+        else if( expression instanceof ManyAssociationContainsPredicate<?> )
         {
-            processManyAssociationContainsPredicate( (ManyAssociationContainsSpecification) expression, allowInline, builder );
+            processManyAssociationContainsPredicate( (ManyAssociationContainsPredicate) expression, allowInline, builder );
         }
         else
         {
@@ -378,7 +378,7 @@ public class RdfQueryParserImpl
         return builder.toString();
     }
 
-    private void processContainsAllPredicate( final ContainsAllSpecification<?> predicate, StringBuilder builder )
+    private void processContainsAllPredicate( final ContainsAllPredicate<?> predicate, StringBuilder builder )
     {
         Iterable<?> values = predicate.containedValues();
         String valueVariable = triples.addTriple( predicate.collectionProperty(), false ).value();
@@ -421,7 +421,7 @@ public class RdfQueryParserImpl
         }
     }
 
-    private void processContainsPredicate( final ContainsSpecification<?> predicate, StringBuilder builder )
+    private void processContainsPredicate( final ContainsPredicate<?> predicate, StringBuilder builder )
     {
         Object value = predicate.value();
         String valueVariable = triples.addTriple( predicate.collectionProperty(), false ).value();
@@ -431,26 +431,26 @@ public class RdfQueryParserImpl
         ) );
     }
 
-    private void processMatchesPredicate( final MatchesSpecification predicate, StringBuilder builder )
+    private void processMatchesPredicate( final MatchesPredicate predicate, StringBuilder builder )
     {
         String valueVariable = triples.addTriple( predicate.property(), false ).value();
         builder.append( format( "regex(%s,\"%s\")", valueVariable, predicate.regexp() ) );
     }
 
-    private void processComparisonPredicate( final Specification<Composite> predicate,
+    private void processComparisonPredicate( final Predicate<Composite> predicate,
                                              boolean allowInline,
                                              StringBuilder builder
     )
     {
-        if( predicate instanceof ComparisonSpecification )
+        if( predicate instanceof ComparisonPredicate )
         {
-            ComparisonSpecification<?> comparisonSpecification = (ComparisonSpecification<?>) predicate;
-            Triples.Triple triple = triples.addTriple( (PropertyFunction) comparisonSpecification.property(), false );
+            ComparisonPredicate<?> comparisonPredicate = (ComparisonPredicate<?>) predicate;
+            Triples.Triple triple = triples.addTriple( (PropertyFunction) comparisonPredicate.property(), false );
 
             // Don't use FILTER for equals-comparison. Do direct match instead
-            if( predicate instanceof EqSpecification && allowInline )
+            if( predicate instanceof EqPredicate && allowInline )
             {
-                triple.setValue( "\"" + toString( comparisonSpecification.value() ) + "\"" );
+                triple.setValue( "\"" + toString( comparisonPredicate.value() ) + "\"" );
             }
             else
             {
@@ -458,8 +458,8 @@ public class RdfQueryParserImpl
                 builder.append( String.format(
                     "(%s %s \"%s\")",
                     valueVariable,
-                    getOperator( comparisonSpecification.getClass() ),
-                    toString( comparisonSpecification.value() ) ) );
+                    getOperator( comparisonPredicate.getClass() ),
+                    toString( comparisonPredicate.value() ) ) );
             }
         }
         else
@@ -469,31 +469,31 @@ public class RdfQueryParserImpl
         }
     }
 
-    private void processNullPredicate( final PropertyNullSpecification<?> predicate, StringBuilder builder )
+    private void processNullPredicate( final PropertyNullPredicate<?> predicate, StringBuilder builder )
     {
         final String value = triples.addTriple( predicate.property(), true ).value();
         builder.append( format( "(! bound(%s))", value ) );
     }
 
-    private void processNotNullPredicate( final PropertyNotNullSpecification<?> predicate, StringBuilder builder )
+    private void processNotNullPredicate( final PropertyNotNullPredicate<?> predicate, StringBuilder builder )
     {
         final String value = triples.addTriple( predicate.property(), true ).value();
         builder.append( format( "(bound(%s))", value ) );
     }
 
-    private void processNullPredicate( final AssociationNullSpecification<?> predicate, StringBuilder builder )
+    private void processNullPredicate( final AssociationNullPredicate<?> predicate, StringBuilder builder )
     {
         final String value = triples.addTripleAssociation( predicate.association(), true ).value();
         builder.append( format( "(! bound(%s))", value ) );
     }
 
-    private void processNotNullPredicate( final AssociationNotNullSpecification<?> predicate, StringBuilder builder )
+    private void processNotNullPredicate( final AssociationNotNullPredicate<?> predicate, StringBuilder builder )
     {
         final String value = triples.addTripleAssociation( predicate.association(), true ).value();
         builder.append( format( "(bound(%s))", value ) );
     }
 
-    private void processManyAssociationContainsPredicate( ManyAssociationContainsSpecification<?> predicate,
+    private void processManyAssociationContainsPredicate( ManyAssociationContainsPredicate<?> predicate,
                                                           boolean allowInline, StringBuilder builder
     )
     {
@@ -537,7 +537,7 @@ public class RdfQueryParserImpl
         }
     }
 
-    private String getOperator( final Class<? extends ComparisonSpecification> predicateClass )
+    private String getOperator( final Class<? extends ComparisonPredicate> predicateClass )
     {
         String operator = OPERATORS.get( predicateClass );
         if( operator == null )

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-rdf/src/test/java/org/apache/zest/index/rdf/RdfNamedQueryTest.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-rdf/src/test/java/org/apache/zest/index/rdf/RdfNamedQueryTest.java b/extensions/indexing-rdf/src/test/java/org/apache/zest/index/rdf/RdfNamedQueryTest.java
index 1e30994..526f8b2 100644
--- a/extensions/indexing-rdf/src/test/java/org/apache/zest/index/rdf/RdfNamedQueryTest.java
+++ b/extensions/indexing-rdf/src/test/java/org/apache/zest/index/rdf/RdfNamedQueryTest.java
@@ -17,11 +17,11 @@
  */
 package org.apache.zest.index.rdf;
 
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.value.ValueSerialization;
 import org.apache.zest.bootstrap.AssemblyException;
 import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.rdf.query.RdfQueryParserFactory;
 import org.apache.zest.index.rdf.query.SesameExpressions;
 import org.apache.zest.library.rdf.entity.EntityStateSerializer;
@@ -39,7 +39,7 @@ public class RdfNamedQueryTest extends AbstractNamedQueryTest
     }
 
     @Override
-    protected Specification<Composite> createNamedQueryDescriptor( String queryName, String queryString )
+    protected Predicate<Composite> createNamedQueryDescriptor( String queryName, String queryString )
     {
         return SesameExpressions.sparql( queryString );
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-solr/src/main/java/org/apache/zest/index/solr/internal/SolrEntityQueryMixin.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-solr/src/main/java/org/apache/zest/index/solr/internal/SolrEntityQueryMixin.java b/extensions/indexing-solr/src/main/java/org/apache/zest/index/solr/internal/SolrEntityQueryMixin.java
index 1631a10..9d0355d 100644
--- a/extensions/indexing-solr/src/main/java/org/apache/zest/index/solr/internal/SolrEntityQueryMixin.java
+++ b/extensions/indexing-solr/src/main/java/org/apache/zest/index/solr/internal/SolrEntityQueryMixin.java
@@ -19,6 +19,7 @@ import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.solr.client.solrj.SolrServer;
 import org.apache.solr.client.solrj.SolrServerException;
 import org.apache.solr.client.solrj.response.QueryResponse;
@@ -33,7 +34,6 @@ import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.query.grammar.OrderBy;
 import org.apache.zest.api.query.grammar.QuerySpecification;
 import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.solr.EmbeddedSolrService;
 import org.apache.zest.index.solr.SolrSearch;
 import org.apache.zest.spi.query.EntityFinder;
@@ -53,7 +53,7 @@ public class SolrEntityQueryMixin
     private Logger logger = LoggerFactory.getLogger( SolrEntityQueryMixin.class );
 
     @Override
-    public Iterable<EntityReference> findEntities( Class<?> resultType, @Optional Specification<Composite> whereClause, @Optional OrderBy[] orderBySegments, @Optional Integer firstResult, @Optional Integer maxResults, Map<String, Object> variables ) throws EntityFinderException
+    public Iterable<EntityReference> findEntities( Class<?> resultType, @Optional Predicate<Composite> whereClause, @Optional OrderBy[] orderBySegments, @Optional Integer firstResult, @Optional Integer maxResults, Map<String, Object> variables ) throws EntityFinderException
     {
         try
         {
@@ -99,7 +99,7 @@ public class SolrEntityQueryMixin
     }
 
     @Override
-    public EntityReference findEntity( Class<?> resultType, @Optional Specification<Composite> whereClause, Map<String, Object> variables ) throws EntityFinderException
+    public EntityReference findEntity( Class<?> resultType, @Optional Predicate<Composite> whereClause, Map<String, Object> variables ) throws EntityFinderException
     {
         Iterator<EntityReference> iter = findEntities( resultType, whereClause, null, 0, 1, variables ).iterator();
 
@@ -110,7 +110,7 @@ public class SolrEntityQueryMixin
     }
 
     @Override
-    public long countEntities( Class<?> resultType, @Optional Specification<Composite> whereClause, Map<String, Object> variables ) throws EntityFinderException
+    public long countEntities( Class<?> resultType, @Optional Predicate<Composite> whereClause, Map<String, Object> variables ) throws EntityFinderException
     {
         return Iterables.count( findEntities( resultType, whereClause, null, 0, 1, variables ) );
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrNamedQueryTest.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrNamedQueryTest.java b/extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrNamedQueryTest.java
index 87fecb2..56e6cc5 100644
--- a/extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrNamedQueryTest.java
+++ b/extensions/indexing-solr/src/test/java/org/apache/zest/index/solr/SolrNamedQueryTest.java
@@ -18,12 +18,12 @@
 package org.apache.zest.index.solr;
 
 import java.io.File;
+import java.util.function.Predicate;
 import org.junit.Ignore;
 import org.junit.Rule;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.bootstrap.AssemblyException;
 import org.apache.zest.bootstrap.ModuleAssembly;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.library.fileconfig.FileConfigurationOverride;
 import org.apache.zest.library.fileconfig.FileConfigurationService;
 import org.apache.zest.test.indexing.AbstractNamedQueryTest;
@@ -59,7 +59,7 @@ public class SolrNamedQueryTest
     }
 
     @Override
-    protected Specification<Composite> createNamedQueryDescriptor( String queryName, String queryString )
+    protected Predicate<Composite> createNamedQueryDescriptor( String queryName, String queryString )
     {
         return SolrExpressions.search( queryString );
     }

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
index 0a650b5..51061a7 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/internal/SQLEntityFinder.java
@@ -25,13 +25,13 @@ import java.sql.SQLException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import javax.sql.DataSource;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.entity.EntityReference;
 import org.apache.zest.api.injection.scope.Service;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.sql.support.api.SQLQuerying;
 import org.apache.zest.library.sql.common.SQLUtil;
 import org.apache.zest.spi.query.EntityFinder;
@@ -58,7 +58,7 @@ public class SQLEntityFinder
     }
 
     @Override
-    public long countEntities( Class<?> resultType, @Optional Specification<Composite> whereClause, Map<String, Object> variables )
+    public long countEntities( Class<?> resultType, @Optional Predicate<Composite> whereClause, Map<String, Object> variables )
         throws EntityFinderException
     {
         final List<Object> values = new ArrayList<>();
@@ -93,7 +93,7 @@ public class SQLEntityFinder
 
     @Override
     public Iterable<EntityReference> findEntities( Class<?> resultType,
-                                                   @Optional Specification<Composite> whereClause,
+                                                   @Optional Predicate<Composite> whereClause,
                                                    @Optional OrderBy[] orderBySegments,
                                                    @Optional final Integer firstResult,
                                                    @Optional final Integer maxResults,
@@ -161,7 +161,7 @@ public class SQLEntityFinder
 
     @Override
     public EntityReference findEntity( Class<?> resultType,
-                                       @Optional Specification<Composite> whereClause,
+                                       @Optional Predicate<Composite> whereClause,
                                        Map<String, Object> variables )
         throws EntityFinderException
     {

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/api/SQLQuerying.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/api/SQLQuerying.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/api/SQLQuerying.java
index b0dde14..774bf88 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/api/SQLQuerying.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/api/SQLQuerying.java
@@ -20,10 +20,10 @@ package org.apache.zest.index.sql.support.api;
 import java.sql.PreparedStatement;
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.common.Optional;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.spi.query.EntityFinderException;
 
 /**
@@ -53,7 +53,7 @@ public interface SQLQuerying
      */
     public String constructQuery( //
         Class<?> resultType, //
-        @Optional Specification<Composite> whereClause, //
+        @Optional Predicate<Composite> whereClause, //
         @Optional OrderBy[] orderBySegments, //
         @Optional Integer firstResult, //
         @Optional Integer maxResults, //

http://git-wip-us.apache.org/repos/asf/zest-java/blob/b659ba67/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLQuerying.java
----------------------------------------------------------------------
diff --git a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLQuerying.java b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLQuerying.java
index 5ef4ba4..9996389 100644
--- a/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLQuerying.java
+++ b/extensions/indexing-sql/src/main/java/org/apache/zest/index/sql/support/postgresql/PostgreSQLQuerying.java
@@ -20,9 +20,9 @@ package org.apache.zest.index.sql.support.postgresql;
 
 import java.util.List;
 import java.util.Map;
+import java.util.function.Predicate;
 import org.apache.zest.api.composite.Composite;
 import org.apache.zest.api.query.grammar.OrderBy;
-import org.apache.zest.functional.Specification;
 import org.apache.zest.index.sql.support.skeletons.AbstractSQLQuerying;
 import org.sql.generation.api.grammar.builders.query.QuerySpecificationBuilder;
 import org.sql.generation.api.grammar.query.QueryExpression;
@@ -36,7 +36,7 @@ public class PostgreSQLQuerying
     protected QueryExpression finalizeQuery(
             SQLVendor sqlVendor, QuerySpecificationBuilder specBuilder,
             Class<?> resultType,
-            Specification<Composite> whereClause,
+            Predicate<Composite> whereClause,
             OrderBy[] orderBySegments,
             Integer firstResult,
             Integer maxResults,