http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InvocationInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InvocationInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InvocationInjectionProviderFactory.java deleted file mode 100644 index d7348ff..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InvocationInjectionProviderFactory.java +++ /dev/null @@ -1,117 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.injection.provider; - -import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.Method; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import org.apache.zest.api.util.Classes; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.runtime.composite.CompositeMethodModel; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -/** - * JAVADOC - */ -public final class InvocationInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - @SuppressWarnings( "raw" ) - public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - Class injectionClass = Classes.RAW_CLASS.map( dependencyModel.injectionType() ); - if( injectionClass.equals( Method.class ) || - injectionClass.equals( AnnotatedElement.class ) || - injectionClass.equals( Iterable.class ) || - Annotation.class.isAssignableFrom( injectionClass ) ) - { - return new InvocationDependencyResolution( resolution, dependencyModel ); - } - else - { - String injectedTo = dependencyModel.injectedClass().getName(); - throw new InvalidInjectionException( "Invalid injection type " + injectionClass + " in " + injectedTo ); - } - } - - private static class InvocationDependencyResolution - implements InjectionProvider - { - private final Resolution resolution; - private final DependencyModel dependencyModel; - - private InvocationDependencyResolution( Resolution resolution, DependencyModel dependencyModel ) - { - this.resolution = resolution; - this.dependencyModel = dependencyModel; - } - - @Override - @SuppressWarnings( {"raw", "unchecked"} ) - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - Class injectionClass = Classes.RAW_CLASS.map( dependencyModel.injectionType() ); - final CompositeMethodModel methodModel = resolution.method(); - if( injectionClass.equals( Method.class ) ) - { - return methodModel.method(); - } - - final AnnotatedElement annotatedElement = methodModel.annotatedElement(); - if( injectionClass.equals( AnnotatedElement.class ) ) - { - return annotatedElement; - } - final Annotation annotation = annotatedElement.getAnnotation( injectionClass ); - if( annotation != null ) - { - return annotation; - } - if( dependencyModel.injectionType() instanceof Class<?> ) - { - return annotatedElement.getAnnotation( (Class<Annotation>) dependencyModel.injectionType() ); - } - if( dependencyModel.injectionType() instanceof ParameterizedType ) - { - ParameterizedType injectionType = (ParameterizedType) dependencyModel.injectionType(); - Type rawType = injectionType.getRawType(); - Type[] actualTypeArguments = injectionType.getActualTypeArguments(); - boolean isAnIterable = rawType.equals( Iterable.class ); - boolean haveOneGenericType = actualTypeArguments.length == 1; - boolean thatIsOfTypeMethod = actualTypeArguments[ 0 ].equals( Method.class ); - if( isAnIterable && haveOneGenericType && thatIsOfTypeMethod ) - { - Class<?> injectedClass = dependencyModel.injectedClass(); - Iterable<Method> result = methodModel.invocationsFor( injectedClass ); - return result; - } - } - return null; - } - } -} \ No newline at end of file
http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ModifiesInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ModifiesInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ModifiesInjectionProviderFactory.java deleted file mode 100644 index fedb010..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ModifiesInjectionProviderFactory.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.injection.provider; - -import org.apache.zest.api.composite.CompositeDescriptor; -import org.apache.zest.api.util.Classes; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -/** - * JAVADOC - */ -public final class ModifiesInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - public InjectionProvider newInjectionProvider( Resolution bindingContext, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - if( bindingContext.model() instanceof CompositeDescriptor ) - { - Class<?> type = Classes.RAW_CLASS.map( dependencyModel.injectionType() ); - if( type.isAssignableFrom( dependencyModel.injectedClass() ) ) - { - return new ModifiedInjectionProvider(); - } - else - { - throw new InvalidInjectionException( "Composite " + bindingContext.model() + " does not implement @ConcernFor type " + type - .getName() + " in modifier " + dependencyModel.injectedClass().getName() ); - } - } - else - { - throw new InvalidInjectionException( "The class " + dependencyModel.injectedClass() - .getName() + " is not a modifier" ); - } - } - - private static class ModifiedInjectionProvider - implements InjectionProvider - { - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - return context.next(); - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java deleted file mode 100644 index 4c5bb26..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ServiceInjectionProviderFactory.java +++ /dev/null @@ -1,225 +0,0 @@ -/* - * Copyright (c) 2007, 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.injection.provider; - -import java.lang.annotation.Annotation; -import java.lang.reflect.ParameterizedType; -import java.lang.reflect.Type; -import org.apache.zest.api.service.NoSuchServiceException; -import org.apache.zest.api.service.ServiceReference; -import org.apache.zest.api.service.qualifier.Qualifier; -import org.apache.zest.api.util.Annotations; -import org.apache.zest.api.util.Classes; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.functional.Function; -import org.apache.zest.functional.Iterables; -import org.apache.zest.functional.Specification; -import org.apache.zest.functional.Specifications; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -import static org.apache.zest.api.util.Annotations.hasAnnotation; -import static org.apache.zest.functional.Iterables.filter; -import static org.apache.zest.functional.Iterables.first; -import static org.apache.zest.functional.Iterables.iterable; - -public final class ServiceInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - @SuppressWarnings( "unchecked" ) - public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - // TODO This could be changed to allow multiple @Qualifier annotations - Annotation qualifierAnnotation = first( filter( Specifications.translate( Annotations.type(), hasAnnotation( Qualifier.class ) ), iterable( dependencyModel - .annotations() ) ) ); - Specification<ServiceReference<?>> serviceQualifier = null; - if( qualifierAnnotation != null ) - { - Qualifier qualifier = qualifierAnnotation.annotationType().getAnnotation( Qualifier.class ); - try - { - serviceQualifier = qualifier.value().newInstance().qualifier( qualifierAnnotation ); - } - catch( Exception e ) - { - throw new InvalidInjectionException( "Could not instantiate qualifier serviceQualifier", e ); - } - } - - if( dependencyModel.rawInjectionType().equals( Iterable.class ) ) - { - Type iterableType = ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ]; - if( Classes.RAW_CLASS.map( iterableType ).equals( ServiceReference.class ) ) - { - // @Service Iterable<ServiceReference<MyService<Foo>> serviceRefs - Type serviceType = ( (ParameterizedType) iterableType ).getActualTypeArguments()[ 0 ]; - - return new IterableServiceReferenceProvider( serviceType, serviceQualifier ); - } - else - { - // @Service Iterable<MyService<Foo>> services - return new IterableServiceProvider( iterableType, serviceQualifier ); - } - } - else if( dependencyModel.rawInjectionType().equals( ServiceReference.class ) ) - { - // @Service ServiceReference<MyService<Foo>> serviceRef - Type referencedType = ( (ParameterizedType) dependencyModel.injectionType() ).getActualTypeArguments()[ 0 ]; - return new ServiceReferenceProvider( referencedType, serviceQualifier ); - } - else - { - // @Service MyService<Foo> service - return new ServiceProvider( dependencyModel.injectionType(), serviceQualifier ); - } - } - - private static class IterableServiceReferenceProvider - extends ServiceInjectionProvider - { - private IterableServiceReferenceProvider( Type serviceType, - Specification<ServiceReference<?>> serviceQualifier - ) - { - super( serviceType, serviceQualifier ); - } - - @Override - public synchronized Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - return getServiceReferences( context ); - } - } - - private static class IterableServiceProvider - extends ServiceInjectionProvider - implements Function<ServiceReference<?>, Object> - { - private IterableServiceProvider( Type serviceType, - Specification<ServiceReference<?>> serviceQualifier - ) - { - super( serviceType, serviceQualifier ); - } - - @Override - public synchronized Object provideInjection( final InjectionContext context ) - throws InjectionProviderException - { - return Iterables.map( this, getServiceReferences( context ) ); - } - - @Override - public Object map( ServiceReference<?> objectServiceReference ) - { - return objectServiceReference.get(); - } - } - - private static class ServiceReferenceProvider - extends ServiceInjectionProvider - { - ServiceReferenceProvider( Type serviceType, Specification<ServiceReference<?>> qualifier ) - { - super( serviceType, qualifier ); - } - - @Override - public synchronized Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - return getServiceReference( context ); - } - } - - private static class ServiceProvider - extends ServiceInjectionProvider - { - ServiceProvider( Type serviceType, Specification<ServiceReference<?>> qualifier ) - { - super( serviceType, qualifier ); - } - - @Override - public synchronized Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - ServiceReference<?> ref = getServiceReference( context ); - - if( ref != null ) - { - return ref.get(); - } - else - { - return null; - } - } - } - - private abstract static class ServiceInjectionProvider - implements InjectionProvider - { - private final Type serviceType; - private final Specification<ServiceReference<?>> serviceQualifier; - - private ServiceInjectionProvider( Type serviceType, - Specification<ServiceReference<?>> serviceQualifier - ) - { - this.serviceType = serviceType; - this.serviceQualifier = serviceQualifier; - } - - protected ServiceReference<Object> getServiceReference( InjectionContext context ) - { - try - { - if( serviceQualifier == null ) - { - return context.module().findService( serviceType ); - } - else - { - return Iterables.first( Iterables.filter( serviceQualifier, context.module() - .findServices( serviceType ) ) ); - } - } - catch( NoSuchServiceException e ) - { - return null; - } - } - - protected Iterable<ServiceReference<Object>> getServiceReferences( final InjectionContext context ) - { - if( serviceQualifier == null ) - { - return context.module().findServices( serviceType ); - } - else - { - return Iterables.filter( serviceQualifier, context.module().findServices( serviceType ) ); - } - } - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StateInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StateInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StateInjectionProviderFactory.java deleted file mode 100644 index 8d0bcc7..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StateInjectionProviderFactory.java +++ /dev/null @@ -1,273 +0,0 @@ -/* - * Copyright (c) 2008-2011, Rickard Ãberg. All Rights Reserved. - * Copyright (c) 2008-2013, Niclas Hedhman. All Rights Reserved. - * Copyright (c) 2014, Paul Merlin. 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.injection.provider; - -import org.apache.zest.api.association.AbstractAssociation; -import org.apache.zest.api.association.Association; -import org.apache.zest.api.association.AssociationDescriptor; -import org.apache.zest.api.association.AssociationStateDescriptor; -import org.apache.zest.api.association.AssociationStateHolder; -import org.apache.zest.api.association.ManyAssociation; -import org.apache.zest.api.association.NamedAssociation; -import org.apache.zest.api.composite.StateDescriptor; -import org.apache.zest.api.composite.StatefulCompositeDescriptor; -import org.apache.zest.api.entity.EntityDescriptor; -import org.apache.zest.api.injection.scope.State; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.property.PropertyDescriptor; -import org.apache.zest.api.property.StateHolder; -import org.apache.zest.api.unitofwork.UnitOfWork; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.runtime.entity.EntityInstance; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -/** - * JAVADOC - */ -public final class StateInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - if( StateHolder.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - // @State StateHolder properties; - return new StateInjectionProvider(); - } - else if( UnitOfWork.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - if( !( resolution.model() instanceof EntityDescriptor ) ) - { - throw new InvalidInjectionException( "Only EntityComposites can be injected with '@State UnitOfWork'" ); - } - return new UnitOfWorkInjectionProvider(); - } - else if( Property.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - // @State Property<String> name; - StateDescriptor descriptor; - descriptor = ( (StatefulCompositeDescriptor) resolution.model() ).state(); - - State annotation = (State) dependencyModel.injectionAnnotation(); - String name; - if( annotation.value().isEmpty() ) - { - name = resolution.field().getName(); - } - else - { - name = annotation.value(); - } - - PropertyDescriptor propertyDescriptor = descriptor.findPropertyModelByName( name ); - return new PropertyInjectionProvider( propertyDescriptor ); - } - else if( Association.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - // @State Association<MyEntity> name; - AssociationStateDescriptor descriptor = ( (EntityDescriptor) resolution.model() ).state(); - State annotation = (State) dependencyModel.injectionAnnotation(); - String name; - if( annotation.value().isEmpty() ) - { - name = resolution.field().getName(); - } - else - { - name = annotation.value(); - } - AssociationDescriptor model = descriptor.getAssociationByName( name ); - return new AssociationInjectionProvider( model ); - } - else if( ManyAssociation.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - // @State ManyAssociation<MyEntity> name; - AssociationStateDescriptor descriptor = ( (EntityDescriptor) resolution.model() ).state(); - State annotation = (State) dependencyModel.injectionAnnotation(); - String name; - if( annotation.value().isEmpty() ) - { - name = resolution.field().getName(); - } - else - { - name = annotation.value(); - } - AssociationDescriptor model = descriptor.getManyAssociationByName( name ); - return new ManyAssociationInjectionProvider( model ); - } - else if( NamedAssociation.class.isAssignableFrom( dependencyModel.rawInjectionType() ) ) - { - // @State NamedAssociation<MyEntity> name; - AssociationStateDescriptor descriptor = ( (EntityDescriptor) resolution.model() ).state(); - State annotation = (State) dependencyModel.injectionAnnotation(); - String name; - if( annotation.value().isEmpty() ) - { - name = resolution.field().getName(); - } - else - { - name = annotation.value(); - } - AssociationDescriptor model = descriptor.getNamedAssociationByName( name ); - return new NamedAssociationInjectionProvider( model ); - } - - throw new InjectionProviderException( "Injected value has invalid type" ); - } - - private static class PropertyInjectionProvider - implements InjectionProvider - { - private final PropertyDescriptor propertyDescriptor; - - private PropertyInjectionProvider( PropertyDescriptor propertyDescriptor ) - { - this.propertyDescriptor = propertyDescriptor; - } - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - Property<?> value = context.state().propertyFor( propertyDescriptor.accessor() ); - if( value != null ) - { - return value; - } - else - { - throw new InjectionProviderException( "Non-optional property " + propertyDescriptor + " had no value" ); - } - } - } - - private static class AssociationInjectionProvider - implements InjectionProvider - { - private final AssociationDescriptor associationDescriptor; - - private AssociationInjectionProvider( AssociationDescriptor associationDescriptor ) - { - this.associationDescriptor = associationDescriptor; - } - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - AbstractAssociation abstractAssociation = ( (AssociationStateHolder) context.state() ). - associationFor( associationDescriptor.accessor() ); - if( abstractAssociation != null ) - { - return abstractAssociation; - } - else - { - throw new InjectionProviderException( "Non-optional association " + associationDescriptor.qualifiedName() + " had no association" ); - } - } - } - - private static class ManyAssociationInjectionProvider - implements InjectionProvider - { - private final AssociationDescriptor manyAssociationDescriptor; - - private ManyAssociationInjectionProvider( AssociationDescriptor manyAssociationDescriptor ) - { - this.manyAssociationDescriptor = manyAssociationDescriptor; - } - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - ManyAssociation<?> abstractAssociation = ( (AssociationStateHolder) context.state() ). - manyAssociationFor( manyAssociationDescriptor.accessor() ); - if( abstractAssociation != null ) - { - return abstractAssociation; - } - else - { - throw new InjectionProviderException( "Non-optional association " + manyAssociationDescriptor.qualifiedName() + " had no association" ); - } - } - } - - private static class NamedAssociationInjectionProvider - implements InjectionProvider - { - private final AssociationDescriptor namedAssociationDescriptor; - - private NamedAssociationInjectionProvider( AssociationDescriptor namedAssociationDescriptor ) - { - this.namedAssociationDescriptor = namedAssociationDescriptor; - } - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - NamedAssociation<?> abstractAssociation = ( (AssociationStateHolder) context.state() ). - namedAssociationFor( namedAssociationDescriptor.accessor() ); - if( abstractAssociation != null ) - { - return abstractAssociation; - } - else - { - throw new InjectionProviderException( "Non-optional association " + namedAssociationDescriptor.qualifiedName() + " had no association" ); - } - } - } - - static private class StateInjectionProvider - implements InjectionProvider - { - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - return context.state(); - } - } - - static private class UnitOfWorkInjectionProvider - implements InjectionProvider - { - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - return ( (EntityInstance) context.compositeInstance() ).unitOfWork(); - } - } - -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StructureInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StructureInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StructureInjectionProviderFactory.java deleted file mode 100644 index 7ee3db0..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/StructureInjectionProviderFactory.java +++ /dev/null @@ -1,118 +0,0 @@ -/* - * Copyright 2007, 2008 Niclas Hedhman. - * - * 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.injection.provider; - -import java.lang.reflect.Type; -import org.apache.zest.api.Qi4j; -import org.apache.zest.api.composite.TransientBuilderFactory; -import org.apache.zest.api.object.ObjectFactory; -import org.apache.zest.api.query.QueryBuilderFactory; -import org.apache.zest.api.service.ServiceFinder; -import org.apache.zest.api.structure.Application; -import org.apache.zest.api.structure.Layer; -import org.apache.zest.api.structure.Module; -import org.apache.zest.api.unitofwork.UnitOfWorkFactory; -import org.apache.zest.api.value.ValueBuilderFactory; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; -import org.apache.zest.runtime.structure.ModuleInstance; -import org.apache.zest.spi.module.ModuleSpi; - -public final class StructureInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - return new StructureInjectionProvider( dependencyModel ); - } - - private static class StructureInjectionProvider - implements InjectionProvider - { - private final DependencyModel dependencyModel; - - private StructureInjectionProvider( DependencyModel dependencyModel ) - { - this.dependencyModel = dependencyModel; - } - - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - Type type1 = dependencyModel.injectionType(); - if( !( type1 instanceof Class ) ) - { - throw new InjectionProviderException( "Type [" + type1 + "] can not be injected from the @Structure injection scope: " + context ); - } - Class clazz = (Class) type1; - if( clazz.equals( TransientBuilderFactory.class ) ) - { - return context.module(); - } - else if( clazz.equals( ObjectFactory.class ) ) - { - return context.module(); - } - else if( clazz.equals( ValueBuilderFactory.class ) ) - { - return context.module(); - } - else if( clazz.equals( UnitOfWorkFactory.class ) ) - { - return context.module(); - } - else if( clazz.equals( QueryBuilderFactory.class ) ) - { - return context.module(); - } - else if( clazz.equals( ServiceFinder.class ) ) - { - return context.module(); - } - else if( Module.class.isAssignableFrom( clazz ) ) - { - return context.module(); - } - else if( ModuleSpi.class.isAssignableFrom( clazz ) ) - { - return context.module(); - } - else if( Layer.class.isAssignableFrom( clazz ) ) - { - return (( ModuleInstance) context.module()).layerInstance(); - } - else if( Application.class.isAssignableFrom( clazz ) ) - { - return (( ModuleInstance) context.module()).layerInstance().applicationInstance(); - } - else if( Qi4j.class.isAssignableFrom( clazz ) ) - { - return (( ModuleInstance) context.module()).layerInstance().applicationInstance().runtime(); - } - - return null; - } - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java deleted file mode 100644 index a7b53eb..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/ThisInjectionProviderFactory.java +++ /dev/null @@ -1,138 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.injection.provider; - -import java.lang.reflect.Constructor; -import java.lang.reflect.InvocationHandler; -import java.lang.reflect.Proxy; -import org.apache.zest.api.composite.CompositeDescriptor; -import org.apache.zest.api.util.Classes; -import org.apache.zest.bootstrap.InvalidInjectionException; -import org.apache.zest.functional.Iterables; -import org.apache.zest.runtime.composite.ProxyGenerator; -import org.apache.zest.runtime.injection.DependencyModel; -import org.apache.zest.runtime.injection.InjectionContext; -import org.apache.zest.runtime.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -import static org.apache.zest.functional.Iterables.first; -import static org.apache.zest.functional.Iterables.iterable; - -/** - * JAVADOC - */ -public final class ThisInjectionProviderFactory - implements InjectionProviderFactory -{ - @Override - @SuppressWarnings( "unchecked" ) - public InjectionProvider newInjectionProvider( Resolution bindingContext, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - if( bindingContext.model() instanceof CompositeDescriptor ) - { - // If Composite type then return real type, otherwise use the specified one - final Class<?> thisType = dependencyModel.rawInjectionType(); - - Iterable<Class<?>> injectionTypes = null; - if( Classes.assignableTypeSpecification( thisType ).satisfiedBy( bindingContext.model() ) ) - { - injectionTypes = bindingContext.model().types(); - } - else - { - CompositeDescriptor acd = ( (CompositeDescriptor) bindingContext.model() ); - for( Class<?> mixinType : acd.mixinTypes() ) - { - if( thisType.isAssignableFrom( mixinType ) ) - { - Iterable<? extends Class<?>> iterable = iterable( thisType ); - injectionTypes = (Iterable<Class<?>>) iterable; - break; - } - } - - if( injectionTypes == null ) - { - throw new InvalidInjectionException( "Composite " + bindingContext.model() - + " does not implement @This type " + thisType.getName() + " in fragment " - + dependencyModel.injectedClass().getName() ); - } - } - - return new ThisInjectionProvider( injectionTypes ); - } - else - { - throw new InvalidInjectionException( "Object " + dependencyModel.injectedClass() + " may not use @This" ); - } - } - - @SuppressWarnings( {"raw", "unchecked"} ) - private static class ThisInjectionProvider - implements InjectionProvider - { - Constructor proxyConstructor; - private Class[] interfaces; - - private ThisInjectionProvider( Iterable<Class<?>> types ) - { - try - { - Class proxyClass; - if( Proxy.class.isAssignableFrom( first( types ) ) ) - { - proxyClass = first( types ); - } - else - { - Class<?> mainType = first( types ); - interfaces = Iterables.toArray( Class.class, Iterables.<Class>cast( types ) ); - proxyClass = ProxyGenerator.createProxyClass(mainType.getClassLoader(), interfaces); - } - - proxyConstructor = proxyClass.getConstructor( InvocationHandler.class ); - } - catch( Exception e ) - { - // Ignore - e.printStackTrace(); - } - } - - @Override - public Object provideInjection( InjectionContext context ) - { - try - { - InvocationHandler handler = context.compositeInstance(); - if( handler == null ) - { - handler = context.proxyHandler(); - } - return proxyConstructor.newInstance( handler ); - } - catch( Exception e ) - { - throw new InjectionProviderException( "Could not instantiate @This proxy", e ); - } - } - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/UsesInjectionProviderFactory.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/UsesInjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/UsesInjectionProviderFactory.java deleted file mode 100644 index 0e5ed5a..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/UsesInjectionProviderFactory.java +++ /dev/null @@ -1,131 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.injection.provider; - -import java.lang.reflect.Constructor; -import org.apache.zest.api.composite.NoSuchTransientException; -import org.apache.zest.api.object.NoSuchObjectException; -import org.apache.zest.api.structure.Module; -import org.apache.zest.bootstrap.InvalidInjectionException; -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.injection.InjectionProvider; -import org.apache.zest.runtime.injection.InjectionProviderFactory; -import org.apache.zest.runtime.model.Resolution; - -/** - * JAVADOC - */ -public final class UsesInjectionProviderFactory - implements InjectionProviderFactory -{ - public UsesInjectionProviderFactory() - { - } - - @Override - public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel ) - throws InvalidInjectionException - { - return new UsesInjectionProvider( dependencyModel ); - } - - private static class UsesInjectionProvider - implements InjectionProvider - { - private final DependencyModel dependency; - - public UsesInjectionProvider( DependencyModel dependency ) - { - this.dependency = dependency; - } - - @SuppressWarnings( "unchecked" ) - @Override - public Object provideInjection( InjectionContext context ) - throws InjectionProviderException - { - UsesInstance uses = context.uses(); - - Class injectionType = dependency.rawInjectionType(); - Object usesObject = uses.useForType( injectionType ); - - if( usesObject == null && !dependency.optional() ) - { - // No @Uses object provided - // Try instantiating a Transient or Object for the given type - Module moduleInstance = context.module(); - - try - { - if( context.instance() != null ) - { - uses = uses.use( context.instance() ); - } - usesObject = moduleInstance.newTransient( injectionType, uses.toArray() ); - } - catch( NoSuchTransientException e ) - { - try - { - usesObject = moduleInstance.newObject( injectionType, uses.toArray() ); - } - catch( NoSuchObjectException e1 ) - { - // Could not instantiate an instance - to try instantiate as plain class - try - { - usesObject = injectionType.newInstance(); - } - catch( Throwable e2 ) - { - // Could not instantiate - try with this as first argument - try - { - Constructor constructor = injectionType.getDeclaredConstructor( context.instance() - .getClass() ); - if( !constructor.isAccessible() ) - { - constructor.setAccessible( true ); - } - usesObject = constructor.newInstance( context.instance() ); - } - catch( Throwable e3 ) - { - // Really can't instantiate it - ignore - } - } - } - } - - if( usesObject != null ) - { - context.setUses( context.uses().use( usesObject ) ); // Use this for other injections in same graph - } - - return usesObject; - } - else - { - return usesObject; - } - } - } -} \ No newline at end of file http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/internal/Activator.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/internal/Activator.java b/core/runtime/src/main/java/org/apache/zest/runtime/internal/Activator.java deleted file mode 100644 index d94a67a..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/internal/Activator.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.internal; - -import org.osgi.framework.BundleActivator; -import org.osgi.framework.BundleContext; -import org.osgi.framework.ServiceRegistration; -import org.apache.zest.bootstrap.Qi4jRuntime; -import org.apache.zest.bootstrap.RuntimeFactory; -import org.apache.zest.runtime.Qi4jRuntimeImpl; - -/** - * - */ -public class Activator - implements BundleActivator -{ - private ServiceRegistration registration; - - @Override - public void start( BundleContext bundleContext ) - throws Exception - { - RuntimeFactory factory = new RuntimeFactory() - { - @Override - public Qi4jRuntime createRuntime() - { - return new Qi4jRuntimeImpl(); - } - }; - registration = bundleContext.registerService( RuntimeFactory.class.getName(), factory, null ); - } - - @Override - public void stop( BundleContext bundleContext ) - throws Exception - { - registration.unregister(); - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/model/Binder.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/model/Binder.java b/core/runtime/src/main/java/org/apache/zest/runtime/model/Binder.java deleted file mode 100644 index fdcbd2b..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/model/Binder.java +++ /dev/null @@ -1,26 +0,0 @@ -/* - * Copyright (c) 2008, 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.model; - -import org.apache.zest.bootstrap.BindingException; - -/** - * Interface for models that can understand binding of dependencies - */ -public interface Binder -{ - void bind( Resolution resolution ) - throws BindingException; -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/model/Resolution.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/model/Resolution.java b/core/runtime/src/main/java/org/apache/zest/runtime/model/Resolution.java deleted file mode 100644 index db64211..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/model/Resolution.java +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Copyright (c) 2008, 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.model; - -import java.lang.reflect.Field; -import org.apache.zest.api.composite.ModelDescriptor; -import org.apache.zest.runtime.composite.CompositeMethodModel; -import org.apache.zest.runtime.structure.ApplicationModel; -import org.apache.zest.runtime.structure.LayerModel; -import org.apache.zest.runtime.structure.ModuleModel; - -/** - * JAVADOC - */ -public final class Resolution -{ - private final ApplicationModel application; - private final LayerModel layer; - private final ModuleModel module; - private final ModelDescriptor modelDescriptor; - private final CompositeMethodModel method; - private final Field field; - - public Resolution( ApplicationModel application, - LayerModel layer, - ModuleModel module, - ModelDescriptor modelDescriptor, - CompositeMethodModel method, - Field field - ) - { - this.application = application; - this.layer = layer; - this.module = module; - this.modelDescriptor = modelDescriptor; - this.method = method; - this.field = field; - } - - public ApplicationModel application() - { - return application; - } - - public LayerModel layer() - { - return layer; - } - - public ModuleModel module() - { - return module; - } - - public ModelDescriptor model() - { - return modelDescriptor; - } - - public CompositeMethodModel method() - { - return method; - } - - public Field field() - { - return field; - } - - public Resolution forField( final Field injectedField ) - { - return new Resolution( application, layer, module, modelDescriptor, method, injectedField ); - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/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 deleted file mode 100644 index e4df4e5..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectModel.java +++ /dev/null @@ -1,143 +0,0 @@ -/* - * Copyright (c) 2008, 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.object; - -import org.apache.zest.api.common.ConstructionException; -import org.apache.zest.api.common.MetaInfo; -import org.apache.zest.api.common.Visibility; -import org.apache.zest.api.mixin.Initializable; -import org.apache.zest.api.mixin.InitializationException; -import org.apache.zest.api.object.ObjectDescriptor; -import org.apache.zest.functional.HierarchicalVisitor; -import org.apache.zest.functional.VisitableHierarchy; -import org.apache.zest.runtime.composite.ConstructorsModel; -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 - */ -public final class ObjectModel - implements ObjectDescriptor, VisitableHierarchy<Object, Object> -{ - private final Class<?> objectType; - private final Visibility visibility; - private final MetaInfo metaInfo; - private final ConstructorsModel constructorsModel; - private final InjectedFieldsModel injectedFieldsModel; - private final InjectedMethodsModel injectedMethodsModel; - - public ObjectModel( Class<?> objectType, - Visibility visibility, - MetaInfo metaInfo - ) - { - this.objectType = objectType; - this.visibility = visibility; - this.metaInfo = metaInfo; - - constructorsModel = new ConstructorsModel( objectType ); - injectedFieldsModel = new InjectedFieldsModel( objectType ); - injectedMethodsModel = new InjectedMethodsModel( objectType ); - } - - @Override - @SuppressWarnings( "unchecked" ) - public Iterable<Class<?>> types() - { - Iterable<? extends Class<?>> iterable = iterable( objectType ); - return (Iterable<Class<?>>) iterable; - } - - @Override - public Visibility visibility() - { - return visibility; - } - - @Override - public <T> T metaInfo( Class<T> infoType ) - { - return metaInfo.get( infoType ); - } - - @Override - public boolean isAssignableTo( Class<?> type ) - { - return type.isAssignableFrom( objectType ); - } - - @Override - public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor ) - throws ThrowableType - { - if( visitor.visitEnter( this ) ) - { - if( constructorsModel.accept( visitor ) ) - { - if( injectedFieldsModel.accept( visitor ) ) - { - injectedMethodsModel.accept( visitor ); - } - } - } - return visitor.visitLeave( this ); - } - - public Object newInstance( InjectionContext injectionContext ) - { - Object instance; - try - { - instance = constructorsModel.newInstance( injectionContext ); - injectionContext = new InjectionContext( injectionContext.module(), injectionContext.uses(), instance ); - injectedFieldsModel.inject( injectionContext, instance ); - injectedMethodsModel.inject( injectionContext, instance ); - } - catch( Exception e ) - { - throw new ConstructionException( "Could not instantiate " + objectType.getName(), e ); - } - - if( instance instanceof Initializable ) - { - try - { - ( (Initializable) instance ).initialize(); - } - catch( InitializationException e ) - { - throw new ConstructionException( "Unable to initialize " + objectType, e ); - } - } - - return instance; - } - - public void inject( InjectionContext injectionContext, Object instance ) - { - injectedFieldsModel.inject( injectionContext, instance ); - injectedMethodsModel.inject( injectionContext, instance ); - } - - @Override - public String toString() - { - return objectType.getName(); - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/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 deleted file mode 100644 index 9f05074..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/object/ObjectsModel.java +++ /dev/null @@ -1,55 +0,0 @@ -/* - * Copyright (c) 2008, 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.object; - -import java.util.List; -import org.apache.zest.functional.HierarchicalVisitor; -import org.apache.zest.functional.VisitableHierarchy; - -/** - * JAVADOC - */ -public class ObjectsModel - implements VisitableHierarchy<Object, Object> -{ - private final List<ObjectModel> objectModels; - - public ObjectsModel( List<ObjectModel> objectModels ) - { - this.objectModels = objectModels; - } - - @Override - public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor ) - throws ThrowableType - { - if( visitor.visitEnter( this ) ) - { - for( ObjectModel objectModel : objectModels ) - { - if( !objectModel.accept( visitor ) ) - { - break; - } - } - } - return visitor.visitLeave( this ); - } - - public Iterable<ObjectModel> models() - { - return objectModels; - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/package.html ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/package.html b/core/runtime/src/main/java/org/apache/zest/runtime/package.html deleted file mode 100644 index 612d1ae..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/package.html +++ /dev/null @@ -1,21 +0,0 @@ -<!-- -Licensed to the Apache Software Foundation (ASF) under one or more -contributor license agreements. See the NOTICE file distributed with -this work for additional information regarding copyright ownership. -The ASF licenses this file to You under the Apache License, Version 2.0 -(the "License"); you may not use this file except in compliance with -the License. You may obtain a copy of the License at - -http://www.apache.org/licenses/LICENSE-2.0 - -Unless required by applicable law or agreed to in writing, software -distributed under the License is distributed on an "AS IS" BASIS, -WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -See the License for the specific language governing permissions and -limitations under the License. ---> -<html> - <body> - <h2>Apache Zest⢠Runtime.</h2> - </body> -</html> http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/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 deleted file mode 100644 index 202fc89..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertiesModel.java +++ /dev/null @@ -1,104 +0,0 @@ -/* - * Copyright (c) 2007-2011, 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.property; - -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Member; -import java.util.LinkedHashMap; -import java.util.Map; -import org.apache.zest.api.common.QualifiedName; -import org.apache.zest.functional.HierarchicalVisitor; -import org.apache.zest.functional.VisitableHierarchy; - -/** - * Base class for properties model - */ -public class PropertiesModel - implements VisitableHierarchy<Object, Object> -{ - protected final Map<AccessibleObject, PropertyModel> mapAccessiblePropertyModel = new LinkedHashMap<>(); - - public PropertiesModel() - { - } - - public void addProperty( PropertyModel property ) - { - mapAccessiblePropertyModel.put( property.accessor(), property ); - } - - @Override - public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor ) - throws ThrowableType - { - if( visitor.visitEnter( this ) ) - { - for( PropertyModel propertyModel : mapAccessiblePropertyModel.values() ) - { - if( !propertyModel.accept( visitor ) ) - { - break; - } - } - } - - return visitor.visitLeave( this ); - } - - public Iterable<PropertyModel> properties() - { - return mapAccessiblePropertyModel.values(); - } - - public PropertyModel getProperty( AccessibleObject accessor ) - { - PropertyModel propertyModel = mapAccessiblePropertyModel.get( accessor ); - if( propertyModel == null ) - { - throw new IllegalArgumentException( "No property found with name: " + ( (Member) accessor ).getName() ); - } - - return propertyModel; - } - - public PropertyModel getPropertyByName( String name ) - throws IllegalArgumentException - { - for( PropertyModel propertyModel : mapAccessiblePropertyModel.values() ) - { - if( propertyModel.qualifiedName().name().equals( name ) ) - { - return propertyModel; - } - } - throw new IllegalArgumentException( "No property found with name: " + name ); - } - - public PropertyModel getPropertyByQualifiedName( QualifiedName name ) - throws IllegalArgumentException - { - for( PropertyModel propertyModel : mapAccessiblePropertyModel.values() ) - { - if( propertyModel.qualifiedName().equals( name ) ) - { - return propertyModel; - } - } - throw new IllegalArgumentException( "No property found with qualified name: " + name ); - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInfo.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInfo.java b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInfo.java deleted file mode 100644 index cb185cf..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInfo.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.zest.runtime.property; - -import java.lang.reflect.Type; -import org.apache.zest.api.common.QualifiedName; -import org.apache.zest.runtime.composite.ConstraintsCheck; - -/** - * TODO - */ -public interface PropertyInfo - extends ConstraintsCheck -{ - boolean isImmutable(); - - QualifiedName qualifiedName(); - - Type type(); -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInstance.java ---------------------------------------------------------------------- diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInstance.java deleted file mode 100644 index 9bd2e9d..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyInstance.java +++ /dev/null @@ -1,321 +0,0 @@ -/* - * Copyright (c) 2007, Rickard Ãberg. All Rights Reserved. - * Copyright (c) 2008, Edward Yakop. 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.property; - -import java.util.ArrayList; -import java.util.Collection; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.LinkedHashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.property.PropertyDescriptor; -import org.apache.zest.api.property.PropertyWrapper; -import org.apache.zest.api.type.CollectionType; -import org.apache.zest.api.type.MapType; -import org.apache.zest.api.type.ValueCompositeType; -import org.apache.zest.api.value.ValueComposite; -import org.apache.zest.runtime.value.ValueInstance; - -/** - * {@code PropertyInstance} represents a property. - */ -public class PropertyInstance<T> - implements Property<T> -{ - protected volatile T value; - protected PropertyInfo model; - - /** - * Construct an instance of {@code PropertyInstance} with the specified arguments. - * - * @param model The property model. This argument must not be {@code null}. - * @param aValue The property value. - */ - public PropertyInstance( PropertyInfo model, T aValue ) - { - this.model = model; - value = aValue; - } - - public PropertyInfo propertyInfo() - { - return model; - } - - /** - * @param model The property model. This argument must not be {@code null}. - */ - public void setPropertyInfo( PropertyInfo model ) - { - this.model = model; - } - - /** - * Returns this property value. - * - * @return This property value. - */ - @Override - public T get() - { - return value; - } - - /** - * Sets this property value. - * - * @param aNewValue The new value. - */ - @Override - public void set( T aNewValue ) - { - if( model.isImmutable() ) - { - throw new IllegalStateException( "Property [" + model.qualifiedName() + "] is immutable." ); - } - - model.checkConstraints( aNewValue ); - - value = aNewValue; - } - - /** - * Perform equals with {@code o} argument. - * <p> - * The definition of equals() for the Property is that if both the state and descriptor are equal, - * then the properties are equal. - * </p> - * - * @param o The other object to compare. - * @return Returns a {@code boolean} indicator whether this object is equals the other. - */ - @Override - public boolean equals( Object o ) - { - if( this == o ) - { - return true; - } - if( o == null || getClass() != o.getClass() ) - { - return false; - } - - Property<?> that = (Property<?>) o; - // Unwrap if needed - while( that instanceof PropertyWrapper ) - { - that = ( (PropertyWrapper) that ).next(); - } - // Descriptor equality - PropertyDescriptor thatDescriptor = (PropertyDescriptor) ( (PropertyInstance) that ).propertyInfo(); - if( !model.equals( thatDescriptor ) ) - { - return false; - } - // State equality - T value = get(); - if( value == null ) - { - return that.get() == null; - } - return value.equals( that.get() ); - } - - /** - * Calculate hash code. - * - * @return the hashcode of this instance. - */ - @Override - public int hashCode() - { - int hash = model.hashCode() * 19; // Descriptor - T value = get(); - if( value != null ) - { - hash += value.hashCode() * 13; // State - } - return hash; - } - - /** - * Returns the value as string. - * - * @return The value as string. - */ - @Override - public String toString() - { - Object value = get(); - return value == null ? "" : value.toString(); - } - - @SuppressWarnings( {"raw", "unchecked"} ) - public void prepareToBuild( PropertyModel propertyDescriptor ) - { - // Check if state has to be modified - model = propertyDescriptor.getBuilderInfo(); - if( propertyDescriptor.valueType() instanceof ValueCompositeType ) - { - Object value = get(); - if( value != null ) - { - ValueInstance.valueInstanceOf( (ValueComposite) value ).prepareToBuild(); - } - } - else if( propertyDescriptor.valueType() instanceof CollectionType ) - { - Object value = get(); - - if( value != null ) - { - if( value instanceof List ) - { - value = new ArrayList( (Collection) value ); - } - else if( value instanceof Set ) - { - value = new LinkedHashSet( (Collection) value ); - } - - // Check if items are Values - CollectionType collection = (CollectionType) propertyDescriptor.valueType(); - if( collection.collectedType() instanceof ValueCompositeType ) - { - Collection coll = (Collection) value; - for( Object instance : coll ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareToBuild(); - } - } - - set( (T) value ); - } - } - else if( propertyDescriptor.valueType() instanceof MapType ) - { - Object value = get(); - - if( value != null ) - { - Map map = new LinkedHashMap( (Map) value ); - - // Check if keys/values are Values - MapType mapType = (MapType) propertyDescriptor.valueType(); - if( mapType.keyType() instanceof ValueCompositeType ) - { - for( Object instance : map.keySet() ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareToBuild(); - } - } - if( mapType.valueType() instanceof ValueCompositeType ) - { - for( Object instance : map.values() ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareToBuild(); - } - } - - set( (T) value ); - } - } - } - - @SuppressWarnings( {"raw", "unchecked"} ) - public void prepareBuilderState( PropertyModel propertyDescriptor ) - { - // Check if state has to be modified - if( propertyDescriptor.valueType() instanceof ValueCompositeType ) - { - Object value = get(); - if( value != null ) - { - ValueInstance.valueInstanceOf( (ValueComposite) value ).prepareBuilderState(); - } - } - else if( propertyDescriptor.valueType() instanceof CollectionType ) - { - T value = get(); - if( value != null ) - { - if( propertyDescriptor.isImmutable() ) - { - if( value instanceof List ) - { - value = (T) Collections.unmodifiableList( (List<? extends Object>) value ); - } - else if( value instanceof Set ) - { - value = (T) Collections.unmodifiableSet( (Set<? extends Object>) value ); - } - else - { - value = (T) Collections.unmodifiableCollection( (Collection<? extends Object>) value ); - } - - this.value = value; - } - - CollectionType collection = (CollectionType) propertyDescriptor.valueType(); - if( collection.collectedType() instanceof ValueCompositeType ) - { - Collection coll = (Collection) value; - for( Object instance : coll ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareBuilderState(); - } - } - } - } - else if( propertyDescriptor.valueType() instanceof MapType ) - { - T value = get(); - - if( value != null ) - { - MapType mapType = (MapType) propertyDescriptor.valueType(); - if( mapType.keyType() instanceof ValueCompositeType ) - { - Map map = (Map) value; - for( Object instance : map.keySet() ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareBuilderState(); - } - } - if( mapType.valueType() instanceof ValueCompositeType ) - { - Map map = (Map) value; - for( Object instance : map.values() ) - { - ValueInstance.valueInstanceOf( (ValueComposite) instance ).prepareBuilderState(); - } - } - if( propertyDescriptor.isImmutable() ) - { - value = (T) Collections.unmodifiableMap( (Map<?, ?>) value ); - } - - this.value = value; - } - } - - model = propertyDescriptor; - } -} http://git-wip-us.apache.org/repos/asf/polygene-java/blob/a789141d/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 deleted file mode 100644 index 9f37373..0000000 --- a/core/runtime/src/main/java/org/apache/zest/runtime/property/PropertyModel.java +++ /dev/null @@ -1,309 +0,0 @@ -/* - * Copyright (c) 2007, 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.property; - -import java.lang.reflect.AccessibleObject; -import java.lang.reflect.Field; -import java.lang.reflect.Member; -import java.lang.reflect.Method; -import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; -import java.util.List; -import org.apache.zest.api.common.MetaInfo; -import org.apache.zest.api.common.QualifiedName; -import org.apache.zest.api.constraint.ConstraintViolation; -import org.apache.zest.api.constraint.ConstraintViolationException; -import org.apache.zest.api.entity.Queryable; -import org.apache.zest.api.property.DefaultValues; -import org.apache.zest.api.property.GenericPropertyInfo; -import org.apache.zest.api.property.InvalidPropertyTypeException; -import org.apache.zest.api.property.Property; -import org.apache.zest.api.property.PropertyDescriptor; -import org.apache.zest.api.structure.Module; -import org.apache.zest.api.type.Serialization; -import org.apache.zest.api.type.ValueCompositeType; -import org.apache.zest.api.type.ValueType; -import org.apache.zest.api.util.Classes; -import org.apache.zest.bootstrap.BindingException; -import org.apache.zest.functional.Visitable; -import org.apache.zest.functional.Visitor; -import org.apache.zest.runtime.composite.ValueConstraintsInstance; -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; - -/** - * Model for a Property. - * - * <p>Equality is based on the Property accessor object (property type and name), not on the QualifiedName.</p> - */ -public class PropertyModel - implements PropertyDescriptor, PropertyInfo, Binder, Visitable<PropertyModel> -{ - private Type type; - - private transient AccessibleObject accessor; // Interface accessor - - private final QualifiedName qualifiedName; - - private final ValueConstraintsInstance constraints; // May be null - - protected final MetaInfo metaInfo; - - private final Object initialValue; - - private final boolean useDefaults; - - private final boolean immutable; - - private ValueType valueType; - - protected PropertyInfo builderInfo; - - private final boolean queryable; - - public PropertyModel( AccessibleObject accessor, - boolean immutable, - boolean useDefaults, - ValueConstraintsInstance constraints, - MetaInfo metaInfo, - Object initialValue - ) - { - if( accessor instanceof Method ) - { - Method m = (Method) accessor; - if( !m.getReturnType().equals( Property.class ) ) - { - throw new InvalidPropertyTypeException( accessor ); - } - } - this.immutable = immutable; - this.metaInfo = metaInfo; - type = GenericPropertyInfo.propertyTypeOf( accessor ); - this.accessor = accessor; - qualifiedName = QualifiedName.fromAccessor( accessor ); - - this.useDefaults = useDefaults; - - this.initialValue = initialValue; - - this.constraints = constraints; - - final Queryable queryable = accessor.getAnnotation( Queryable.class ); - this.queryable = queryable == null || queryable.value(); - } - - @Override - public <T> T metaInfo( Class<T> infoType ) - { - return metaInfo.get( infoType ); - } - - public String name() - { - return qualifiedName.name(); - } - - @Override - public QualifiedName qualifiedName() - { - return qualifiedName; - } - - @Override - public Type type() - { - return type; - } - - @Override - public AccessibleObject accessor() - { - return accessor; - } - - @Override - public ValueType valueType() - { - return valueType; - } - - @Override - public boolean isImmutable() - { - return immutable; - } - - public PropertyInfo getBuilderInfo() - { - return builderInfo; - } - - @Override - public boolean queryable() - { - return queryable; - } - - @Override - public Object initialValue( Module module ) - { - // Use supplied value from assembly - Object value = initialValue; - - // Check for @UseDefaults annotation - if( value == null && useDefaults ) - { - if( valueType instanceof ValueCompositeType ) - { - return module.newValue( (Class<?>) first( valueType().types() ) ); - } - else - { - value = DefaultValues.getDefaultValueOf( type ); - } - } - - return value; - } - - @Override - public void bind( Resolution resolution ) - throws BindingException - { - ValueTypeFactory factory = ValueTypeFactory.instance(); - Class<?> declaringClass = ( (Member) accessor() ).getDeclaringClass(); - Class<?> mainType = first( resolution.model().types() ); - Serialization.Variant variant = findVariant(); - valueType = factory.newValueType( type(), declaringClass, mainType, resolution.layer(), resolution.module(), variant ); - builderInfo = new BuilderPropertyInfo(); - if( type instanceof TypeVariable ) - { - type = Classes.resolveTypeVariable( (TypeVariable) type, declaringClass, mainType ); - } - } - - private Serialization.Variant findVariant() - { - Serialization serialization = metaInfo.get( Serialization.class ); - Serialization.Variant variant = null; - if( serialization != null ) - { - variant = serialization.value(); - } - if( variant == null ) - { - variant = Serialization.Variant.entry; - } - return variant; - } - - @Override - public <ThrowableType extends Throwable> boolean accept( Visitor<? super PropertyModel, ThrowableType> visitor ) - throws ThrowableType - { - return visitor.visit( this ); - } - - @Override - public void checkConstraints( Object value ) - throws ConstraintViolationException - { - if( constraints != null ) - { - List<ConstraintViolation> violations = constraints.checkConstraints( value ); - if( !violations.isEmpty() ) - { - Iterable<Class<?>> empty = empty(); - throw new ConstraintViolationException( "<new instance>", empty, ( (Member) accessor ), violations ); - } - } - } - - @Override - public boolean equals( Object o ) - { - if( this == o ) - { - return true; - } - if( o == null || getClass() != o.getClass() ) - { - return false; - } - - PropertyModel that = (PropertyModel) o; - return accessor.equals( that.accessor ); - } - - @Override - public int hashCode() - { - return accessor.hashCode(); - } - - @Override - public String toString() - { - if( accessor instanceof Field ) - { - return ( (Field) accessor ).toGenericString(); - } - else - { - return ( (Method) accessor ).toGenericString(); - } - } - - private class BuilderPropertyInfo implements PropertyInfo - { - @Override - public boolean isImmutable() - { - return false; - } - - @Override - public QualifiedName qualifiedName() - { - return qualifiedName; - } - - @Override - public Type type() - { - return type; - } - - @Override - public void checkConstraints( Object value ) - throws ConstraintViolationException - { - if( constraints != null ) - { - List<ConstraintViolation> violations = constraints.checkConstraints( value ); - if( !violations.isEmpty() ) - { - Iterable<Class<?>> empty = empty(); - throw new ConstraintViolationException( "<new instance>", empty, ( (Member) accessor ), violations ); - } - } - } - } -} \ No newline at end of file