http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java b/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java new file mode 100644 index 0000000..48a5a67 --- /dev/null +++ b/core/runtime/src/main/java/org/apache/zest/runtime/legacy/Specifications.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2010, Rickard Ãberg. All Rights Reserved. + * + * Licensed 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.legacy; + +import java.util.Arrays; +import java.util.function.Function; +import java.util.function.Predicate; + +/** + * Common generic specification expressions + */ +public class Specifications +{ + public static <FROM, TO> Predicate<FROM> translate( final Function<FROM, TO> function, + final Predicate<? super TO> specification + ) + { + return item -> specification.test( function.apply( item ) ); + } +}
http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java index e4df4e5..8764fba 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java @@ -14,6 +14,7 @@ package org.apache.zest.runtime.object; +import java.util.stream.Stream; import org.apache.zest.api.common.ConstructionException; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; @@ -27,8 +28,6 @@ import org.apache.zest.runtime.injection.InjectedFieldsModel; import org.apache.zest.runtime.injection.InjectedMethodsModel; import org.apache.zest.runtime.injection.InjectionContext; -import static org.apache.zest.functional.Iterables.iterable; - /** * JAVADOC */ @@ -58,10 +57,9 @@ public final class ObjectModel @Override @SuppressWarnings( "unchecked" ) - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - Iterable<? extends Class<?>> iterable = iterable( objectType ); - return (Iterable<Class<?>>) iterable; + return Stream.of( objectType ); } @Override http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java index 9f05074..e610807 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java @@ -15,6 +15,7 @@ package org.apache.zest.runtime.object; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.VisitableHierarchy; @@ -48,8 +49,8 @@ public class ObjectsModel return visitor.visitLeave( this ); } - public Iterable<ObjectModel> models() + public Stream<ObjectModel> stream() { - return objectModels; + return objectModels.stream(); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java index 202fc89..2f47576 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java @@ -21,6 +21,7 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Member; import java.util.LinkedHashMap; import java.util.Map; +import java.util.stream.Stream; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.VisitableHierarchy; @@ -60,9 +61,9 @@ public class PropertiesModel return visitor.visitLeave( this ); } - public Iterable<PropertyModel> properties() + public Stream<PropertyModel> properties() { - return mapAccessiblePropertyModel.values(); + return mapAccessiblePropertyModel.values().stream(); } public PropertyModel getProperty( AccessibleObject accessor ) http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java index 9f37373..571bdb1 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java @@ -21,6 +21,7 @@ import java.lang.reflect.Method; import java.lang.reflect.Type; import java.lang.reflect.TypeVariable; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.QualifiedName; import org.apache.zest.api.constraint.ConstraintViolation; @@ -44,8 +45,8 @@ import org.apache.zest.runtime.model.Binder; import org.apache.zest.runtime.model.Resolution; import org.apache.zest.runtime.types.ValueTypeFactory; -import static org.apache.zest.functional.Iterables.empty; -import static org.apache.zest.functional.Iterables.first; +//import static org.apache.zest.functional.Iterables.empty; +//import static org.apache.zest.functional.Iterables.first; /** * Model for a Property. @@ -172,7 +173,7 @@ public class PropertyModel { if( valueType instanceof ValueCompositeType ) { - return module.newValue( (Class<?>) first( valueType().types() ) ); + return module.newValue( valueType().types().findFirst().orElse( null ) ); } else { @@ -189,7 +190,7 @@ public class PropertyModel { ValueTypeFactory factory = ValueTypeFactory.instance(); Class<?> declaringClass = ( (Member) accessor() ).getDeclaringClass(); - Class<?> mainType = first( resolution.model().types() ); + Class<?> mainType = resolution.model().types().findFirst().orElse( null ); Serialization.Variant variant = findVariant(); valueType = factory.newValueType( type(), declaringClass, mainType, resolution.layer(), resolution.module(), variant ); builderInfo = new BuilderPropertyInfo(); @@ -230,8 +231,8 @@ public class PropertyModel List<ConstraintViolation> violations = constraints.checkConstraints( value ); if( !violations.isEmpty() ) { - Iterable<Class<?>> empty = empty(); - throw new ConstraintViolationException( "<new instance>", empty, ( (Member) accessor ), violations ); + Stream<Class<?>> empty = Stream.empty(); + throw new ConstraintViolationException( "", empty, (Member) accessor, violations ); } } } @@ -300,8 +301,8 @@ public class PropertyModel List<ConstraintViolation> violations = constraints.checkConstraints( value ); if( !violations.isEmpty() ) { - Iterable<Class<?>> empty = empty(); - throw new ConstraintViolationException( "<new instance>", empty, ( (Member) accessor ), violations ); + Stream<Class<?>> empty = Stream.empty(); + throw new ConstraintViolationException( "", empty, (Member) accessor, violations ); } } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java index 7166229..bab0be9 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/query/IterableQuerySource.java @@ -25,7 +25,6 @@ import org.apache.zest.api.property.Property; import org.apache.zest.api.query.grammar.OrderBy; import org.apache.zest.api.util.Classes; import org.apache.zest.functional.Iterables; -import org.apache.zest.functional.Specifications; import org.apache.zest.spi.query.QuerySource; /** @@ -154,7 +153,7 @@ public class IterableQuerySource } else { - return Iterables.toList( Iterables.filter( Specifications.and( Classes.instanceOf( resultType ), whereClause ), iterable ) ); + return Iterables.toList( Iterables.filter( Classes.instanceOf( resultType ).and( whereClause ), iterable ) ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java index 669010d..da2d28c 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceModel.java @@ -21,6 +21,7 @@ package org.apache.zest.runtime.service; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Proxy; +import java.util.stream.Stream; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; import org.apache.zest.api.service.ImportedServiceDescriptor; @@ -32,8 +33,6 @@ import org.apache.zest.functional.VisitableHierarchy; import org.apache.zest.runtime.activation.ActivatorsInstance; import org.apache.zest.runtime.activation.ActivatorsModel; -import static org.apache.zest.functional.Iterables.iterable; - /** * JAVADOC */ @@ -78,10 +77,9 @@ public final class ImportedServiceModel @Override @SuppressWarnings( "unchecked" ) - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { - Iterable<? extends Class<?>> iterable = iterable( type ); - return (Iterable<Class<?>>) iterable; + return Stream.of( type ); } @Override @@ -120,7 +118,7 @@ public final class ImportedServiceModel return moduleName; } - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) public ActivatorsInstance<?> newActivatorsInstance( Module module ) throws Exception { @@ -144,7 +142,7 @@ public final class ImportedServiceModel return visitor.visitLeave( this ); } - @SuppressWarnings( {"raw", "unchecked"} ) + @SuppressWarnings( { "raw", "unchecked" } ) public <T> ImportedServiceInstance<T> importInstance( Module module ) { ServiceImporter importer = module.newObject( serviceImporter ); http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java index 750985f..a44c7f5 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServiceReferenceInstance.java @@ -19,6 +19,7 @@ */ package org.apache.zest.runtime.service; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationException; @@ -61,7 +62,7 @@ public final class ImportedServiceReferenceInstance<T> } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { return serviceModel.types(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java index 5fa5118..7faf290 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesInstance.java @@ -15,13 +15,14 @@ package org.apache.zest.runtime.service; import java.util.List; -import java.util.function.Predicate; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationEventListenerRegistration; import org.apache.zest.api.activation.ActivationException; import org.apache.zest.api.activation.PassivationException; import org.apache.zest.api.common.Visibility; +import org.apache.zest.api.service.ImportedServiceDescriptor; import org.apache.zest.api.service.ServiceReference; import org.apache.zest.functional.Iterables; import org.apache.zest.runtime.activation.ActivationDelegate; @@ -37,11 +38,11 @@ public class ImportedServicesInstance implements Activation, ActivationEventListenerRegistration { private final ImportedServicesModel servicesModel; - private final List<ServiceReference> serviceReferences; + private final List<ServiceReference<?>> serviceReferences; private final ActivationDelegate activation = new ActivationDelegate( this, false ); public ImportedServicesInstance( ImportedServicesModel servicesModel, - List<ServiceReference> serviceReferences + List<ServiceReference<?>> serviceReferences ) { this.servicesModel = servicesModel; @@ -52,6 +53,11 @@ public class ImportedServicesInstance } } + public Stream<ImportedServiceModel> models() + { + return servicesModel.stream(); + } + @Override public void activate() throws ActivationException @@ -67,18 +73,14 @@ public class ImportedServicesInstance activation.passivate(); } - public Iterable<ServiceReference> visibleServices( final Visibility visibility ) + public Stream<ServiceReference<?>> visibleServices( final Visibility visibility ) { - return Iterables.filter( new Predicate<ServiceReference>() - { - @Override - public boolean test( ServiceReference item ) - { - return ( (ImportedServiceReferenceInstance) item ).serviceDescriptor() - .visibility() - .ordinal() >= visibility.ordinal(); - } - }, serviceReferences ); + return serviceReferences.stream() + .filter( item -> + ( (ImportedServiceReferenceInstance) item ).serviceDescriptor() + .visibility() + .ordinal() >= visibility.ordinal() + ); } @Override @@ -107,4 +109,9 @@ public class ImportedServicesInstance { activation.deregisterActivationEventListener( listener ); } + + public Stream<? extends ImportedServiceDescriptor> stream() + { + return servicesModel.stream(); + } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java index 5d19cc9..9853830 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ImportedServicesModel.java @@ -16,6 +16,8 @@ package org.apache.zest.runtime.service; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; +import org.apache.zest.api.service.ImportedServiceDescriptor; import org.apache.zest.api.service.ServiceReference; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.VisitableHierarchy; @@ -36,7 +38,7 @@ public class ImportedServicesModel public ImportedServicesInstance newInstance( ModuleInstance module ) { - List<ServiceReference> serviceReferences = new ArrayList<ServiceReference>(); + List<ServiceReference<?>> serviceReferences = new ArrayList<>(); for( ImportedServiceModel serviceModel : importedServiceModels ) { ImportedServiceReferenceInstance serviceReferenceInstance = new ImportedServiceReferenceInstance( serviceModel, module ); @@ -62,4 +64,9 @@ public class ImportedServicesModel } return visitor.visitLeave( this ); } + + public Stream<ImportedServiceModel> stream() + { + return importedServiceModels.stream(); + } } \ No newline at end of file http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java index 276a8c4..2842ada 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceModel.java @@ -23,7 +23,9 @@ import java.lang.reflect.AccessibleObject; import java.lang.reflect.Method; import java.lang.reflect.ParameterizedType; import java.util.HashMap; +import java.util.List; import java.util.Map; +import java.util.function.Predicate; import org.apache.zest.api.common.MetaInfo; import org.apache.zest.api.common.Visibility; import org.apache.zest.api.configuration.Configuration; @@ -34,7 +36,6 @@ import org.apache.zest.api.service.ServiceDescriptor; import org.apache.zest.api.structure.Module; import org.apache.zest.api.util.Classes; import org.apache.zest.functional.HierarchicalVisitor; -import org.apache.zest.functional.Specifications; import org.apache.zest.runtime.activation.ActivatorsInstance; import org.apache.zest.runtime.activation.ActivatorsModel; import org.apache.zest.runtime.composite.CompositeMethodsModel; @@ -47,12 +48,9 @@ import org.apache.zest.runtime.composite.UsesInstance; import org.apache.zest.runtime.injection.DependencyModel; import org.apache.zest.runtime.injection.InjectionContext; import org.apache.zest.runtime.property.PropertyInstance; -import org.apache.zest.runtime.property.PropertyModel; import org.apache.zest.runtime.structure.ModuleInstance; -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Specifications.and; -import static org.apache.zest.functional.Specifications.translate; +import static org.apache.zest.runtime.legacy.Specifications.translate; /** * JAVADOC @@ -80,7 +78,7 @@ public final class ServiceModel extends CompositeModel @SuppressWarnings( "raw" ) private final Class configurationType; - public ServiceModel( Iterable<Class<?>> types, + public ServiceModel( List<Class<?>> types, Visibility visibility, MetaInfo metaInfo, ActivatorsModel<?> activatorsModel, @@ -113,8 +111,9 @@ public final class ServiceModel extends CompositeModel return identity; } - @SuppressWarnings( {"raw", "unchecked"} ) - public ActivatorsInstance<?> newActivatorsInstance( Module module ) throws Exception + @SuppressWarnings( { "raw", "unchecked" } ) + public ActivatorsInstance<?> newActivatorsInstance( Module module ) + throws Exception { return new ActivatorsInstance( activatorsModel.newInstances( module ) ); } @@ -145,14 +144,13 @@ public final class ServiceModel extends CompositeModel } return visitor.visitLeave( this ); } - + public ServiceInstance newInstance( final ModuleInstance module ) { Object[] mixins = mixinsModel.newMixinHolder(); Map<AccessibleObject, Property<?>> properties = new HashMap<>(); - for( PropertyModel propertyModel : stateModel.properties() ) - { + stateModel.properties().forEach( propertyModel -> { Object initialValue = propertyModel.initialValue( module ); if( propertyModel.accessor().equals( identityMethod ) ) { @@ -161,7 +159,7 @@ public final class ServiceModel extends CompositeModel Property<?> property = new PropertyInstance<>( propertyModel, initialValue ); properties.put( propertyModel.accessor(), property ); - } + } ); TransientStateInstance state = new TransientStateInstance( properties ); ServiceInstance compositeInstance = new ServiceInstance( this, module, mixins, state ); @@ -187,16 +185,14 @@ public final class ServiceModel extends CompositeModel @SuppressWarnings( { "raw", "unchecked" } ) public Class calculateConfigurationType() { - Class injectionClass = null; - Iterable<DependencyModel> configurationThisDependencies = filter( and( translate( new DependencyModel.InjectionTypeFunction(), Specifications - .<Class<?>>in( Configuration.class ) ), new DependencyModel.ScopeSpecification( This.class ) ), dependencies() ); - for( DependencyModel dependencyModel : configurationThisDependencies ) - { - if( dependencyModel.rawInjectionType() - .equals( Configuration.class ) && dependencyModel.injectionType() instanceof ParameterizedType ) - { - Class<?> type = Classes.RAW_CLASS - .apply( ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] ); + DependencyModel.ScopeSpecification thisSpec = new DependencyModel.ScopeSpecification( This.class ); + Predicate<DependencyModel> configurationCheck = + translate( new DependencyModel.InjectionTypeFunction(), clazz -> clazz.equals( Configuration.class ) ); + return dependencies().filter( thisSpec.and( configurationCheck ) ) + .filter( dependencyModel -> dependencyModel.rawInjectionType().equals( Configuration.class ) ) + .filter( dependencyModel -> dependencyModel.injectionType() instanceof ParameterizedType ) + .map( dependencyModel -> Classes.RAW_CLASS.apply( ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] ) ) + .reduce( null, ( injectionClass, type ) -> { if( injectionClass == null ) { injectionClass = type; @@ -208,9 +204,41 @@ public final class ServiceModel extends CompositeModel injectionClass = type; } } - } - } - return injectionClass; + return injectionClass; + } ); + +// Class injectionClass = null; +// Iterable<DependencyModel> configurationThisDependencies = +// filter( +// and( +// translate( new DependencyModel.InjectionTypeFunction(), +// Specifications.<Class<?>>in( Configuration.class ) +// ), +// new DependencyModel.ScopeSpecification( This.class ) ), +// dependencies() +// ); +// for( DependencyModel dependencyModel : configurationThisDependencies ) +// +// { +// if( dependencyModel.rawInjectionType() +// .equals( Configuration.class ) && dependencyModel.injectionType() instanceof ParameterizedType ) +// { +// Class<?> type = Classes.RAW_CLASS +// .apply( ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ] ); +// if( injectionClass == null ) +// { +// injectionClass = type; +// } +// else +// { +// if( injectionClass.isAssignableFrom( type ) ) +// { +// injectionClass = type; +// } +// } +// } +// } +// +// return injectionClass; } - } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java index 6543917..70541b3 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServiceReferenceInstance.java @@ -20,6 +20,7 @@ package org.apache.zest.runtime.service; import java.lang.reflect.Method; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationException; @@ -71,13 +72,13 @@ public final class ServiceReferenceInstance<T> } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { return serviceModel.types(); } @Override - public <T> T metaInfo( Class<T> infoType ) + public <M> M metaInfo( Class<M> infoType ) { return serviceModel.metaInfo( infoType ); } @@ -122,14 +123,7 @@ public final class ServiceReferenceInstance<T> if( instance != null ) { try { - activation.passivate( new Runnable() - { - @Override - public void run() - { - active = false; - } - } ); + activation.passivate( () -> active = false ); } finally { instance = null; active = false; @@ -151,14 +145,9 @@ public final class ServiceReferenceInstance<T> try { - activation.activate( serviceModel.newActivatorsInstance( module ), instance, new Runnable() - { - @Override - public void run() - { - active = true; - } - } ); + activation.activate( serviceModel.newActivatorsInstance( module ), + instance, + () -> active = true ); } catch( Exception e ) { @@ -194,26 +183,26 @@ public final class ServiceReferenceInstance<T> { @Override @SuppressWarnings( "unchecked" ) - public <T> T proxy() + public <P> P proxy() { - return (T) ServiceReferenceInstance.this.get(); + return (P) ServiceReferenceInstance.this.get(); } @Override - public <T> T newProxy( Class<T> mixinType ) + public <P> P newProxy( Class<P> mixinType ) throws IllegalArgumentException { return getInstance().newProxy( mixinType ); } @Override - public <T> T metaInfo( Class<T> infoType ) + public <M> M metaInfo( Class<M> infoType ) { return ServiceReferenceInstance.this.metaInfo( infoType ); } @Override - public Iterable<Class<?>> types() + public Stream<Class<?>> types() { return ServiceReferenceInstance.this.types(); } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java index 7400faf..31e6738 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesInstance.java @@ -15,13 +15,14 @@ package org.apache.zest.runtime.service; import java.util.List; -import java.util.function.Predicate; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationEventListenerRegistration; import org.apache.zest.api.activation.ActivationException; import org.apache.zest.api.activation.PassivationException; import org.apache.zest.api.common.Visibility; +import org.apache.zest.api.service.ServiceDescriptor; import org.apache.zest.api.service.ServiceReference; import org.apache.zest.functional.Iterables; import org.apache.zest.runtime.activation.ActivationDelegate; @@ -37,10 +38,10 @@ public class ServicesInstance implements Activation, ActivationEventListenerRegistration { private final ServicesModel servicesModel; - private final List<ServiceReference> serviceReferences; + private final List<ServiceReference<?>> serviceReferences; private final ActivationDelegate activation = new ActivationDelegate( this, false ); - public ServicesInstance( ServicesModel servicesModel, List<ServiceReference> serviceReferences ) + public ServicesInstance( ServicesModel servicesModel, List<ServiceReference<?>> serviceReferences ) { this.servicesModel = servicesModel; this.serviceReferences = serviceReferences; @@ -50,6 +51,11 @@ public class ServicesInstance } } + public Stream<ServiceModel> models() + { + return servicesModel.stream(); + } + @Override public void activate() throws ActivationException @@ -65,18 +71,11 @@ public class ServicesInstance activation.passivate(); } - public Iterable<ServiceReference> visibleServices( final Visibility visibility ) + public Stream<ServiceReference<?>> visibleServices( final Visibility visibility ) { - return Iterables.filter( new Predicate<ServiceReference>() - { - @Override - public boolean test( ServiceReference item ) - { - return ( (ServiceReferenceInstance) item ).serviceDescriptor() - .visibility() - .ordinal() >= visibility.ordinal(); - } - }, serviceReferences ); + return serviceReferences.stream() + .filter( item -> ( (ServiceReferenceInstance) item ).serviceDescriptor() + .visibility().ordinal() >= visibility.ordinal() ); } @Override @@ -105,4 +104,9 @@ public class ServicesInstance { activation.deregisterActivationEventListener( listener ); } + + public Stream<? extends ServiceDescriptor> stream() + { + return servicesModel.stream(); + } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java index ee8b46e..2fbfb32 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/service/ServicesModel.java @@ -16,6 +16,7 @@ package org.apache.zest.runtime.service; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.service.ServiceReference; import org.apache.zest.functional.HierarchicalVisitor; import org.apache.zest.functional.VisitableHierarchy; @@ -27,16 +28,16 @@ import org.apache.zest.runtime.structure.ModuleInstance; public class ServicesModel implements VisitableHierarchy<Object, Object> { - private final Iterable<ServiceModel> serviceModels; + private final List<ServiceModel> serviceModels; - public ServicesModel( Iterable<ServiceModel> serviceModels ) + public ServicesModel( List<ServiceModel> serviceModels ) { this.serviceModels = serviceModels; } public ServicesInstance newInstance( ModuleInstance module ) { - List<ServiceReference> serviceReferences = new ArrayList<ServiceReference>(); + List<ServiceReference<?>> serviceReferences = new ArrayList<>(); for( ServiceModel serviceModel : serviceModels ) { ServiceReferenceInstance serviceReferenceInstance = new ServiceReferenceInstance( serviceModel, module ); @@ -62,4 +63,9 @@ public class ServicesModel } return visitor.visitLeave( this ); } + + public Stream<ServiceModel> stream() + { + return serviceModels.stream(); + } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java index 9a228ad..0ca0b52 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/ApplicationInstance.java @@ -16,6 +16,7 @@ package org.apache.zest.runtime.structure; import java.util.ArrayList; import java.util.List; +import java.util.stream.Stream; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationException; import org.apache.zest.api.activation.PassivationException; @@ -108,6 +109,12 @@ public class ApplicationInstance } @Override + public Stream<? extends Layer> layers() + { + return layerInstances.stream(); + } + + @Override public ApplicationDescriptor descriptor() { return applicationModel; http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java index f4c9cca..5b206d8 100644 --- a/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java +++ b/core/runtime/src/main/java/org/apache/zest/runtime/structure/LayerInstance.java @@ -16,23 +16,22 @@ package org.apache.zest.runtime.structure; import java.util.ArrayList; import java.util.List; -import java.util.function.Function; +import java.util.stream.Stream; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationException; import org.apache.zest.api.activation.PassivationException; 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; import org.apache.zest.api.service.ServiceReference; import org.apache.zest.api.structure.Layer; +import org.apache.zest.api.structure.Module; import org.apache.zest.api.value.ValueDescriptor; import org.apache.zest.runtime.activation.ActivationDelegate; import org.apache.zest.spi.module.ModelModule; -import static org.apache.zest.functional.Iterables.flattenIterables; -import static org.apache.zest.functional.Iterables.map; - /** * Instance of a Zest application layer. Contains a list of modules which are managed by this layer. */ @@ -110,6 +109,12 @@ public class LayerInstance activation.deregisterActivationEventListener( listener ); } + @Override + public Stream<? extends Module> modules() + { + return moduleInstances.stream(); + } + // Other methods /* package */ void addModule( ModuleInstance module ) { @@ -132,69 +137,29 @@ public class LayerInstance return usedLayersInstance; } - /* package */ Iterable<ModelModule<ObjectDescriptor>> visibleObjects( final Visibility visibility ) + /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleObjects( final Visibility visibility ) { - return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ObjectDescriptor>>>() - { - - @Override - public Iterable<ModelModule<ObjectDescriptor>> apply( ModuleInstance moduleInstance ) - { - return moduleInstance.visibleObjects( visibility ); - } - }, moduleInstances ) ); + return moduleInstances.stream().flatMap( module -> module.visibleObjects( visibility ) ); } - /* package */ Iterable<ModelModule<TransientDescriptor>> visibleTransients( final Visibility visibility ) + /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleTransients( final Visibility visibility ) { - return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<TransientDescriptor>>>() - { - - @Override - public Iterable<ModelModule<TransientDescriptor>> apply( ModuleInstance moduleInstance ) - { - return moduleInstance.visibleTransients( visibility ); - } - }, moduleInstances ) ); + return moduleInstances.stream().flatMap( module -> module.visibleTransients( visibility ) ); } - /* package */ Iterable<ModelModule<EntityDescriptor>> visibleEntities( final Visibility visibility ) + /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleEntities( final Visibility visibility ) { - return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<EntityDescriptor>>>() - { - - @Override - public Iterable<ModelModule<EntityDescriptor>> apply( ModuleInstance moduleInstance ) - { - return moduleInstance.visibleEntities( visibility ); - } - }, moduleInstances ) ); + return moduleInstances.stream().flatMap( module -> module.visibleEntities( visibility ) ); } - /* package */ Iterable<ModelModule<ValueDescriptor>> visibleValues( final Visibility visibility ) + /* package */ Stream<ModelModule<? extends ModelDescriptor>> visibleValues( final Visibility visibility ) { - return flattenIterables( map( new Function<ModuleInstance, Iterable<ModelModule<ValueDescriptor>>>() - { - - @Override - public Iterable<ModelModule<ValueDescriptor>> apply( ModuleInstance moduleInstance ) - { - return moduleInstance.visibleValues( visibility ); - } - }, moduleInstances ) ); + return moduleInstances.stream().flatMap( module -> module.visibleValues( visibility ) ); } - /* package */ Iterable<ServiceReference<?>> visibleServices( final Visibility visibility ) + /* package */ Stream<ServiceReference<?>> visibleServices( final Visibility visibility ) { - return flattenIterables( map( new Function<ModuleInstance, Iterable<ServiceReference<?>>>() - { - - @Override - public Iterable<ServiceReference<?>> apply( ModuleInstance moduleInstance ) - { - return moduleInstance.visibleServices( visibility ); - } - }, moduleInstances ) ); + return moduleInstances.stream().flatMap( module -> module.visibleServices( visibility ) ); } /* package */ ModuleInstance findModule( String moduleName ) http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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 bdf002c..2237dfa 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 @@ -28,6 +28,7 @@ import java.util.concurrent.ConcurrentHashMap; import java.util.function.BiFunction; import java.util.function.Function; import java.util.function.Predicate; +import java.util.stream.Stream; import org.apache.zest.api.activation.Activation; import org.apache.zest.api.activation.ActivationEventListener; import org.apache.zest.api.activation.ActivationException; @@ -52,6 +53,7 @@ import org.apache.zest.api.property.Property; import org.apache.zest.api.property.PropertyDescriptor; import org.apache.zest.api.query.QueryBuilder; import org.apache.zest.api.query.QueryBuilderFactory; +import org.apache.zest.api.service.ImportedServiceDescriptor; import org.apache.zest.api.service.NoSuchServiceException; import org.apache.zest.api.service.ServiceDescriptor; import org.apache.zest.api.service.ServiceReference; @@ -67,7 +69,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.Specifications; import org.apache.zest.runtime.activation.ActivationDelegate; import org.apache.zest.runtime.composite.FunctionStateResolver; import org.apache.zest.runtime.composite.StateResolver; @@ -83,7 +84,6 @@ import org.apache.zest.runtime.injection.InjectionContext; import org.apache.zest.runtime.object.ObjectModel; import org.apache.zest.runtime.object.ObjectsModel; import org.apache.zest.runtime.property.PropertyInstance; -import org.apache.zest.runtime.property.PropertyModel; import org.apache.zest.runtime.query.QueryBuilderFactoryImpl; import org.apache.zest.runtime.service.ImportedServicesInstance; import org.apache.zest.runtime.service.ImportedServicesModel; @@ -102,15 +102,11 @@ import org.apache.zest.spi.module.ModelModule; import org.apache.zest.spi.module.ModuleSpi; import org.apache.zest.valueserialization.orgjson.OrgJsonValueSerialization; +import static java.util.stream.Stream.concat; import static org.apache.zest.api.util.Classes.RAW_CLASS; import static org.apache.zest.api.util.Classes.modelTypeSpecification; -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.iterable; -import static org.apache.zest.functional.Iterables.map; -import static org.apache.zest.functional.Iterables.toList; +import static org.apache.zest.runtime.legacy.Specifications.translate; /** * Instance of a Zest Module. Contains the various composites for this Module. @@ -262,6 +258,42 @@ public class ModuleInstance } } + @Override + public Stream<? extends TransientDescriptor> transientComposites() + { + return transients.stream(); + } + + @Override + public Stream<? extends ValueDescriptor> valueComposites() + { + return values.stream(); + } + + @Override + public Stream<? extends ServiceDescriptor> serviceComposites() + { + return services.stream(); + } + + @Override + public Stream<? extends EntityDescriptor> entityComposites() + { + return entities.stream(); + } + + @Override + public Stream<? extends ImportedServiceDescriptor> importedServices() + { + return importedServices.stream(); + } + + @Override + public Stream<? extends ObjectDescriptor> objects() + { + return objects.stream(); + } + // Implementation of MetaInfoHolder @Override public <T> T metaInfo( Class<T> infoType ) @@ -316,12 +348,15 @@ public class ModuleInstance } Map<AccessibleObject, Property<?>> properties = new HashMap<>(); - for( PropertyModel propertyModel : modelModule.model().state().properties() ) - { - Property<?> property = new PropertyInstance<>( propertyModel.getBuilderInfo(), - propertyModel.initialValue( modelModule.module() ) ); - properties.put( propertyModel.accessor(), property ); - } + modelModule.model().state().properties().forEach( propertyModel -> + { + Property<?> property = new PropertyInstance<>( propertyModel + .getBuilderInfo(), + propertyModel + .initialValue( modelModule + .module() ) ); + properties.put( propertyModel.accessor(), property ); + } ); TransientStateInstance state = new TransientStateInstance( properties ); @@ -427,7 +462,7 @@ public class ModuleInstance NullArgumentException.validateNotNull( "prototype", prototype ); ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) prototype ); - Class<Composite> valueType = (Class<Composite>) first( valueInstance.types() ); + Class<Composite> valueType = (Class<Composite>) valueInstance.types().findFirst().orElse( null ); ModelModule<ValueModel> modelModule = typeLookup.lookupValueModel( valueType ); @@ -681,34 +716,38 @@ public class ModuleInstance return metrics; } - public Iterable<ModelModule<ObjectDescriptor>> visibleObjects( Visibility visibility ) + public Stream<ModelModule<? extends ModelDescriptor>> visibleObjects( Visibility visibility ) { - return map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ), - filter( new Visibilitypredicate( visibility ), objects.models() ) ); + return objects.stream() + .filter( new Visibilitypredicate( visibility ) ) + .map( ModelModule.<ObjectDescriptor>modelModuleFunction( this ) ); } - public Iterable<ModelModule<TransientDescriptor>> visibleTransients( Visibility visibility ) + public Stream<ModelModule<? extends ModelDescriptor>> visibleTransients( Visibility visibility ) { - return map( ModelModule.<TransientDescriptor>modelModuleFunction( this ), - filter( new Visibilitypredicate( visibility ), transients.models() ) ); + return transients.models() + .filter( new Visibilitypredicate( visibility ) ) + .map( ModelModule.<TransientDescriptor>modelModuleFunction( this ) ); } - public Iterable<ModelModule<EntityDescriptor>> visibleEntities( Visibility visibility ) + public Stream<ModelModule<? extends ModelDescriptor>> visibleEntities( Visibility visibility ) { - return map( ModelModule.<EntityDescriptor>modelModuleFunction( this ), - filter( new Visibilitypredicate( visibility ), entities.models() ) ); + return entities.models() + .filter( new Visibilitypredicate( visibility ) ) + .map( ModelModule.<EntityDescriptor>modelModuleFunction( this ) ); } - public Iterable<ModelModule<ValueDescriptor>> visibleValues( Visibility visibility ) + public Stream<ModelModule<? extends ModelDescriptor>> visibleValues( Visibility visibility ) { - return map( ModelModule.<ValueDescriptor>modelModuleFunction( this ), - filter( new Visibilitypredicate( visibility ), values.models() ) ); + return values.models() + .filter( new Visibilitypredicate( visibility ) ) + .map( ModelModule.<ValueDescriptor>modelModuleFunction( this ) ); } - public Iterable<ServiceReference<?>> visibleServices( Visibility visibility ) + public Stream<ServiceReference<?>> visibleServices( Visibility visibility ) { - return flatten( services.visibleServices( visibility ), - importedServices.visibleServices( visibility ) ); + return concat( services.visibleServices( visibility ), + importedServices.visibleServices( visibility ) ); } // Module ClassLoader @@ -733,59 +772,76 @@ public class ModuleInstance if( clazz == null ) { Predicate<ModelDescriptor> modelTypeSpecification = modelTypeSpecification( name ); - Predicate<ModelModule<ModelDescriptor>> translate = Specifications.translate( ModelModule.modelFunction(), modelTypeSpecification ); - // Check module + Predicate<ModelModule<? extends ModelDescriptor>> translation = translate( ModelModule.modelFunction(), modelTypeSpecification ); + Stream<ModelModule<? extends ModelDescriptor>> moduleModels = concat( + moduleInstance.visibleObjects( Visibility.module ), + concat( + moduleInstance.visibleEntities( Visibility.module ), + concat( + moduleInstance.visibleTransients( Visibility.module ), + moduleInstance.visibleValues( Visibility.module ) + ) + ) + ).filter( translation ); + + Iterator<ModelModule<? extends ModelDescriptor>> moduleModelsIter = moduleModels.iterator(); + if( moduleModelsIter.hasNext() ) { - Iterable<ModelModule<ModelDescriptor>> i = cast( flatten( - cast( moduleInstance.visibleObjects( Visibility.module ) ), - cast( moduleInstance.visibleEntities( Visibility.module ) ), - cast( moduleInstance.visibleTransients( Visibility.module ) ), - cast( moduleInstance.visibleValues( Visibility.module ) ) ) ); - - Iterable<ModelModule<ModelDescriptor>> moduleModels = filter( translate, i ); - Iterator<ModelModule<ModelDescriptor>> iter = moduleModels.iterator(); - if( iter.hasNext() ) - { - clazz = first( iter.next().model().types() ); + clazz = moduleModelsIter.next().model().types().findFirst().orElse( null ); - if( iter.hasNext() ) - { - // Ambiguous exception - throw new ClassNotFoundException( - name, - new AmbiguousTypeException( - "More than one model matches the classname " + name + ":" + toList( moduleModels ) - ) - ); - } + if( moduleModelsIter.hasNext() ) + { + // Ambiguous exception + throw new ClassNotFoundException( + name, + new AmbiguousTypeException( + "More than one model matches the classname " + name + ":" + moduleModelsIter.next() + ) + ); } } // Check layer if( clazz == null ) { - Iterable<ModelModule<ModelDescriptor>> flatten = cast( flatten( - cast( moduleInstance.layerInstance().visibleObjects( Visibility.layer ) ), - cast( moduleInstance.layerInstance().visibleTransients( Visibility.layer ) ), - cast( moduleInstance.layerInstance().visibleEntities( Visibility.layer ) ), - cast( moduleInstance.layerInstance().visibleValues( Visibility.layer ) ), - cast( moduleInstance.layerInstance().visibleObjects( Visibility.application ) ), - cast( moduleInstance.layerInstance().visibleTransients( Visibility.application ) ), - cast( moduleInstance.layerInstance().visibleEntities( Visibility.application ) ), - cast( moduleInstance.layerInstance().visibleValues( Visibility.application ) ) ) ); - Iterable<ModelModule<ModelDescriptor>> layerModels = filter( translate, flatten ); - Iterator<ModelModule<ModelDescriptor>> iter = layerModels.iterator(); - if( iter.hasNext() ) + Stream<ModelModule<? extends ModelDescriptor>> modelsInLayer1 = concat( + moduleInstance.layerInstance().visibleObjects( Visibility.layer ), + concat( + moduleInstance.layerInstance().visibleEntities( Visibility.layer ), + concat( + moduleInstance.layerInstance().visibleTransients( Visibility.layer ), + moduleInstance.layerInstance().visibleValues( Visibility.layer ) + ) + ) + ); + // TODO: What does this actually represents?? Shouldn't 'application' visible models already be handed back from lasyerInstance().visibleXyz() ?? + Stream<ModelModule<? extends ModelDescriptor>> modelsInLayer2 = concat( + moduleInstance.layerInstance().visibleObjects( Visibility.application ), + concat( + moduleInstance.layerInstance().visibleEntities( Visibility.application ), + concat( + moduleInstance.layerInstance().visibleTransients( Visibility.application ), + moduleInstance.layerInstance().visibleValues( Visibility.application ) + ) + ) + ); + Stream<ModelModule<? extends ModelDescriptor>> layerModels = concat( + modelsInLayer1, + modelsInLayer2 + ).filter( translation ); + + Iterator<ModelModule<? extends ModelDescriptor>> layerModelsIter = layerModels.iterator(); + if( layerModelsIter.hasNext() ) { - clazz = first( iter.next().model().types() ); + clazz = layerModelsIter.next().model().types().findFirst().orElse( null ); - if( iter.hasNext() ) + if( layerModelsIter.hasNext() ) { // Ambiguous exception throw new ClassNotFoundException( name, new AmbiguousTypeException( - "More than one model matches the classname " + name + ":" + toList( layerModels ) ) + "More than one model matches the classname " + name + ":" + layerModelsIter.next() ) ); } } @@ -794,24 +850,29 @@ public class ModuleInstance // Check used layers if( clazz == null ) { - Iterable<ModelModule<ModelDescriptor>> flatten = cast( flatten( - cast( moduleInstance.layerInstance().usedLayersInstance().visibleObjects() ), - cast( moduleInstance.layerInstance().usedLayersInstance().visibleTransients() ), - cast( moduleInstance.layerInstance().usedLayersInstance().visibleEntities() ), - cast( moduleInstance.layerInstance().usedLayersInstance().visibleValues() ) ) ); - Iterable<ModelModule<ModelDescriptor>> usedLayersModels = filter( translate, flatten ); - Iterator<ModelModule<ModelDescriptor>> iter = usedLayersModels.iterator(); - if( iter.hasNext() ) + Stream<ModelModule<? extends ModelDescriptor>> usedLayersModels = concat( + moduleInstance.layerInstance().usedLayersInstance().visibleObjects(), + concat( + moduleInstance.layerInstance().usedLayersInstance().visibleEntities(), + concat( + moduleInstance.layerInstance().usedLayersInstance().visibleTransients(), + moduleInstance.layerInstance().usedLayersInstance().visibleValues() + ) + ) + ).filter( translation ); + + Iterator<ModelModule<? extends ModelDescriptor>> usedLayersModelsIter = usedLayersModels.iterator(); + if( usedLayersModelsIter.hasNext() ) { - clazz = first( iter.next().model().types() ); + clazz = usedLayersModelsIter.next().model().types().findFirst().orElse( null ); - if( iter.hasNext() ) + if( usedLayersModelsIter.hasNext() ) { // Ambiguous exception throw new ClassNotFoundException( name, new AmbiguousTypeException( - "More than one model matches the classname " + name + ":" + toList( usedLayersModels ) + "More than one model matches the classname " + name + ":" + usedLayersModelsIter.next() ) ); } @@ -829,45 +890,68 @@ public class ModuleInstance } } - public Iterable<ModelModule<ValueDescriptor>> findVisibleValueTypes() + public Stream<ModelModule<? extends ModelDescriptor>> findVisibleValueTypes() { - return flatten( visibleValues( Visibility.module ), - layerInstance().visibleValues( Visibility.layer ), - layerInstance().visibleValues( Visibility.application ), - layerInstance().usedLayersInstance().visibleValues() + return concat( visibleValues( Visibility.module ), + concat( + layerInstance().visibleValues( Visibility.layer ), + concat( + layerInstance().visibleValues( Visibility.application ), + layerInstance().usedLayersInstance().visibleValues() + ) + ) ); } - public Iterable<ModelModule<EntityDescriptor>> findVisibleEntityTypes() + public Stream<ModelModule<? extends ModelDescriptor>> findVisibleEntityTypes() { - return flatten( visibleEntities( Visibility.module ), - layerInstance().visibleEntities( Visibility.layer ), - layerInstance().visibleEntities( Visibility.application ), - layerInstance().usedLayersInstance().visibleEntities() + return concat( visibleEntities( Visibility.module ), + concat( + layerInstance().visibleEntities( Visibility.layer ), + concat( + layerInstance().visibleEntities( Visibility.application ), + layerInstance().usedLayersInstance().visibleEntities() + ) + ) ); } - public Iterable<ModelModule<TransientDescriptor>> findVisibleTransientTypes() + + public Stream<ModelModule<? extends ModelDescriptor>> findVisibleTransientTypes() { - return flatten( visibleTransients( Visibility.module ), - layerInstance().visibleTransients( Visibility.layer ), - layerInstance().visibleTransients( Visibility.application ), - layerInstance().usedLayersInstance().visibleTransients() + return concat( visibleTransients( Visibility.module ), + concat( + layerInstance().visibleTransients( Visibility.layer ), + concat( + layerInstance().visibleTransients( Visibility.application ), + layerInstance().usedLayersInstance().visibleTransients() + ) + ) ); } - public Iterable<ModelModule<ServiceDescriptor>> findVisibleServiceTypes() + + public Stream<ServiceReference<?>> findVisibleServiceTypes() { - return flatten( visibleServices( Visibility.module ), - layerInstance().visibleServices( Visibility.layer ), - layerInstance().visibleServices( Visibility.application ), - layerInstance().usedLayersInstance().visibleServices() + return concat( visibleServices( Visibility.module ), + concat( + layerInstance().visibleServices( Visibility.layer ), + concat( + layerInstance().visibleServices( Visibility.application ), + layerInstance().usedLayersInstance().visibleServices() + ) + ) ); } - public Iterable<ModelModule<ObjectDescriptor>> findVisibleObjectTypes() + + public Stream<ModelModule<? extends ModelDescriptor>> findVisibleObjectTypes() { - return flatten( visibleObjects( Visibility.module ), - layerInstance().visibleObjects( Visibility.layer ), - layerInstance().visibleObjects( Visibility.application ), - layerInstance().usedLayersInstance().visibleObjects() + return concat( visibleObjects( Visibility.module ), + concat( + layerInstance().visibleObjects( Visibility.layer ), + concat( + layerInstance().visibleObjects( Visibility.application ), + layerInstance().usedLayersInstance().visibleObjects() + ) + ) ); } } http://git-wip-us.apache.org/repos/asf/zest-java/blob/bd6fbad9/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 af796fa..5c89373 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 @@ -72,8 +72,6 @@ import org.apache.zest.spi.query.QueryBuilderSPI; import org.apache.zest.spi.query.QuerySource; import static org.apache.zest.api.entity.EntityReference.parseEntityReference; -import static org.apache.zest.functional.Iterables.first; -import static org.apache.zest.functional.Iterables.map; /** * JAVADOC @@ -184,9 +182,8 @@ public class ModuleUnitOfWork { throw new EntityTypeNotFoundException( type.getName(), module.name(), - map( ModelModule.toStringFunction, - module.findVisibleEntityTypes() - ) ); + module.findVisibleEntityTypes().map( ModelModule.toStringFunction ) + ); } EntityStore entityStore = model.module().entityStore(); @@ -199,7 +196,7 @@ public class ModuleUnitOfWork { throw new NoSuchServiceException( IdentityGenerator.class.getName(), model.module().name() ); } - identity = idGen.generate( first( model.model().types() ) ); + identity = idGen.generate( model.model().types().findFirst().orElse( null ) ); } EntityBuilder<T> builder; @@ -248,9 +245,8 @@ public class ModuleUnitOfWork { throw new EntityTypeNotFoundException( type.getName(), module.name(), - map( ModelModule.toStringFunction, - module.findVisibleEntityTypes() - ) ); + module.findVisibleEntityTypes().map( ModelModule.toStringFunction ) + ); } EntityStore entityStore = model.module().entityStore(); @@ -272,7 +268,7 @@ public class ModuleUnitOfWork { throw new NoSuchServiceException( IdentityGenerator.class.getName(), model.module().name() ); } - identity = idGen.generate( first( model.model().types() ) ); + identity = idGen.generate( model.model().types().findFirst().orElse( null )); } } @@ -293,9 +289,8 @@ public class ModuleUnitOfWork { throw new EntityTypeNotFoundException( type.getName(), module.name(), - map( ModelModule.toStringFunction, - module.findVisibleEntityTypes() - ) ); + module.findVisibleEntityTypes().map( ModelModule.toStringFunction ) + ); } return uow.get( parseEntityReference( identity ), this, models, type ); @@ -309,7 +304,7 @@ public class ModuleUnitOfWork EntityComposite entityComposite = (EntityComposite) entity; EntityInstance compositeInstance = EntityInstance.entityInstanceOf( entityComposite ); ModelModule<EntityModel> model = new ModelModule<>( compositeInstance.module(), compositeInstance.entityModel() ); - Class<T> type = (Class<T>) first( compositeInstance.types() ); + Class<T> type = (Class<T>) compositeInstance.types().findFirst().orElse( null ); return uow.get( compositeInstance.identity(), this, Collections.singletonList( model ), type ); }
