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:22 UTC
[19/24] zest-java git commit: ZEST-118;
Massive update of removing the Iterable<> use for type manipulation
in the runtime internals and all public APIs of that.
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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 db52048..975e7e2 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
@@ -22,37 +22,32 @@ package org.apache.zest.runtime.structure;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.WildcardType;
-import java.util.ArrayList;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
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.Specifications;
+import org.apache.zest.runtime.legacy.Specifications;
import org.apache.zest.runtime.composite.TransientModel;
import org.apache.zest.runtime.entity.EntityModel;
import org.apache.zest.runtime.object.ObjectModel;
import org.apache.zest.runtime.value.ValueModel;
import org.apache.zest.spi.module.ModelModule;
+import static java.util.stream.Stream.concat;
import static org.apache.zest.api.common.Visibility.application;
import static org.apache.zest.api.common.Visibility.layer;
import static org.apache.zest.api.common.Visibility.module;
import static org.apache.zest.api.util.Classes.RAW_CLASS;
import static org.apache.zest.api.util.Classes.interfacesOf;
import static org.apache.zest.functional.Iterables.cast;
-import static org.apache.zest.functional.Iterables.filter;
import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.flatten;
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Iterables.toList;
-import static org.apache.zest.functional.Iterables.unique;
/**
* Central place for Composite Type lookups.
@@ -66,7 +61,7 @@ public class TypeLookup
private final Map<Class<?>, ModelModule<ObjectModel>> objectModels;
private final Map<Class<?>, ModelModule<TransientModel>> transientModels;
private final Map<Class<?>, ModelModule<ValueModel>> valueModels;
- private final Map<Class<?>, Iterable<ModelModule<EntityModel>>> allEntityModels;
+ private final Map<Class<?>, List<ModelModule<EntityModel>>> allEntityModels;
private final Map<Class<?>, ModelModule<EntityModel>> unambiguousEntityModels;
private final Map<Type, ServiceReference<?>> serviceReferences;
private final Map<Type, Iterable<ServiceReference<?>>> servicesReferences;
@@ -114,7 +109,7 @@ public class TypeLookup
if( model == null )
{
// Unambiguously and lazily resolve ObjectModel
- Iterable<ModelModule<ObjectModel>> flatten = flatten(
+ Stream<ModelModule<? extends ModelDescriptor>> models = concat(
ambiguousTypeCheck( type,
findModels( new ExactTypeLookupSpecification( type ),
moduleInstance.visibleObjects( module ),
@@ -123,16 +118,19 @@ public class TypeLookup
moduleInstance.layerInstance()
.usedLayersInstance()
.visibleObjects() ) ),
+
ambiguousTypeCheck( type,
findModels( new AssignableTypeLookupSpecification( type ),
moduleInstance.visibleObjects( module ),
- moduleInstance.layerInstance().visibleObjects( layer ),
- moduleInstance.layerInstance().visibleObjects( application ),
+ moduleInstance.layerInstance()
+ .visibleObjects( layer ),
+ moduleInstance.layerInstance()
+ .visibleObjects( application ),
moduleInstance.layerInstance()
.usedLayersInstance()
.visibleObjects() ) ) );
- model = first( flatten );
+ model = (ModelModule<ObjectModel>) models.findFirst().orElse( null );
if( model != null )
{
@@ -165,34 +163,35 @@ public class TypeLookup
if( model == null )
{
- // Unambiguously and lazily resolve TransientModel
- Iterable<ModelModule<TransientModel>> allModels = flatten(
+ // Unambiguously and lazily resolve ObjectModel
+ Stream<ModelModule<? extends ModelDescriptor>> models = concat(
ambiguousTypeCheck( type,
findModels( new ExactTypeLookupSpecification( type ),
moduleInstance.visibleTransients( module ),
moduleInstance.layerInstance().visibleTransients( layer ),
moduleInstance.layerInstance().visibleTransients( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleTransients()
- )
- ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleTransients() ) ),
ambiguousTypeCheck( type,
findModels( new AssignableTypeLookupSpecification( type ),
moduleInstance.visibleTransients( module ),
- moduleInstance.layerInstance().visibleTransients( layer ),
- moduleInstance.layerInstance().visibleTransients( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleTransients()
- )
- )
- );
- model = first( allModels );
+ moduleInstance.layerInstance()
+ .visibleTransients( layer ),
+ moduleInstance.layerInstance()
+ .visibleTransients( application ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleTransients() ) ) );
+
+ model = (ModelModule<TransientModel>) models.findFirst().orElse( null );
if( model != null )
{
transientModels.put( type, model );
}
}
-
return model;
}
@@ -218,25 +217,29 @@ public class TypeLookup
if( model == null )
{
- // Unambiguously and lazily resolve ValueModel
- Iterable<ModelModule<ValueModel>> flatten = flatten(
+ // Unambiguously and lazily resolve ObjectModel
+ Stream<ModelModule<? extends ModelDescriptor>> models = concat(
ambiguousTypeCheck( type,
findModels( new ExactTypeLookupSpecification( type ),
moduleInstance.visibleValues( module ),
moduleInstance.layerInstance().visibleValues( layer ),
moduleInstance.layerInstance().visibleValues( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleValues() ) ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleValues() ) ),
+
ambiguousTypeCheck( type,
findModels( new AssignableTypeLookupSpecification( type ),
moduleInstance.visibleValues( module ),
- moduleInstance.layerInstance().visibleValues( layer ),
- moduleInstance.layerInstance().visibleValues( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleValues()
- )
- )
- );
+ moduleInstance.layerInstance()
+ .visibleValues( layer ),
+ moduleInstance.layerInstance()
+ .visibleValues( application ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleValues() ) ) );
- model = first( flatten );
+ model = (ModelModule<ValueModel>) models.findFirst().orElse( null );
if( model != null )
{
@@ -272,8 +275,8 @@ public class TypeLookup
if( model == null )
{
- // Unambiguously and lazily resolve EntityModels
- Iterable<ModelModule<EntityModel>> allModels = flatten(
+ // Unambiguously and lazily resolve ObjectModel
+ Stream<ModelModule<? extends ModelDescriptor>> models = concat(
ambiguousTypeCheck( type,
findModels( new ExactTypeLookupSpecification( type ),
moduleInstance.visibleEntities( module ),
@@ -282,17 +285,19 @@ public class TypeLookup
moduleInstance.layerInstance()
.usedLayersInstance()
.visibleEntities() ) ),
+
ambiguousTypeCheck( type,
findModels( new AssignableTypeLookupSpecification( type ),
moduleInstance.visibleEntities( module ),
- moduleInstance.layerInstance().visibleEntities( layer ),
- moduleInstance.layerInstance().visibleEntities( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleEntities()
- )
- )
- );
+ moduleInstance.layerInstance()
+ .visibleEntities( layer ),
+ moduleInstance.layerInstance()
+ .visibleEntities( application ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleEntities() ) ) );
- model = first( allModels );
+ model = (ModelModule<EntityModel>) models.findFirst().orElse( null );
if( model != null )
{
@@ -325,35 +330,33 @@ public class TypeLookup
*
* @return All matching Entity Models
*/
- @SuppressWarnings( { "raw", "unchecked" } )
/* package */ Iterable<ModelModule<EntityModel>> lookupEntityModels( final Class type )
{
- Iterable<ModelModule<EntityModel>> models = allEntityModels.get( type );
- if( models == null )
+ List<ModelModule<EntityModel>> result = allEntityModels.get( type );
+ if( result == null )
{
- // Ambiguously and lasily resolve EntityModels
- Iterable<ModelModule<EntityModel>> matchingEntityModels = flatten(
+ // Unambiguously and lazily resolve ObjectModel
+ Stream<ModelModule<? extends ModelDescriptor>> models = concat(
ambiguousTypeCheck( type,
findModels( new ExactTypeLookupSpecification( type ),
moduleInstance.visibleEntities( module ),
moduleInstance.layerInstance().visibleEntities( layer ),
moduleInstance.layerInstance().visibleEntities( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleEntities()
- )
- ),
+ moduleInstance.layerInstance()
+ .usedLayersInstance()
+ .visibleEntities() ) ),
+
findModels( new AssignableTypeLookupSpecification( type ),
moduleInstance.visibleEntities( module ),
moduleInstance.layerInstance().visibleEntities( layer ),
moduleInstance.layerInstance().visibleEntities( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ) );
+ moduleInstance.layerInstance().usedLayersInstance().visibleEntities() )
+ ).distinct();
- // Don't return the same EntityModel multiple times
- matchingEntityModels = unique( matchingEntityModels );
-
- models = toList( matchingEntityModels );
- allEntityModels.put( type, models );
+ result = models.map( m -> (ModelModule<EntityModel>) m ).collect( Collectors.toList() );
+ allEntityModels.put( type, result );
}
- return models;
+ return result;
}
/**
@@ -418,7 +421,7 @@ public class TypeLookup
if( serviceRefs == null )
{
// Lazily resolve ServicesReferences
- Iterable<ServiceReference<?>> matchingServices = flatten(
+ Stream<ServiceReference<?>> matchingServices = concat(
findServiceReferences( new ExactTypeLookupSpecification( serviceType ),
moduleInstance.visibleServices( module ),
moduleInstance.layerInstance().visibleServices( layer ),
@@ -428,122 +431,88 @@ public class TypeLookup
moduleInstance.visibleServices( module ),
moduleInstance.layerInstance().visibleServices( layer ),
moduleInstance.layerInstance().visibleServices( application ),
- moduleInstance.layerInstance().usedLayersInstance().visibleServices() ) );
-
- // Don't return the same ServiceReference multiple times
- matchingServices = unique( matchingServices );
-
- serviceRefs = toList( matchingServices );
+ moduleInstance.layerInstance().usedLayersInstance().visibleServices() )
+ ).distinct();
+ serviceRefs = matchingServices.collect( Collectors.toList() );
servicesReferences.put( serviceType, serviceRefs );
}
return cast( serviceRefs );
}
- @SuppressWarnings( { "raw", "unchecked" } )
- private static <T extends ModelDescriptor> Iterable<ModelModule<T>> findModels( Predicate<Iterable<Class<?>>> specification,
- Iterable<ModelModule<T>>... models
+ @SafeVarargs
+ private static Stream<ModelModule<? extends ModelDescriptor>> findModels( Predicate<Stream<Class<?>>> specification,
+ Stream<ModelModule<? extends ModelDescriptor>>... models
)
{
- Predicate<ModelModule<T>> spec = Specifications.translate( new ModelModuleTypesFunction(), specification );
- Iterable<ModelModule<T>> flattened = flattenIterables( iterable( models ) );
- return filter( spec, flattened );
+ Function<ModelModule<? extends ModelDescriptor>, Stream<Class<?>>> function = new ModelModuleTypesFunction();
+ Predicate<ModelModule<? extends ModelDescriptor>> spec = Specifications.translate( function, specification );
+ Stream<ModelModule<? extends ModelDescriptor>> stream = Stream.of( models ).flatMap( flatten -> flatten );
+ return stream.filter( spec );
}
- @SuppressWarnings( { "raw", "unchecked" } )
- private static Iterable<ServiceReference<?>> findServiceReferences( Predicate<Iterable<Class<?>>> specification,
- Iterable<ServiceReference<?>>... references
+ @SafeVarargs
+ private static Stream<ServiceReference<?>> findServiceReferences( Predicate<Stream<Class<?>>> specification,
+ Stream<ServiceReference<?>>... references
)
{
Predicate<ServiceReference<?>> spec = Specifications.translate( new ServiceReferenceTypesFunction(), specification );
- Iterable<ServiceReference<?>> flattened = flattenIterables( iterable( references ) );
- return filter( spec, flattened );
+ return Stream.of( references ).flatMap( flatten -> flatten ).filter( spec );
}
/**
* Check if the list of models contains several ones with the same visibility. If yes, then
* throw an AmbiguousTypeException
*/
- @SuppressWarnings( "raw" )
- private static <T extends ModelDescriptor> Iterable<ModelModule<T>> ambiguousTypeCheck( final Class type,
- final Iterable<ModelModule<T>> models
+ private static Stream<ModelModule<? extends ModelDescriptor>> ambiguousTypeCheck( final Class<?> type,
+ Stream<ModelModule<? extends ModelDescriptor>> models
)
{
- return new Iterable<ModelModule<T>>()
- {
-
- @Override
- public Iterator<ModelModule<T>> iterator()
- {
- ModelModule<T> current = null;
- List<ModelModule<T>> ambiguous = null;
- List<ModelModule<T>> results = new ArrayList<>();
- for( ModelModule<T> model : models )
- {
- if( current != null && !model.equals( current ) )
- {
- if( model.model().visibility() == current.model().visibility() )
- {
- if( ambiguous == null )
- {
- ambiguous = new ArrayList<>();
- }
- ambiguous.add( model );
- }
- }
- else
- {
- current = model;
- }
- results.add( model );
- }
- if( ambiguous != null )
- {
- // Check if we had any ambiguities
- ambiguous.add( current );
- throw new AmbiguousTypeException( "More than one type matches " + type.getName() + ":" + ambiguous );
- }
- // Ambiguity check done, and no ambiguities found. Return results
- return results.iterator();
- }
- };
+ // TODO: Figure out why AmbiguityFinder doesn't implement Function<ModelModule<T>, ModelModule<T>>, when it clearly says it does. Absurd.
+ Function<ModelModule<? extends ModelDescriptor>, ModelModule<? extends ModelDescriptor>> ambiguityFinder = new AmbiguityFinder( type );
+ return models.map( ambiguityFinder );
}
private static class ModelModuleTypesFunction<T extends ModelDescriptor>
- implements Function<ModelModule<T>, Iterable<Class<?>>>
+ implements Function<ModelModule<T>, Stream<Class<?>>>
{
@Override
- public Iterable<Class<?>> apply( ModelModule<T> modelModule )
+ public Stream<Class<?>> apply( ModelModule<T> modelModule )
{
return modelModule.model().types();
}
}
private static class ServiceReferenceTypesFunction
- implements Function<ServiceReference<?>, Iterable<Class<?>>>
+ implements Function<ServiceReference<?>, Stream<Class<?>>>
{
@Override
- public Iterable<Class<?>> apply( ServiceReference<?> serviceReference )
+ public Stream<Class<?>> apply( ServiceReference<?> serviceReference )
{
return serviceReference.types();
}
}
- private static abstract class AbstractTypeLookupSpecification
- implements Predicate<Iterable<Class<?>>>
+ private static final class ExactTypeLookupSpecification
+ implements Predicate<Stream<Class<?>>>
{
protected final Type lookedUpType;
- private AbstractTypeLookupSpecification( Type lookedUpType )
+ private ExactTypeLookupSpecification( Type lookedUpType )
{
this.lookedUpType = lookedUpType;
}
+ protected boolean checkClassMatch( Class<?> candidate, Class<?> lookedUpType )
+ {
+ return candidate.equals( lookedUpType );
+ }
+
@Override
- public final boolean test( Iterable<Class<?>> types )
+ public final boolean test( Stream<Class<?>> types )
{
if( lookedUpType instanceof Class )
{
@@ -562,15 +531,7 @@ public class TypeLookup
return false;
}
// Then check Bar
- for( Type intf : interfacesOf( types ) )
- {
- if( intf.equals( lookedUpType ) )
- {
- // All parameters are the same - ok!
- return true;
- }
- }
- return false;
+ return interfacesOf( types ).anyMatch( intf -> intf.equals( lookedUpType ) );
}
else if( lookedUpType instanceof WildcardType )
{
@@ -580,50 +541,90 @@ public class TypeLookup
}
}
- private boolean checkClassMatch( Iterable<Class<?>> candidates, Class<?> lookedUpType )
+ private boolean checkClassMatch( Stream<Class<?>> candidates, Class<?> lookedUpType )
{
- for( Class<?> candidate : candidates )
- {
- if( checkClassMatch( candidate, lookedUpType ) )
- {
- return true;
- }
- }
- return false;
+ return candidates.anyMatch( candidate -> checkClassMatch( candidate, lookedUpType ) );
}
-
- protected abstract boolean checkClassMatch( Class<?> candidate, Class<?> lookedUpType );
}
- private static final class ExactTypeLookupSpecification
- extends AbstractTypeLookupSpecification
+ private static final class AssignableTypeLookupSpecification
+ implements Predicate<Stream<Class<?>>>
{
- private ExactTypeLookupSpecification( Type lookedupType )
+ protected final Type lookedUpType;
+
+ private AssignableTypeLookupSpecification( Type lookedUpType )
{
- super( lookedupType );
+ this.lookedUpType = lookedUpType;
}
- @Override
protected boolean checkClassMatch( Class<?> candidate, Class<?> lookedUpType )
{
- return candidate.equals( lookedUpType );
+ return !candidate.equals( lookedUpType ) && lookedUpType.isAssignableFrom( candidate );
+ }
+
+ @Override
+ public final boolean test( Stream<Class<?>> types )
+ {
+ if( lookedUpType instanceof Class )
+ {
+ // Straight class assignability check
+ return checkClassMatch( types, (Class) lookedUpType );
+ }
+ else
+ {
+ if( lookedUpType instanceof ParameterizedType )
+ {
+ // Foo<Bar> check
+ // First check Foo
+ ParameterizedType parameterizedType = (ParameterizedType) lookedUpType;
+ if( !checkClassMatch( types, (Class) parameterizedType.getRawType() ) )
+ {
+ return false;
+ }
+ // Then check Bar
+ interfacesOf( types ).anyMatch( intf -> intf.equals( lookedUpType ) );
+ }
+ else if( lookedUpType instanceof WildcardType )
+ {
+ return true;
+ }
+ return false;
+ }
+ }
+
+ private boolean checkClassMatch( Stream<Class<?>> candidates, Class<?> lookedUpType )
+ {
+ return candidates.anyMatch( candidate -> checkClassMatch( candidate, lookedUpType ) );
}
}
- private static final class AssignableTypeLookupSpecification
- extends AbstractTypeLookupSpecification
+ private static class AmbiguityFinder<T extends ModelDescriptor>
+ implements Function<ModelModule<T>, ModelModule<T>>
{
+ private ModelModule<T> current = null;
+ private final Class<?> type;
- private AssignableTypeLookupSpecification( Type lookedupType )
+ private AmbiguityFinder( Class<?> type )
{
- super( lookedupType );
+ this.type = type;
}
@Override
- protected boolean checkClassMatch( Class<?> candidate, Class<?> lookedUpType )
+ public ModelModule<T> apply( ModelModule<T> model )
{
- return !candidate.equals( lookedUpType ) && lookedUpType.isAssignableFrom( candidate );
+ if( current != null && !model.equals( current ) )
+ {
+ if( model.model().visibility() == current.model().visibility() )
+ {
+ throw new AmbiguousTypeException( "More than one type matches " + type.getName() + ": " + current + ", " + model + "]" );
+ }
+ }
+ else
+ {
+ current = model;
+ }
+ return current;
}
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/UsedLayersInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/UsedLayersInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/UsedLayersInstance.java
index 22f2996..3ebe0d8 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/UsedLayersInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/UsedLayersInstance.java
@@ -15,8 +15,9 @@
package org.apache.zest.runtime.structure;
import java.util.List;
-import java.util.function.Function;
+import java.util.stream.Stream;
import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.composite.ModelDescriptor;
import org.apache.zest.api.composite.TransientDescriptor;
import org.apache.zest.api.entity.EntityDescriptor;
import org.apache.zest.api.object.ObjectDescriptor;
@@ -24,8 +25,6 @@ import org.apache.zest.api.service.ServiceReference;
import org.apache.zest.api.value.ValueDescriptor;
import org.apache.zest.spi.module.ModelModule;
-import static org.apache.zest.functional.Iterables.*;
-
/**
* JAVADOC
*/
@@ -38,63 +37,33 @@ public final class UsedLayersInstance
this.usedLayerInstances = usedLayerInstances;
}
- /* package */ Iterable<ModelModule<ObjectDescriptor>> visibleObjects()
+ /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleObjects()
{
- return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ObjectDescriptor>>>()
- {
- @Override
- public Iterable<ModelModule<ObjectDescriptor>> apply( LayerInstance layerInstance )
- {
- return layerInstance.visibleObjects( Visibility.application );
- }
- }, usedLayerInstances ) );
+ return usedLayerInstances.stream()
+ .flatMap( layerInstance -> layerInstance.visibleObjects( Visibility.application ) );
}
- /* package */ Iterable<ModelModule<TransientDescriptor>> visibleTransients()
+ /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleTransients()
{
- return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<TransientDescriptor>>>()
- {
- @Override
- public Iterable<ModelModule<TransientDescriptor>> apply( LayerInstance layerInstance )
- {
- return layerInstance.visibleTransients( Visibility.application );
- }
- }, usedLayerInstances ) );
+ return usedLayerInstances.stream()
+ .flatMap( layerInstance -> layerInstance.visibleTransients( Visibility.application ) );
}
- /* package */ Iterable<ModelModule<EntityDescriptor>> visibleEntities()
+ /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleEntities()
{
- return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<EntityDescriptor>>>()
- {
- @Override
- public Iterable<ModelModule<EntityDescriptor>> apply( LayerInstance layerInstance )
- {
- return layerInstance.visibleEntities( Visibility.application );
- }
- }, usedLayerInstances ) );
+ return usedLayerInstances.stream()
+ .flatMap( layerInstance -> layerInstance.visibleEntities( Visibility.application ) );
}
- /* package */ Iterable<ModelModule<ValueDescriptor>> visibleValues()
+ /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleValues()
{
- return flattenIterables( map( new Function<LayerInstance, Iterable<ModelModule<ValueDescriptor>>>()
- {
- @Override
- public Iterable<ModelModule<ValueDescriptor>> apply( LayerInstance layerInstance )
- {
- return layerInstance.visibleValues( Visibility.application );
- }
- }, usedLayerInstances ) );
+ return usedLayerInstances.stream()
+ .flatMap( layerInstance -> layerInstance.visibleValues( Visibility.application ) );
}
- /* package */ Iterable<ServiceReference<?>> visibleServices()
+ /* package */ Stream<ServiceReference<?>> visibleServices()
{
- return flattenIterables( map( new Function<LayerInstance, Iterable<ServiceReference<?>>>()
- {
- @Override
- public Iterable<ServiceReference<?>> apply( LayerInstance layerInstance )
- {
- return layerInstance.visibleServices( Visibility.application );
- }
- }, usedLayerInstances ) );
+ return usedLayerInstances.stream()
+ .flatMap( layerInstance -> layerInstance.visibleServices( Visibility.application ) );
}
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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 4626105..6836d34 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
@@ -21,6 +21,8 @@ package org.apache.zest.runtime.types;
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
+import java.util.ArrayList;
+import java.util.List;
import org.apache.zest.api.common.InvalidApplicationException;
import org.apache.zest.api.common.MetaInfo;
import org.apache.zest.api.common.Visibility;
@@ -33,8 +35,6 @@ import org.apache.zest.api.type.ValueType;
import org.apache.zest.api.util.Classes;
import org.apache.zest.api.value.ValueComposite;
import org.apache.zest.functional.HierarchicalVisitorAdapter;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.Specifications;
import org.apache.zest.runtime.association.AssociationsModel;
import org.apache.zest.runtime.association.ManyAssociationsModel;
import org.apache.zest.runtime.association.NamedAssociationsModel;
@@ -57,7 +57,7 @@ public class ValueTypeFactory
return instance;
}
- @SuppressWarnings( {"raw", "unchecked"} )
+ @SuppressWarnings( { "raw", "unchecked" } )
public ValueType newValueType( Type type,
Class declaringClass,
Class compositeType,
@@ -126,7 +126,8 @@ public class ValueTypeFactory
{
// Create default model
MixinsModel mixinsModel = new MixinsModel();
- Iterable valueComposite = (Iterable) Iterables.iterable( ValueComposite.class );
+ List<Class<?>> valueComposite = new ArrayList<>();
+ valueComposite.add( ValueComposite.class );
ValueStateModel valueStateModel = new ValueStateModel( new PropertiesModel(),
new AssociationsModel(),
new ManyAssociationsModel(),
@@ -158,7 +159,7 @@ public class ValueTypeFactory
private static class ValueFinder
extends HierarchicalVisitorAdapter<Object, Object, RuntimeException>
{
- private Class type;
+ private Class<?> type;
private ValueModel foundModel;
private Visibility visibility;
@@ -199,18 +200,18 @@ public class ValueTypeFactory
{
return true;
}
- else if (visited instanceof LayerModel )
+ else if( visited instanceof LayerModel )
{
return true;
}
- else if (visited instanceof UsedLayersModel )
+ else if( visited instanceof UsedLayersModel )
{
return true;
}
else if( visited instanceof ValueModel )
{
ValueModel valueModel = (ValueModel) visited;
- boolean typeEquality = Specifications.in( valueModel.types() ).test( type );
+ boolean typeEquality = valueModel.types().anyMatch( t -> t.equals( type ) );
if( typeEquality && valueModel.visibility().ordinal() >= visibility.ordinal() )
{
foundModel = valueModel;
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
index 2136528..f80f544 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/unitofwork/UnitOfWorkInstance.java
@@ -55,7 +55,6 @@ import org.apache.zest.spi.module.ModuleSpi;
import static org.apache.zest.api.unitofwork.UnitOfWorkCallback.UnitOfWorkStatus.COMPLETED;
import static org.apache.zest.api.unitofwork.UnitOfWorkCallback.UnitOfWorkStatus.DISCARDED;
-import static org.apache.zest.functional.Iterables.map;
public final class UnitOfWorkInstance
{
@@ -168,9 +167,9 @@ public final class UnitOfWorkInstance
{
throw new EntityTypeNotFoundException( mixinType.getName(),
module.name(),
- map( ModelModule.toStringFunction,
- module.findVisibleEntityTypes()
- ) );
+ module.findVisibleEntityTypes()
+ .map( ModelModule.toStringFunction )
+ );
}
}
@@ -237,10 +236,7 @@ public final class UnitOfWorkInstance
}
if( prunedInstances != null )
{
- for( EntityReference prunedInstance : prunedInstances )
- {
- instanceCache.remove( prunedInstance );
- }
+ prunedInstances.forEach( instanceCache::remove );
}
}
}
@@ -279,10 +275,7 @@ public final class UnitOfWorkInstance
notifyBeforeCompletion( currentCallbacks );
// Commit all changes
- for( StateCommitter committer : committers )
- {
- committer.commit();
- }
+ committers.forEach( StateCommitter::commit );
close();
@@ -305,12 +298,7 @@ public final class UnitOfWorkInstance
// Call callbacks
notifyAfterCompletion( currentCallbacks, DISCARDED );
-
- for( EntityStoreUnitOfWork entityStoreUnitOfWork : storeUnitOfWork.values() )
- {
- entityStoreUnitOfWork.discard();
- }
-
+ storeUnitOfWork.values().forEach( EntityStoreUnitOfWork::discard );
callbacks = currentCallbacks;
}
@@ -368,10 +356,7 @@ public final class UnitOfWorkInstance
catch( Exception e )
{
// Cancel all previously prepared stores
- for( StateCommitter committer : committers )
- {
- committer.cancel();
- }
+ committers.forEach( StateCommitter::cancel );
if( e instanceof ConcurrentEntityStateModificationException )
{
@@ -381,14 +366,9 @@ public final class UnitOfWorkInstance
Collection<EntityComposite> modifiedEntities = new ArrayList<>();
for( EntityReference modifiedEntityIdentity : modifiedEntityIdentities )
{
- Collection<EntityInstance> instances = instanceCache.values();
- for( EntityInstance instance : instances )
- {
- if( instance.identity().equals( modifiedEntityIdentity ) )
- {
- modifiedEntities.add( instance.<EntityComposite>proxy() );
- }
- }
+ instanceCache.values().stream()
+ .filter( instance -> instance.identity().equals( modifiedEntityIdentity ) )
+ .forEach( instance -> modifiedEntities.add( instance.<EntityComposite>proxy() ) );
}
throw new ConcurrentEntityModificationException( modifiedEntities );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
index ceeeb10..9375b50 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
@@ -19,10 +19,8 @@ import org.apache.zest.api.composite.Composite;
import org.apache.zest.api.value.NoSuchValueException;
import org.apache.zest.api.value.ValueBuilder;
import org.apache.zest.runtime.composite.StateResolver;
-import org.apache.zest.spi.module.ModelModule;
import org.apache.zest.runtime.structure.ModuleInstance;
-
-import static org.apache.zest.functional.Iterables.first;
+import org.apache.zest.spi.module.ModelModule;
/**
* Implementation of ValueBuilder
@@ -34,7 +32,10 @@ public final class ValueBuilderInstance<T>
private final ModuleInstance currentModule;
private final ValueInstance prototypeInstance;
- public ValueBuilderInstance( ModelModule<ValueModel> compositeModelModule, ModuleInstance currentModule, StateResolver stateResolver )
+ public ValueBuilderInstance( ModelModule<ValueModel> compositeModelModule,
+ ModuleInstance currentModule,
+ StateResolver stateResolver
+ )
{
ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, stateResolver );
prototypeInstance = compositeModelModule.model().newValueInstance( compositeModelModule.module(), state );
@@ -65,7 +66,7 @@ public final class ValueBuilderInstance<T>
public T newInstance()
throws ConstructionException
{
- Class<Composite> valueType = (Class<Composite>) first( prototypeInstance.types() );
+ Class<Composite> valueType = (Class<Composite>) prototypeInstance.types().findFirst().orElse( null );
ModelModule<ValueModel> valueModel = currentModule.typeLookup().lookupValueModel( valueType );
@@ -75,5 +76,4 @@ public final class ValueBuilderInstance<T>
}
return new ValueBuilderWithPrototype<>( valueModel, currentModule, prototype() ).newInstance();
}
-
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
index 3141ac1..c22890e 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
@@ -106,31 +106,27 @@ public final class ValueInstance
*/
public void prepareToBuild()
{
- for( PropertyModel propertyDescriptor : descriptor().state().properties() )
- {
+ descriptor().state().properties().forEach( propertyDescriptor -> {
PropertyInstance<Object> propertyInstance =
(PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
propertyInstance.prepareToBuild( propertyDescriptor );
- }
+ } );
- for( AssociationModel associationDescriptor : descriptor().state().associations() )
- {
+ descriptor().state().associations().forEach( associationDescriptor -> {
state().associationFor( associationDescriptor.accessor() )
.setAssociationInfo( associationDescriptor.getBuilderInfo() );
- }
+ } );
- for( ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations() )
- {
+ descriptor().state().manyAssociations().forEach( associationDescriptor -> {
state().manyAssociationFor( associationDescriptor.accessor() )
.setAssociationInfo( associationDescriptor.getBuilderInfo() );
- }
+ } );
- for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
- {
+ descriptor().state().namedAssociations().forEach( associationDescriptor -> {
state().namedAssociationFor( associationDescriptor.accessor() )
.setAssociationInfo( associationDescriptor.getBuilderInfo() );
- }
+ } );
}
/**
@@ -139,27 +135,23 @@ public final class ValueInstance
*/
public void prepareBuilderState()
{
- for( PropertyModel propertyDescriptor : descriptor().state().properties() )
- {
+ descriptor().state().properties().forEach( propertyDescriptor -> {
PropertyInstance<Object> propertyInstance =
(PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
propertyInstance.prepareBuilderState( propertyDescriptor );
- }
+ } );
- for( AssociationModel associationDescriptor : descriptor().state().associations() )
- {
+ descriptor().state().associations().forEach( associationDescriptor -> {
state().associationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
- }
+ } );
- for( ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations() )
- {
+ descriptor().state().manyAssociations().forEach( associationDescriptor -> {
state().manyAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
- }
+ } );
- for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
- {
+ descriptor().state().namedAssociations().forEach( associationDescriptor -> {
state().namedAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
- }
+ } );
}
/**
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
index aa8c9b4..5b23765 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
@@ -14,33 +14,30 @@
package org.apache.zest.runtime.value;
+import java.util.List;
import org.apache.zest.api.common.MetaInfo;
import org.apache.zest.api.common.Visibility;
import org.apache.zest.api.constraint.ConstraintViolationException;
import org.apache.zest.api.type.ValueCompositeType;
import org.apache.zest.api.value.ValueDescriptor;
-import org.apache.zest.runtime.association.AssociationModel;
-import org.apache.zest.runtime.association.ManyAssociationModel;
import org.apache.zest.runtime.composite.CompositeMethodsModel;
import org.apache.zest.runtime.composite.CompositeModel;
import org.apache.zest.runtime.composite.MixinModel;
import org.apache.zest.runtime.composite.MixinsModel;
import org.apache.zest.runtime.composite.UsesInstance;
import org.apache.zest.runtime.injection.InjectionContext;
-import org.apache.zest.runtime.property.PropertyModel;
import org.apache.zest.runtime.unitofwork.UnitOfWorkInstance;
import org.apache.zest.spi.module.ModuleSpi;
/**
* Model for ValueComposites
*/
-public final class ValueModel
- extends CompositeModel
+public final class ValueModel extends CompositeModel
implements ValueDescriptor
{
private ValueCompositeType valueType;
- public ValueModel( final Iterable<Class<?>> types,
+ public ValueModel( final List<Class<?>> types,
final Visibility visibility,
final MetaInfo metaInfo,
final MixinsModel mixinsModel,
@@ -69,25 +66,26 @@ public final class ValueModel
void checkConstraints( ValueStateInstance state )
throws ConstraintViolationException
{
- for( PropertyModel propertyModel : stateModel.properties() )
- {
- propertyModel.checkConstraints( state.propertyFor( propertyModel.accessor() ).get() );
- }
+ stateModel.properties().forEach( propertyModel ->
+ propertyModel.checkConstraints( state.propertyFor( propertyModel.accessor() ).get() )
+ );
// IF no UnitOfWork is active, then the Association checks shouldn't be done.
if( UnitOfWorkInstance.getCurrent().empty() )
{
return;
}
- for( AssociationModel associationModel : ( (ValueStateModel) stateModel ).associations() )
- {
- associationModel.checkConstraints( state.associationFor( associationModel.accessor() ).get() );
- }
+ ( (ValueStateModel) stateModel ).associations().forEach( associationModel ->
+ associationModel.checkConstraints( state.associationFor( associationModel.accessor() ).get() )
+ );
- for( ManyAssociationModel associationModel : ( (ValueStateModel) stateModel ).manyAssociations() )
- {
- associationModel.checkAssociationConstraints( state.manyAssociationFor( associationModel.accessor() ) );
- }
+ ( (ValueStateModel) stateModel ).manyAssociations().forEach( associationModel ->
+ associationModel.checkAssociationConstraints( state.manyAssociationFor( associationModel.accessor() ) )
+ );
+
+ ( (ValueStateModel) stateModel ).namedAssociations().forEach( associationModel ->
+ associationModel.checkAssociationConstraints( state.namedAssociationFor( associationModel.accessor() ) )
+ );
}
public ValueInstance newValueInstance( ModuleSpi moduleInstance,
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
index 84a2719..ef0c20b 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
@@ -23,23 +23,18 @@ import java.lang.reflect.AccessibleObject;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
-import org.apache.zest.api.association.AssociationDescriptor;
+import java.util.stream.Stream;
import org.apache.zest.api.association.AssociationStateHolder;
import org.apache.zest.api.entity.EntityReference;
-import org.apache.zest.api.property.PropertyDescriptor;
import org.apache.zest.runtime.association.AssociationInfo;
import org.apache.zest.runtime.association.AssociationInstance;
-import org.apache.zest.runtime.association.AssociationModel;
import org.apache.zest.runtime.association.ManyAssociationInstance;
-import org.apache.zest.runtime.association.ManyAssociationModel;
import org.apache.zest.runtime.association.NamedAssociationInstance;
-import org.apache.zest.runtime.association.NamedAssociationModel;
import org.apache.zest.runtime.composite.StateResolver;
import org.apache.zest.runtime.property.PropertyInfo;
import org.apache.zest.runtime.property.PropertyInstance;
-import org.apache.zest.runtime.property.PropertyModel;
-import org.apache.zest.spi.module.ModelModule;
import org.apache.zest.runtime.structure.ModuleInstance;
+import org.apache.zest.spi.module.ModelModule;
/**
* TODO
@@ -66,34 +61,33 @@ public final class ValueStateInstance
public ValueStateInstance( ModelModule<ValueModel> compositeModelModule,
ModuleInstance currentModule,
- StateResolver stateResolver )
+ StateResolver stateResolver
+ )
{
ValueModel valueModel = compositeModelModule.model();
this.properties = new LinkedHashMap<>();
- for( PropertyDescriptor propertyDescriptor : valueModel.state().properties() )
- {
- PropertyInfo builderInfo = ( (PropertyModel) propertyDescriptor ).getBuilderInfo();
+ valueModel.state().properties().forEach( propertyDescriptor -> {
+ PropertyInfo builderInfo = propertyDescriptor.getBuilderInfo();
Object value = stateResolver.getPropertyState( propertyDescriptor );
PropertyInstance<Object> propertyInstance = new PropertyInstance<>( builderInfo, value );
properties.put( propertyDescriptor.accessor(), propertyInstance );
- }
+ } );
this.associations = new LinkedHashMap<>();
- for( AssociationDescriptor associationDescriptor : valueModel.state().associations() )
- {
- AssociationInfo builderInfo = ( (AssociationModel) associationDescriptor ).getBuilderInfo();
+ valueModel.state().associations().forEach( associationDescriptor -> {
+ AssociationInfo builderInfo = associationDescriptor.getBuilderInfo();
EntityReference value = stateResolver.getAssociationState( associationDescriptor );
AssociationInstance<Object> associationInstance1 = new AssociationInstance<>(
builderInfo,
currentModule.getEntityFunction(),
new ReferenceProperty( value ) );
associations.put( associationDescriptor.accessor(), associationInstance1 );
- }
+ } );
this.manyAssociations = new LinkedHashMap<>();
- for( AssociationDescriptor associationDescriptor : valueModel.state().manyAssociations() )
- {
- AssociationInfo builderInfo = ( (ManyAssociationModel) associationDescriptor ).getBuilderInfo();
+ valueModel.state().manyAssociations().forEach( associationDescriptor -> {
+ AssociationInfo builderInfo = associationDescriptor
+ .getBuilderInfo();
List<EntityReference> value = stateResolver.getManyAssociationState( associationDescriptor );
ManyAssociationValueState manyAssociationState = new ManyAssociationValueState( value );
ManyAssociationInstance<Object> associationInstance = new ManyAssociationInstance<>(
@@ -101,12 +95,12 @@ public final class ValueStateInstance
currentModule.getEntityFunction(),
manyAssociationState );
manyAssociations.put( associationDescriptor.accessor(), associationInstance );
- }
+ } );
this.namedAssociations = new LinkedHashMap<>();
- for( AssociationDescriptor associationDescriptor : valueModel.state().namedAssociations() )
- {
- AssociationInfo builderInfo = ( (NamedAssociationModel) associationDescriptor ).getBuilderInfo();
+ valueModel.state().namedAssociations().forEach( associationDescriptor -> {
+ AssociationInfo builderInfo = associationDescriptor
+ .getBuilderInfo();
Map<String, EntityReference> value = stateResolver.getNamedAssociationState( associationDescriptor );
NamedAssociationValueState namedAssociationState = new NamedAssociationValueState( value );
NamedAssociationInstance<Object> associationInstance = new NamedAssociationInstance<>(
@@ -114,7 +108,7 @@ public final class ValueStateInstance
currentModule.getEntityFunction(),
namedAssociationState );
namedAssociations.put( associationDescriptor.accessor(), associationInstance );
- }
+ } );
}
@Override
@@ -133,9 +127,9 @@ public final class ValueStateInstance
}
@Override
- public Iterable<PropertyInstance<?>> properties()
+ public Stream<PropertyInstance<?>> properties()
{
- return properties.values();
+ return properties.values().stream();
}
@Override
@@ -153,9 +147,9 @@ public final class ValueStateInstance
}
@Override
- public Iterable<AssociationInstance<?>> allAssociations()
+ public Stream<AssociationInstance<?>> allAssociations()
{
- return associations.values();
+ return associations.values().stream();
}
@Override
@@ -173,9 +167,9 @@ public final class ValueStateInstance
}
@Override
- public Iterable<ManyAssociationInstance<?>> allManyAssociations()
+ public Stream<ManyAssociationInstance<?>> allManyAssociations()
{
- return manyAssociations.values();
+ return manyAssociations.values().stream();
}
@Override
@@ -193,11 +187,12 @@ public final class ValueStateInstance
}
@Override
- public Iterable<? extends NamedAssociationInstance<?>> allNamedAssociations()
+ public Stream<? extends NamedAssociationInstance<?>> allNamedAssociations()
{
- return namedAssociations.values();
+ return namedAssociations.values().stream();
}
+ @SuppressWarnings( "SimplifiableIfStatement" )
@Override
public boolean equals( Object obj )
{
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
index e34398f..636664a 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
@@ -19,6 +19,7 @@
*/
package org.apache.zest.runtime.value;
+import java.util.stream.Stream;
import org.apache.zest.api.association.AssociationDescriptor;
import org.apache.zest.api.association.AssociationStateDescriptor;
import org.apache.zest.api.common.QualifiedName;
@@ -93,19 +94,19 @@ public final class ValueStateModel
}
@Override
- public Iterable<AssociationModel> associations()
+ public Stream<AssociationModel> associations()
{
return associationsModel.associations();
}
@Override
- public Iterable<ManyAssociationModel> manyAssociations()
+ public Stream<ManyAssociationModel> manyAssociations()
{
return manyAssociationsModel.manyAssociations();
}
@Override
- public Iterable<NamedAssociationModel> namedAssociations()
+ public Stream<NamedAssociationModel> namedAssociations()
{
return namedAssociationsModel.namedAssociations();
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
index 08f91e1..7fcadac 100644
--- a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
@@ -15,6 +15,8 @@
package org.apache.zest.runtime.value;
import java.util.List;
+import java.util.stream.Stream;
+import org.apache.zest.api.value.ValueDescriptor;
import org.apache.zest.functional.HierarchicalVisitor;
import org.apache.zest.functional.VisitableHierarchy;
@@ -31,9 +33,9 @@ public final class ValuesModel
this.valueModels = valueModels;
}
- public Iterable<ValueModel> models()
+ public Stream<ValueModel> models()
{
- return valueModels;
+ return valueModels.stream();
}
@Override
@@ -52,4 +54,9 @@ public final class ValuesModel
}
return visitor.visitLeave( this );
}
+
+ public Stream<? extends ValueDescriptor> stream()
+ {
+ return valueModels.stream();
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/test/java/org/apache/zest/api/common/PluginTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/api/common/PluginTest.java b/core/runtime/src/test/java/org/apache/zest/api/common/PluginTest.java
index 9bbe4ec..e92d97f 100644
--- a/core/runtime/src/test/java/org/apache/zest/api/common/PluginTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/api/common/PluginTest.java
@@ -19,8 +19,6 @@ import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
import java.util.Collections;
import java.util.List;
-import org.junit.Ignore;
-import org.junit.Test;
import org.apache.zest.api.injection.scope.Service;
import org.apache.zest.api.injection.scope.Structure;
import org.apache.zest.api.mixin.Mixins;
@@ -42,10 +40,8 @@ import org.apache.zest.bootstrap.LayerAssembly;
import org.apache.zest.bootstrap.LayerName;
import org.apache.zest.bootstrap.ModuleAssembly;
import org.apache.zest.bootstrap.ModuleName;
-import org.apache.zest.functional.Iterables;
-
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.toArray;
+import org.junit.Ignore;
+import org.junit.Test;
/**
* Sample of how a plugin architecture could work.
@@ -73,19 +69,19 @@ public class PluginTest
throws AssemblyException
{
return applicationFactory.newApplicationAssembly( new Assembler[][][]
- {
{
{
- new PluginAssembler(),
- new UIAssembler(),
- }
- },
- {
+ {
+ new PluginAssembler(),
+ new UIAssembler(),
+ }
+ },
{
- new ServiceAssembler()
+ {
+ new ServiceAssembler()
+ }
}
- }
- } );
+ } );
}
}
@@ -294,26 +290,21 @@ public class PluginTest
public Object importService( final ImportedServiceDescriptor serviceDescriptor )
throws ServiceImporterException
{
- final Class<?> mainType = first( serviceDescriptor.types() );
-
- Class[] interfaces = toArray( Class.class, Iterables.<Class>cast( serviceDescriptor.types() ) );
+ final Class<?> mainType = serviceDescriptor.types().findFirst().orElse(null);
+
+ Class[] interfaces = serviceDescriptor.types().toArray( Class[]::new );
return Proxy.newProxyInstance(
mainType.getClassLoader(),
interfaces,
- new InvocationHandler()
- {
- public Object invoke( Object proxy, Method method, Object[] args )
- throws Throwable
+ ( proxy, method, args ) -> {
+ ServiceFinder finder = serviceDescriptor.metaInfo( ServiceFinder.class );
+ if( finder == null )
{
- ServiceFinder finder = serviceDescriptor.metaInfo( ServiceFinder.class );
- if( finder == null )
- {
- throw new ServiceImporterException( "No ServiceFinder specified for imported service " + serviceDescriptor
- .identity() );
- }
- Object service = finder.findService( mainType ).get();
- return method.invoke( service, args );
+ throw new ServiceImporterException( "No ServiceFinder specified for imported service " + serviceDescriptor
+ .identity() );
}
+ Object service = finder.findService( mainType ).get();
+ return method.invoke( service, args );
} );
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/test/java/org/apache/zest/bootstrap/ApplicationAssemblerTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/bootstrap/ApplicationAssemblerTest.java b/core/runtime/src/test/java/org/apache/zest/bootstrap/ApplicationAssemblerTest.java
index 4252415..aafc3cc 100644
--- a/core/runtime/src/test/java/org/apache/zest/bootstrap/ApplicationAssemblerTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/bootstrap/ApplicationAssemblerTest.java
@@ -27,7 +27,6 @@ import org.apache.zest.api.service.ServiceComposite;
import org.apache.zest.api.service.ServiceDescriptor;
import org.apache.zest.api.structure.ApplicationDescriptor;
import org.apache.zest.functional.HierarchicalVisitorAdapter;
-import org.apache.zest.functional.Specifications;
/**
* TODO
@@ -56,11 +55,11 @@ public class ApplicationAssemblerTest
module.entities( TestEntity.class );
- layer1.services( AssemblySpecifications.types( TestService.class ) ).instantiateOnStartup();
+ layer1.services( AssemblySpecifications.ofAnyType( TestService.class ) ).instantiateOnStartup();
- layer1.services( Specifications.<Object>TRUE() ).visibleIn( Visibility.layer );
+ layer1.services( s -> true ).visibleIn( Visibility.layer );
- layer1.entities( Specifications.<Object>TRUE() ).visibleIn( Visibility.application );
+ layer1.entities( s -> true ).visibleIn( Visibility.application );
return assembly;
}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/test/java/org/apache/zest/runtime/ZestSPITest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/ZestSPITest.java b/core/runtime/src/test/java/org/apache/zest/runtime/ZestSPITest.java
index 9c4e205..d171396 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/ZestSPITest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/ZestSPITest.java
@@ -87,18 +87,16 @@ public class ZestSPITest
private void validateState( AssociationStateHolder state, EntityDescriptor entityDescriptor )
{
- for( PropertyDescriptor propertyDescriptor : entityDescriptor.state().properties() )
- {
+ entityDescriptor.state().properties().forEach( propertyDescriptor -> {
Property<?> prop = state.propertyFor( propertyDescriptor.accessor() );
assertThat( "Properties could be listed", prop, CoreMatchers.notNullValue() );
- }
+ } );
AssociationStateDescriptor descriptor = entityDescriptor.state();
- for( AssociationDescriptor associationDescriptor : descriptor.associations() )
- {
+ descriptor.associations().forEach( associationDescriptor -> {
AbstractAssociation assoc = state.associationFor( associationDescriptor.accessor() );
assertThat( "Assocs could be listed", assoc, CoreMatchers.notNullValue() );
- }
+ } );
}
public interface TestEntity
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/test/java/org/apache/zest/runtime/structure/CompositeDescriptorTest.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/test/java/org/apache/zest/runtime/structure/CompositeDescriptorTest.java b/core/runtime/src/test/java/org/apache/zest/runtime/structure/CompositeDescriptorTest.java
index 58a42d4..4cc78cc 100644
--- a/core/runtime/src/test/java/org/apache/zest/runtime/structure/CompositeDescriptorTest.java
+++ b/core/runtime/src/test/java/org/apache/zest/runtime/structure/CompositeDescriptorTest.java
@@ -40,7 +40,7 @@ public class CompositeDescriptorTest
TransientDescriptor addressDescriptor = spi.transientDescriptorFor( address );
assertNotNull( addressDescriptor );
- assertEquals( AddressComposite.class, first( addressDescriptor.types() ) );
+ assertEquals( AddressComposite.class, addressDescriptor.types().findFirst().orElse( null ) );
assertTrue( TransientDescriptor.class.isAssignableFrom( addressDescriptor.getClass() ) );
}
@@ -51,7 +51,7 @@ public class CompositeDescriptorTest
TransientDescriptor addressDesc = module.transientDescriptor( AddressComposite.class.getName() );
assertNotNull( addressDesc );
- assertEquals( AddressComposite.class, first( addressDesc.types() ) );
+ assertEquals( AddressComposite.class, addressDesc.types().findFirst().orElse( null ) );
}
public final void assemble( ModuleAssembly aModule )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/spi/src/main/java/org/apache/zest/spi/entity/QualifiedIdentity.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/zest/spi/entity/QualifiedIdentity.java b/core/spi/src/main/java/org/apache/zest/spi/entity/QualifiedIdentity.java
index 04088a2..f604e98 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/entity/QualifiedIdentity.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/entity/QualifiedIdentity.java
@@ -61,9 +61,9 @@ public final class QualifiedIdentity
public QualifiedIdentity( EntityComposite entityComposite )
{
- this( entityComposite.identity().get(), first( ZestAPI.FUNCTION_DESCRIPTOR_FOR
+ this( entityComposite.identity().get(), ZestAPI.FUNCTION_DESCRIPTOR_FOR
.apply( entityComposite )
- .types() ).getName() );
+ .types().findFirst().get().getName() );
}
public QualifiedIdentity( String identity, Class<?> clazz )
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
----------------------------------------------------------------------
diff --git a/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/JSONMapEntityStoreMixin.java b/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
index 8c9bf68..72f7a99 100644
--- a/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
+++ b/core/spi/src/main/java/org/apache/zest/spi/entitystore/helpers/JSONMapEntityStoreMixin.java
@@ -164,7 +164,7 @@ public class JSONMapEntityStoreMixin
JSONObject state = new JSONObject();
state.put( JSONKeys.IDENTITY, identity.identity() );
state.put( JSONKeys.APPLICATION_VERSION, application.version() );
- state.put( JSONKeys.TYPE, first( entityDescriptor.types() ).getName() );
+ state.put( JSONKeys.TYPE, entityDescriptor.types().findFirst().get().getName() );
state.put( JSONKeys.VERSION, unitOfWork.identity() );
state.put( JSONKeys.MODIFIED, unitOfWork.currentTime() );
state.put( JSONKeys.PROPERTIES, new JSONObject() );
@@ -435,9 +435,9 @@ public class JSONMapEntityStoreMixin
{
throw new EntityTypeNotFoundException( type,
module.name(),
- map( ModelModule.toStringFunction,
- module.findVisibleEntityTypes()
- ) );
+ module.findVisibleEntityTypes()
+ .map( ModelModule.toStringFunction )
+ );
}
return new JSONEntityState( valueSerialization,