You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@polygene.apache.org by ni...@apache.org on 2015/07/31 04:47:30 UTC

[11/51] [abbrv] [partial] zest-java git commit: Revert "First round of changes to move to org.apache.zest namespace."

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
deleted file mode 100644
index aa45b18..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityModel.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2008, Niclas Hedhman. 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.entity;
-
-import java.lang.reflect.Method;
-import org.apache.zest.api.association.AssociationDescriptor;
-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.composite.CompositeInstance;
-import org.apache.zest.api.constraint.ConstraintViolationException;
-import org.apache.zest.api.entity.EntityDescriptor;
-import org.apache.zest.api.entity.EntityReference;
-import org.apache.zest.api.entity.Identity;
-import org.apache.zest.api.entity.Queryable;
-import org.apache.zest.api.property.PropertyDescriptor;
-import org.apache.zest.api.property.StateHolder;
-import org.apache.zest.api.unitofwork.EntityCompositeAlreadyExistsException;
-import org.apache.zest.api.util.Annotations;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.runtime.composite.CompositeMethodsModel;
-import org.apache.zest.runtime.composite.CompositeModel;
-import org.apache.zest.runtime.property.PropertyModel;
-import org.apache.zest.runtime.structure.ModuleUnitOfWork;
-import org.apache.zest.spi.entity.EntityState;
-import org.apache.zest.spi.entitystore.EntityAlreadyExistsException;
-import org.apache.zest.spi.entitystore.EntityStoreException;
-import org.apache.zest.spi.entitystore.EntityStoreUnitOfWork;
-import org.apache.zest.spi.module.ModuleSpi;
-
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.flattenIterables;
-import static org.apache.zest.functional.Iterables.map;
-
-/**
- * JAVADOC
- */
-public final class EntityModel
-    extends CompositeModel
-    implements EntityDescriptor
-{
-    private static final Method IDENTITY_METHOD;
-
-    static
-    {
-        try
-        {
-            IDENTITY_METHOD = Identity.class.getMethod( "identity" );
-        }
-        catch( NoSuchMethodException e )
-        {
-            throw new InternalError( "Zest Core Runtime codebase is corrupted. Contact Zest team: ModuleUnitOfWork" );
-        }
-    }
-
-    private final boolean queryable;
-
-    public EntityModel( Iterable<Class<?>> types,
-                        Visibility visibility,
-                        MetaInfo info,
-                        EntityMixinsModel mixinsModel,
-                        EntityStateModel stateModel,
-                        CompositeMethodsModel compositeMethodsModel
-    )
-    {
-        super( types, visibility, info, mixinsModel, stateModel, compositeMethodsModel );
-
-        final Queryable queryable = first( Iterables.<Queryable>cast(
-            filter( Annotations.isType( Queryable.class ),
-                    flattenIterables( map( Annotations.ANNOTATIONS_OF, types ) ) ) ) );
-        this.queryable = queryable == null || queryable.value();
-    }
-
-    @Override
-    public boolean queryable()
-    {
-        return queryable;
-    }
-
-    @Override
-    public EntityStateModel state()
-    {
-        return (EntityStateModel) super.state();
-    }
-
-    public EntityInstance newInstance( ModuleUnitOfWork uow, ModuleSpi moduleInstance, EntityState state )
-    {
-        EntityInstance instance = new EntityInstance( uow, moduleInstance, this, state );
-        return instance;
-    }
-
-    public Object[] newMixinHolder()
-    {
-        return mixinsModel.newMixinHolder();
-    }
-
-    public Object newMixin( Object[] mixins,
-                            EntityStateInstance entityState,
-                            EntityInstance entityInstance,
-                            Method method
-    )
-    {
-        return ( (EntityMixinsModel) mixinsModel ).newMixin( entityInstance, entityState, mixins, method );
-    }
-
-    public EntityState newEntityState( EntityStoreUnitOfWork store, ModuleSpi module, EntityReference identity )
-        throws ConstraintViolationException, EntityStoreException
-    {
-        try
-        {
-            // New EntityState
-            EntityState entityState = store.newEntityState( module, identity, this );
-
-            // Set identity property
-            PropertyDescriptor persistentPropertyDescriptor = state().propertyModelFor( IDENTITY_METHOD );
-            entityState.setPropertyValue( persistentPropertyDescriptor.qualifiedName(), identity.identity() );
-
-            return entityState;
-        }
-        catch( EntityAlreadyExistsException e )
-        {
-            throw new EntityCompositeAlreadyExistsException( identity );
-        }
-        catch( EntityStoreException e )
-        {
-            throw new ConstructionException( "Could not create new entity in store", e );
-        }
-    }
-
-    public void initState( ModuleSpi module, EntityState entityState )
-    {
-        // Set new properties to default value
-        for( PropertyModel propertyDescriptor : state().properties() )
-        {
-            entityState.setPropertyValue( propertyDescriptor.qualifiedName(), propertyDescriptor.initialValue( module ) );
-        }
-
-        // Set new associations to null
-        for( AssociationDescriptor associationDescriptor : state().associations() )
-        {
-            entityState.setAssociationValue( associationDescriptor.qualifiedName(), null );
-        }
-
-        // Set new many-associations to empty
-        for( AssociationDescriptor associationDescriptor : state().manyAssociations() )
-        {
-            entityState.manyAssociationValueOf( associationDescriptor.qualifiedName() );
-        }
-
-        // Set new named-associations to empty
-        for( AssociationDescriptor associationDescriptor : state().namedAssociations() )
-        {
-            entityState.namedAssociationValueOf( associationDescriptor.qualifiedName() );
-        }
-    }
-
-    public void invokeLifecycle( boolean create, Object[] mixins, CompositeInstance instance, StateHolder state )
-    {
-        ( (EntityMixinsModel) mixinsModel ).invokeLifecycle( create, mixins, instance, state );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityPropertyInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityPropertyInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityPropertyInstance.java
deleted file mode 100644
index 5ac473f..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityPropertyInstance.java
+++ /dev/null
@@ -1,53 +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.entity;
-
-import org.apache.zest.runtime.property.PropertyInfo;
-import org.apache.zest.runtime.property.PropertyInstance;
-import org.apache.zest.spi.entity.EntityState;
-
-/**
- * {@code EntityPropertyInstance} represents a property whose value must be backed by an EntityState.
- */
-public class EntityPropertyInstance<T>
-    extends PropertyInstance<T>
-{
-    private final EntityState entityState;
-
-    /**
-     * Construct an instance of {@code PropertyInstance} with the specified arguments.
-     *
-     * @param aPropertyInfo The property info. This argument must not be {@code null}.
-     * @param entityState EntityState
-     */
-    @SuppressWarnings( "unchecked" )
-    public EntityPropertyInstance( PropertyInfo aPropertyInfo, EntityState entityState )
-    {
-        super( aPropertyInfo, (T) entityState.propertyValueOf( aPropertyInfo.qualifiedName() ) );
-        this.entityState = entityState;
-    }
-
-    /**
-     * Sets this property value.
-     *
-     * @param aNewValue The new value.
-     */
-    @Override
-    public void set( T aNewValue )
-    {
-        super.set( aNewValue );
-        entityState.setPropertyValue( model.qualifiedName(), aNewValue );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
deleted file mode 100644
index fe528b3..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateInstance.java
+++ /dev/null
@@ -1,263 +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.entity;
-
-import java.lang.reflect.AccessibleObject;
-import java.lang.reflect.Type;
-import java.util.HashMap;
-import java.util.Map;
-import org.apache.zest.api.association.Association;
-import org.apache.zest.api.association.AssociationDescriptor;
-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.entity.EntityReference;
-import org.apache.zest.api.property.Property;
-import org.apache.zest.api.property.PropertyDescriptor;
-import org.apache.zest.api.unitofwork.UnitOfWork;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.functional.Function;
-import org.apache.zest.functional.Function2;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.runtime.association.AssociationInstance;
-import org.apache.zest.runtime.association.AssociationModel;
-import org.apache.zest.runtime.association.ManyAssociationInstance;
-import org.apache.zest.runtime.association.ManyAssociationModel;
-import org.apache.zest.runtime.association.NamedAssociationInstance;
-import org.apache.zest.runtime.association.NamedAssociationModel;
-import org.apache.zest.runtime.composite.ConstraintsCheck;
-import org.apache.zest.runtime.property.PropertyModel;
-import org.apache.zest.runtime.unitofwork.BuilderEntityState;
-import org.apache.zest.spi.entity.EntityState;
-
-/**
- * TODO
- */
-public final class EntityStateInstance
-    implements AssociationStateHolder
-{
-    private Map<AccessibleObject, Object> state;
-
-    private final EntityStateModel stateModel;
-    private EntityState entityState;
-    private final Function2<EntityReference, Type, Object> entityFunction;
-
-    public EntityStateInstance( EntityStateModel stateModel, final UnitOfWork uow, EntityState entityState )
-    {
-        this.stateModel = stateModel;
-        this.entityState = entityState;
-
-        entityFunction = new Function2<EntityReference, Type, Object>()
-        {
-            @Override
-            public Object map( EntityReference entityReference, Type type )
-            {
-                return uow.get( Classes.RAW_CLASS.map( type ), entityReference.identity() );
-            }
-        };
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> Property<T> propertyFor( AccessibleObject accessor )
-        throws IllegalArgumentException
-    {
-        Map<AccessibleObject, Object> state = state();
-
-        Property<T> property = (Property<T>) state.get( accessor );
-
-        if( property == null )
-        {
-            PropertyModel entityPropertyModel = stateModel.propertyModelFor( accessor );
-            property = new EntityPropertyInstance<>(
-                entityState instanceof BuilderEntityState
-                ? entityPropertyModel.getBuilderInfo()
-                : entityPropertyModel,
-                entityState );
-            state.put( accessor, property );
-        }
-
-        return property;
-    }
-
-    @Override
-    public Iterable<Property<?>> properties()
-    {
-        return Iterables.map( new Function<PropertyDescriptor, Property<?>>()
-        {
-            @Override
-            public Property<?> map( PropertyDescriptor propertyDescriptor )
-            {
-                return propertyFor( propertyDescriptor.accessor() );
-            }
-        }, stateModel.properties() );
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> Association<T> associationFor( AccessibleObject accessor )
-        throws IllegalArgumentException
-    {
-        Map<AccessibleObject, Object> state = state();
-        Association<T> association = (Association<T>) state.get( accessor );
-
-        if( association == null )
-        {
-            final AssociationModel associationModel = stateModel.getAssociation( accessor );
-            association = new AssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
-                entityFunction,
-                new Property<EntityReference>()
-            {
-                @Override
-                public EntityReference get()
-                {
-                    return entityState.associationValueOf( associationModel.qualifiedName() );
-                }
-
-                @Override
-                public void set( EntityReference newValue )
-                    throws IllegalArgumentException, IllegalStateException
-                {
-                    entityState.setAssociationValue( associationModel.qualifiedName(), newValue );
-                }
-            } );
-            state.put( accessor, association );
-        }
-
-        return association;
-    }
-
-    @Override
-    public Iterable<Association<?>> allAssociations()
-    {
-        return Iterables.map( new Function<AssociationDescriptor, Association<?>>()
-        {
-            @Override
-            public Association<?> map( AssociationDescriptor associationDescriptor )
-            {
-                return associationFor( associationDescriptor.accessor() );
-            }
-        }, stateModel.associations() );
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> ManyAssociation<T> manyAssociationFor( AccessibleObject accessor )
-    {
-        Map<AccessibleObject, Object> state = state();
-
-        ManyAssociation<T> manyAssociation = (ManyAssociation<T>) state.get( accessor );
-
-        if( manyAssociation == null )
-        {
-            ManyAssociationModel associationModel = stateModel.getManyAssociation( accessor );
-            manyAssociation = new ManyAssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
-                entityFunction,
-                entityState.manyAssociationValueOf( associationModel.qualifiedName() ) );
-            state.put( accessor, manyAssociation );
-        }
-
-        return manyAssociation;
-    }
-
-    @Override
-    public Iterable<ManyAssociation<?>> allManyAssociations()
-    {
-        return Iterables.map( new Function<AssociationDescriptor, ManyAssociation<?>>()
-        {
-            @Override
-            public ManyAssociation<?> map( AssociationDescriptor associationDescriptor )
-            {
-                return manyAssociationFor( associationDescriptor.accessor() );
-            }
-        }, stateModel.manyAssociations() );
-    }
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> NamedAssociation<T> namedAssociationFor( AccessibleObject accessor )
-    {
-        Map<AccessibleObject, Object> state = state();
-
-        NamedAssociation<T> namedAssociation = (NamedAssociation<T>) state.get( accessor );
-
-        if( namedAssociation == null )
-        {
-            NamedAssociationModel associationModel = stateModel.getNamedAssociation( accessor );
-            namedAssociation = new NamedAssociationInstance<>(
-                entityState instanceof BuilderEntityState
-                ? associationModel.getBuilderInfo()
-                : associationModel,
-                entityFunction,
-                entityState.namedAssociationValueOf( associationModel.qualifiedName() ) );
-            state.put( accessor, namedAssociation );
-        }
-
-        return namedAssociation;
-    }
-
-    @Override
-    public Iterable<? extends NamedAssociation<?>> allNamedAssociations()
-    {
-        return Iterables.map( new Function<AssociationDescriptor, NamedAssociation<?>>()
-        {
-            @Override
-            public NamedAssociation<?> map( AssociationDescriptor associationDescriptor )
-            {
-                return namedAssociationFor( associationDescriptor.accessor() );
-            }
-        }, stateModel.namedAssociations() );
-    }
-
-    public void checkConstraints()
-    {
-        for( PropertyDescriptor propertyDescriptor : stateModel.properties() )
-        {
-            ConstraintsCheck constraints = (ConstraintsCheck) propertyDescriptor;
-            Property<Object> property = this.propertyFor( propertyDescriptor.accessor() );
-            constraints.checkConstraints( property.get() );
-        }
-
-        for( AssociationDescriptor associationDescriptor : stateModel.associations() )
-        {
-            ConstraintsCheck constraints = (ConstraintsCheck) associationDescriptor;
-            Association<Object> association = this.associationFor( associationDescriptor.accessor() );
-            constraints.checkConstraints( association.get() );
-        }
-
-        // TODO Should ManyAssociations and NamedAssociations be checked too?
-    }
-
-    private Map<AccessibleObject, Object> state()
-    {
-        if( state == null )
-        {
-            state = new HashMap<>();
-        }
-
-        return state;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
deleted file mode 100644
index 8b9b56e..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/entity/EntityStateModel.java
+++ /dev/null
@@ -1,157 +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.entity;
-
-import java.lang.reflect.AccessibleObject;
-import org.apache.zest.api.association.AssociationDescriptor;
-import org.apache.zest.api.association.AssociationStateDescriptor;
-import org.apache.zest.api.common.QualifiedName;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.association.AssociationModel;
-import org.apache.zest.runtime.association.AssociationsModel;
-import org.apache.zest.runtime.association.ManyAssociationModel;
-import org.apache.zest.runtime.association.ManyAssociationsModel;
-import org.apache.zest.runtime.association.NamedAssociationModel;
-import org.apache.zest.runtime.association.NamedAssociationsModel;
-import org.apache.zest.runtime.composite.StateModel;
-import org.apache.zest.runtime.property.PropertiesModel;
-
-/**
- * Model for EntityComposite state.
- */
-public final class EntityStateModel
-    extends StateModel
-    implements AssociationStateDescriptor
-{
-    private final AssociationsModel associationsModel;
-    private final ManyAssociationsModel manyAssociationsModel;
-    private final NamedAssociationsModel namedAssociationsModel;
-
-    public EntityStateModel( PropertiesModel propertiesModel,
-                             AssociationsModel associationsModel,
-                             ManyAssociationsModel manyAssociationsModel,
-                             NamedAssociationsModel namedAssociationsModel )
-    {
-        super( propertiesModel );
-        this.associationsModel = associationsModel;
-        this.manyAssociationsModel = manyAssociationsModel;
-        this.namedAssociationsModel = namedAssociationsModel;
-    }
-
-    public AssociationModel getAssociation( AccessibleObject accessor )
-        throws IllegalArgumentException
-    {
-        return associationsModel.getAssociation( accessor );
-    }
-
-    @Override
-    public AssociationDescriptor getAssociationByName( String name )
-        throws IllegalArgumentException
-    {
-        return associationsModel.getAssociationByName( name );
-    }
-
-    @Override
-    public AssociationDescriptor getAssociationByQualifiedName( QualifiedName name )
-        throws IllegalArgumentException
-    {
-        return associationsModel.getAssociationByQualifiedName( name );
-    }
-
-    public ManyAssociationModel getManyAssociation( AccessibleObject accessor )
-        throws IllegalArgumentException
-    {
-        return manyAssociationsModel.getManyAssociation( accessor );
-    }
-
-    @Override
-    public AssociationDescriptor getManyAssociationByName( String name )
-        throws IllegalArgumentException
-    {
-        return manyAssociationsModel.getManyAssociationByName( name );
-    }
-
-    @Override
-    public AssociationDescriptor getManyAssociationByQualifiedName( QualifiedName name )
-        throws IllegalArgumentException
-    {
-        return manyAssociationsModel.getManyAssociationByQualifiedName( name );
-    }
-
-    public NamedAssociationModel getNamedAssociation( AccessibleObject accessor )
-        throws IllegalArgumentException
-    {
-        return namedAssociationsModel.getNamedAssociation( accessor );
-    }
-
-    @Override
-    public AssociationDescriptor getNamedAssociationByName( String name )
-        throws IllegalArgumentException
-    {
-        return namedAssociationsModel.getNamedAssociationByName( name );
-    }
-
-    @Override
-    public AssociationDescriptor getNamedAssociationByQualifiedName( QualifiedName name )
-        throws IllegalArgumentException
-    {
-        return namedAssociationsModel.getNamedAssociationByQualifiedName( name );
-    }
-
-    @Override
-    public Iterable<AssociationModel> associations()
-    {
-        return associationsModel.associations();
-    }
-
-    @Override
-    public Iterable<ManyAssociationModel> manyAssociations()
-    {
-        return manyAssociationsModel.manyAssociations();
-    }
-
-    @Override
-    public Iterable<NamedAssociationModel> namedAssociations()
-    {
-        return namedAssociationsModel.namedAssociations();
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            if( ( (VisitableHierarchy<Object, Object>) propertiesModel ).accept( visitor ) )
-            {
-                if( ( (VisitableHierarchy<AssociationsModel, AssociationModel>) associationsModel ).accept( visitor ) )
-                {
-                    if( ( (VisitableHierarchy<ManyAssociationsModel, ManyAssociationModel>) manyAssociationsModel ).accept( visitor ) )
-                    {
-                        ( (VisitableHierarchy<NamedAssociationsModel, NamedAssociationModel>) namedAssociationsModel ).accept( visitor );
-                    }
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
deleted file mode 100644
index f2b3cf5..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/Dependencies.java
+++ /dev/null
@@ -1,38 +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;
-
-import org.apache.zest.functional.Function;
-
-/**
- * TODO
- */
-public interface Dependencies
-{
-    public static Function<Dependencies, Iterable<DependencyModel>> DEPENDENCIES_FUNCTION = new Function<Dependencies, Iterable<DependencyModel>>()
-    {
-        @Override
-        public Iterable<DependencyModel> map( Dependencies dependencies )
-        {
-            return dependencies.dependencies();
-        }
-    };
-
-    Iterable<DependencyModel> dependencies();
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
deleted file mode 100644
index 8ceecba..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/DependencyModel.java
+++ /dev/null
@@ -1,412 +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.injection;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.Collections;
-import org.apache.zest.api.common.ConstructionException;
-import org.apache.zest.api.common.Optional;
-import org.apache.zest.api.composite.DependencyDescriptor;
-import org.apache.zest.bootstrap.BindingException;
-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.Visitable;
-import org.apache.zest.functional.Visitor;
-import org.apache.zest.runtime.injection.provider.InjectionProviderException;
-import org.apache.zest.runtime.model.Binder;
-import org.apache.zest.runtime.model.Resolution;
-
-import static org.apache.zest.api.util.Annotations.isType;
-import static org.apache.zest.functional.Iterables.iterable;
-
-/**
- * JAVADOC
- * move all the extraction code to a TypeUtils class
- */
-public final class DependencyModel
-    implements Binder, DependencyDescriptor, Visitable<DependencyModel>
-{
-    public static boolean isOptional( Annotation injectionAnnotation, Annotation[] annotations )
-    {
-        if( Iterables.matchesAny( isType( Optional.class ), iterable( annotations ) ) )
-        {
-            return true;
-        }
-
-        Method[] methods = injectionAnnotation.annotationType().getMethods();
-        for( Method method : methods )
-        {
-            if( method.getName().equals( "optional" ) )
-            {
-                try
-                {
-                    return (Boolean) method.invoke( injectionAnnotation );
-                }
-                catch( Throwable e )
-                {
-                    return false;
-                }
-            }
-        }
-
-        return false;
-    }
-
-    // Model
-    private final Annotation injectionAnnotation;
-    private final Type injectionType;
-    private final Class<?> injectedClass;
-    private final Class<?> rawInjectionClass;
-    private final boolean optional;
-    private final Annotation[] annotations;
-
-    // Binding
-    private InjectionProvider injectionProvider;
-
-    public DependencyModel( Annotation injectionAnnotation,
-                            Type genericType,
-                            Class<?> injectedClass,
-                            boolean optional,
-                            Annotation[] annotations
-    )
-    {
-        this.injectionAnnotation = injectionAnnotation;
-        this.injectedClass = injectedClass;
-
-        this.injectionType = genericType;
-        this.optional = optional;
-        this.annotations = annotations;
-        this.rawInjectionClass = mapPrimitiveTypes( extractRawInjectionClass( injectedClass, injectionType ) );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( Visitor<? super DependencyModel, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        return visitor.visit( this );
-    }
-
-    private Class<?> extractRawInjectionClass( Class<?> injectedClass, final Type injectionType )
-    {
-        // Calculate raw injection type
-        if( injectionType instanceof Class )
-        {
-            return (Class<?>) injectionType;
-        }
-        else if( injectionType instanceof ParameterizedType )
-        {
-            return (Class<?>) ( (ParameterizedType) injectionType ).getRawType();
-        }
-        else if( injectionType instanceof TypeVariable )
-        {
-            return extractRawInjectionClass( injectedClass, (TypeVariable<?>) injectionType );
-        }
-        throw new IllegalArgumentException(
-            "Could not extract the rawInjectionClass of " + injectedClass + " and " + injectionType );
-    }
-
-    private Class<?> extractRawInjectionClass( Class<?> injectedClass, TypeVariable<?> injectionTypeVariable )
-    {
-        int index = 0;
-        for( TypeVariable<?> typeVariable : injectionTypeVariable.getGenericDeclaration().getTypeParameters() )
-        {
-            if( injectionTypeVariable.getName().equals( typeVariable.getName() ) )
-            {
-                return (Class<?>) getActualType( injectedClass, index );
-            }
-            index++;
-        }
-        throw new IllegalArgumentException(
-            "Could not extract the rawInjectionClass of " + injectedClass + " and " + injectionTypeVariable );
-    }
-
-    // todo continue refactoring
-
-    private Type getActualType( Class<?> injectedClass, int index )
-    {
-        // Type index found - map it to actual type
-        Type genericType = injectedClass;
-        Type type = null;
-
-        while( !Object.class.equals( genericType ) && type == null )
-        {
-            genericType = ( (Class<?>) genericType ).getGenericSuperclass();
-            if( genericType instanceof ParameterizedType )
-            {
-                type = ( (ParameterizedType) genericType ).getActualTypeArguments()[ index ];
-            }
-            else
-            {
-                Type[] genericInterfaces = ( (Class<?>) genericType ).getGenericInterfaces();
-                if( genericInterfaces.length > index )
-                {
-                    type = genericInterfaces[ index ];
-                    if( type instanceof ParameterizedType )
-                    {
-                        type = ( (ParameterizedType) type ).getActualTypeArguments()[ index ];
-                    }
-                    // TODO type may still be one of the generic interfaces???
-                }
-            }
-        }
-
-        if( type == null )
-        {
-            type = Object.class; // Generic type with no constraints so Object is fine
-        }
-
-        return type;
-    }
-
-    // FIXME This method is unused, remove it.
-    private Type extractDependencyType( Type injectionType )
-    {
-        if( injectionType instanceof ParameterizedType )
-        {
-            return ( (ParameterizedType) injectionType ).getActualTypeArguments()[ 0 ];
-        }
-        else if( injectionType instanceof TypeVariable )
-        {
-            return ( (TypeVariable) injectionType ).getBounds()[ 0 ];
-        }
-        return injectionType;
-    }
-
-    // Model
-    @Override
-    public Annotation injectionAnnotation()
-    {
-        return injectionAnnotation;
-    }
-
-    @Override
-    public Type injectionType()
-    {
-        return injectionType;
-    }
-
-    @Override
-    public Class<?> injectedClass()
-    {
-        return injectedClass;
-    }
-
-    /**
-     * Get the raw dependency type.
-     * <p>
-     * If the dependency uses generics this is the raw type,
-     * and otherwise it is the type of the field.
-     * <p>
-     * Examples:
-     * <p>
-     * {@code @Service MyService service} -&gt; MyService
-     * <p>
-     * {@code @Entity Iterable<Foo> fooList} -&gt; Iterable
-     * <p>
-     * {@code @Entity Query<Foo> fooQuery} -&gt; Query
-     *
-     * @return raw injection type.
-     */
-    @Override
-    public Class<?> rawInjectionType()
-    {
-        return rawInjectionClass;
-    }
-
-    @Override
-    public boolean optional()
-    {
-        return optional;
-    }
-
-    @Override
-    public Annotation[] annotations()
-    {
-        return annotations;
-    }
-
-    @Override
-    public void bind( Resolution resolution )
-        throws BindingException
-    {
-        InjectionProviderFactory providerFactory = resolution.application().injectionProviderFactory();
-
-        try
-        {
-            injectionProvider = providerFactory.newInjectionProvider( resolution, this );
-
-            if( injectionProvider == null && !optional )
-            {
-                String message =
-                    "[Module " + resolution.module()
-                        .name() + "] Non-optional @" + rawInjectionClass.getName() + " was not bound in " + injectedClass
-                        .getName();
-                throw new ConstructionException( message );
-            }
-        }
-        catch( InvalidInjectionException e )
-        {
-            throw new BindingException( "Could not bind dependency injection", e );
-        }
-    }
-
-    // Context
-    public Object inject( InjectionContext context )
-    {
-        if( injectionProvider == null )
-        {
-            return null;
-        }
-        Object injectedValue;
-        try
-        {
-            injectedValue = injectionProvider.provideInjection( context );
-        }
-        catch( InjectionProviderException e )
-        {
-            Throwable ex = e;
-            if( ex.getCause() != null )
-            {
-                ex = ex.getCause();
-            }
-
-            String message = "[Module " + context.module().name() + "] InjectionProvider unable to resolve @" +
-                             injectionAnnotation.annotationType().getSimpleName() + " " + injectionType.toString();
-            throw new ConstructionException( message, ex );
-        }
-        if( injectedValue == null && !optional )
-        {
-            String simpleName = injectionAnnotation.annotationType().getSimpleName();
-            String message = "[Module " + context.module().name() + "] Non-optional @" +
-                             simpleName + " " + injectionType.toString() +
-                             " was null in " + injectedClass.getName();
-            if( simpleName.toLowerCase().contains( "service" ) )
-            {
-                message = message + ". Did you mean the @Service injection scope?";
-            }
-            throw new ConstructionException( message );
-        }
-        return getInjectedValue( injectedValue );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    private Object getInjectedValue( Object injectionResult )
-    {
-        if( injectionResult == null )
-        {
-            return null;
-        }
-
-        if( injectionResult instanceof Iterable )
-        {
-            if( Iterable.class.isAssignableFrom( rawInjectionClass ) || rawInjectionClass.isInstance(
-                injectionResult ) )
-            {
-                return injectionResult;
-            }
-            else
-            {
-                return Iterables.first( (Iterable) injectionResult );
-            }
-        }
-        else
-        {
-            if( Iterable.class.equals( injectionType ) )
-            {
-                return Collections.singleton( injectionResult );
-            }
-        }
-        return injectionResult;
-    }
-
-    private final static Class<?>[] primitiveTypeMapping = {
-        boolean.class, Boolean.class,
-        byte.class, Byte.class,
-        short.class, Short.class,
-        char.class, Character.class,
-        long.class, Long.class,
-        double.class, Double.class,
-        float.class, Float.class,
-        int.class, Integer.class,
-    };
-
-    private Class<?> mapPrimitiveTypes( Class<?> rawInjectionType )
-    {
-        if( rawInjectionType == null || !rawInjectionType.isPrimitive() )
-        {
-            return rawInjectionType;
-        }
-        for( int i = 0; i < primitiveTypeMapping.length; i += 2 )
-        {
-            if( primitiveTypeMapping[ i ].equals( rawInjectionType ) )
-            {
-                return primitiveTypeMapping[ i + 1 ];
-            }
-        }
-        return rawInjectionType;
-    }
-
-    public boolean hasScope( final Class<? extends Annotation> scope )
-    {
-        return scope == null || scope.equals( injectionAnnotation().annotationType() );
-    }
-
-    public Class<? extends Annotation> injectionAnnotationType()
-    {
-        if( injectionAnnotation == null )
-        {
-            return null;
-        }
-        return injectionAnnotation.annotationType();
-    }
-
-    @Override
-    public String toString()
-    {
-        return injectionAnnotation + " for " + injectionType + " in " + injectedClass.getName();
-    }
-
-    public static class ScopeSpecification
-        implements Specification<DependencyModel>
-    {
-        private final Class<? extends Annotation> scope;
-
-        public ScopeSpecification( Class<? extends Annotation> scope )
-        {
-            this.scope = scope;
-        }
-
-        @Override
-        public boolean satisfiedBy( DependencyModel model )
-        {
-            return model.hasScope( scope );
-        }
-    }
-
-    public static class InjectionTypeFunction
-        implements Function<DependencyModel, Class<?>>
-    {
-        @Override
-        public Class<?> map( DependencyModel dependencyModel )
-        {
-            return dependencyModel.rawInjectionType();
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
deleted file mode 100644
index 60977a5..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldModel.java
+++ /dev/null
@@ -1,147 +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.injection;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.InvocationHandler;
-import java.lang.reflect.Proxy;
-import java.util.Collection;
-import org.apache.zest.api.composite.InjectedFieldDescriptor;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.bootstrap.BindingException;
-import org.apache.zest.bootstrap.InjectionException;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specification;
-import org.apache.zest.functional.VisitableHierarchy;
-import org.apache.zest.runtime.composite.TransientInstance;
-import org.apache.zest.runtime.model.Resolution;
-
-import static java.util.Collections.emptyList;
-import static java.util.Collections.singleton;
-
-/**
- * JAVADOC
- */
-public final class InjectedFieldModel
-    implements InjectedFieldDescriptor, VisitableHierarchy<InjectedFieldModel, DependencyModel>
-{
-    private DependencyModel dependencyModel;
-    private Field injectedField;
-
-    public InjectedFieldModel( Field injectedField, DependencyModel dependencyModel )
-    {
-        injectedField.setAccessible( true );
-        this.injectedField = injectedField;
-        this.dependencyModel = dependencyModel;
-    }
-
-    @Override
-    public DependencyModel dependency()
-    {
-        return dependencyModel;
-    }
-
-    @Override
-    public Field field()
-    {
-        return injectedField;
-    }
-
-    public void bind( Resolution resolution )
-        throws BindingException
-    {
-        dependencyModel.bind( resolution.forField( injectedField ) );
-    }
-
-    public void inject( InjectionContext context, Object instance )
-    {
-        Object value = dependencyModel.inject( context );
-        try
-        {
-            injectedField.set( instance, value );
-        }
-        catch( IllegalAccessException e )
-        {
-            throw new InjectionException( e );
-        }
-        catch( IllegalArgumentException e )
-        {
-            String valueClassName;
-            if( Proxy.isProxyClass( value.getClass() ) )
-            {
-                InvocationHandler invocationHandler = Proxy.getInvocationHandler( value );
-                if( invocationHandler instanceof TransientInstance )
-                {
-                    TransientInstance handler = (TransientInstance) invocationHandler;
-                    valueClassName = Classes.toString( handler.descriptor().types() )
-                                     + " in [" + handler.module().name() + "] of [" + handler.layer().name() + "]";
-                }
-                else
-                {
-                    valueClassName = invocationHandler.toString();
-                }
-            }
-            else
-            {
-                valueClassName = value.getClass().getName();
-            }
-            StringBuilder annotBuilder = new StringBuilder();
-            for( Annotation annot : injectedField.getAnnotations() )
-            {
-                String s = annot.toString();
-                annotBuilder.append( "@" ).append( s.substring( s.lastIndexOf( '.' ) + 1, s.length() - 2 ) );
-                annotBuilder.append( " " );
-            }
-            String annots = annotBuilder.toString();
-            String message = "Can not inject the field\n    "
-                             + injectedField.getDeclaringClass()
-                             + "\n    {\n        " + annots + "\n        "
-                             + injectedField.getType().getSimpleName() + " " + injectedField.getName()
-                             + "\n    }\nwith value \n    " + value + "\nof type\n    "
-                             + valueClassName;
-            throw new InjectionException( message, e );
-        }
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super InjectedFieldModel, ? super DependencyModel, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            visitor.visit( dependencyModel );
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
-    {
-        if( specification.satisfiedBy( dependencyModel ) )
-        {
-            return singleton( dependencyModel );
-        }
-        else
-        {
-            return emptyList();
-        }
-    }
-
-    @Override
-    public String toString()
-    {
-        return "InjectedFieldModel{" + ", injectedField=" + injectedField + '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
deleted file mode 100644
index e61bc39..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedFieldsModel.java
+++ /dev/null
@@ -1,124 +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.injection;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Field;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.zest.api.injection.InjectionScope;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.api.util.Fields;
-import org.apache.zest.functional.Function;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Iterables;
-import org.apache.zest.functional.VisitableHierarchy;
-
-import static org.apache.zest.api.util.Annotations.hasAnnotation;
-import static org.apache.zest.api.util.Annotations.type;
-import static org.apache.zest.functional.Iterables.filter;
-import static org.apache.zest.functional.Iterables.first;
-import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Specifications.translate;
-
-/**
- * JAVADOC
- */
-public final class InjectedFieldsModel
-    implements Dependencies, VisitableHierarchy<Object, Object>
-{
-    private final List<InjectedFieldModel> fields = new ArrayList<InjectedFieldModel>();
-
-    public InjectedFieldsModel( Class fragmentClass )
-    {
-        Iterable<Field> mappedFields = Fields.FIELDS_OF.map( fragmentClass );
-        for( Field field : mappedFields )
-        {
-            Annotation injectionAnnotation = first( filter( translate( type(), hasAnnotation( InjectionScope.class ) ), iterable( field
-                                                                                                                                      .getAnnotations() ) ) );
-            if( injectionAnnotation != null )
-            {
-                addModel( fragmentClass, field, injectionAnnotation );
-            }
-        }
-    }
-
-    private void addModel( Class fragmentClass, Field field, Annotation injectionAnnotation )
-    {
-        Type genericType = field.getGenericType();
-        if( genericType instanceof ParameterizedType )
-        {
-            genericType = new ParameterizedTypeInstance( ( (ParameterizedType) genericType ).getActualTypeArguments(), ( (ParameterizedType) genericType )
-                .getRawType(), ( (ParameterizedType) genericType ).getOwnerType() );
-
-            for( int i = 0; i < ( (ParameterizedType) genericType ).getActualTypeArguments().length; i++ )
-            {
-                Type type = ( (ParameterizedType) genericType ).getActualTypeArguments()[ i ];
-                if( type instanceof TypeVariable )
-                {
-                    type = Classes.resolveTypeVariable( (TypeVariable) type, field.getDeclaringClass(), fragmentClass );
-                    ( (ParameterizedType) genericType ).getActualTypeArguments()[ i ] = type;
-                }
-            }
-        }
-
-        boolean optional = DependencyModel.isOptional( injectionAnnotation, field.getAnnotations() );
-        DependencyModel dependencyModel = new DependencyModel( injectionAnnotation, genericType, fragmentClass, optional, field
-            .getAnnotations() );
-        InjectedFieldModel injectedFieldModel = new InjectedFieldModel( field, dependencyModel );
-        this.fields.add( injectedFieldModel );
-    }
-
-    @Override
-    public Iterable<DependencyModel> dependencies()
-    {
-        return Iterables.map( new Function<InjectedFieldModel, DependencyModel>()
-        {
-            @Override
-            public DependencyModel map( InjectedFieldModel injectedFieldModel )
-            {
-                return injectedFieldModel.dependency();
-            }
-        }, fields );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> modelVisitor )
-        throws ThrowableType
-    {
-        if( modelVisitor.visitEnter( this ) )
-        {
-            for( InjectedFieldModel field : fields )
-            {
-                if( !field.accept( modelVisitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return modelVisitor.visitLeave( this );
-    }
-
-    public void inject( InjectionContext context, Object instance )
-    {
-        for( InjectedFieldModel field : fields )
-        {
-            field.inject( context, instance );
-        }
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.java
deleted file mode 100644
index b0ec660..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodModel.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.injection;
-
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import org.apache.zest.api.composite.InjectedMethodDescriptor;
-import org.apache.zest.bootstrap.InjectionException;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.VisitableHierarchy;
-
-/**
- * JAVADOC
- */
-public final class InjectedMethodModel
-    implements InjectedMethodDescriptor, Dependencies, VisitableHierarchy<Object, Object>
-{
-    // Model
-    private Method method;
-    private InjectedParametersModel parameters;
-
-    public InjectedMethodModel( Method method, InjectedParametersModel parameters )
-    {
-        this.method = method;
-        this.method.setAccessible( true );
-        this.parameters = parameters;
-    }
-
-    @Override
-    public Method method()
-    {
-        return method;
-    }
-
-    @Override
-    public Iterable<DependencyModel> dependencies()
-    {
-        return parameters.dependencies();
-    }
-
-    // Context
-    public void inject( InjectionContext context, Object instance )
-        throws InjectionException
-    {
-        Object[] params = parameters.newParametersInstance( context );
-        try
-        {
-            if( !method.isAccessible() )
-            {
-                method.setAccessible( true );
-            }
-            method.invoke( instance, params );
-        }
-        catch( IllegalAccessException e )
-        {
-            throw new InjectionException( e );
-        }
-        catch( InvocationTargetException e )
-        {
-            throw new InjectionException( e.getTargetException() );
-        }
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            parameters.accept( visitor );
-        }
-        return visitor.visitLeave( this );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
deleted file mode 100644
index 82121a4..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedMethodsModel.java
+++ /dev/null
@@ -1,124 +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.injection;
-
-import java.lang.annotation.Annotation;
-import java.lang.reflect.Method;
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.lang.reflect.TypeVariable;
-import java.util.ArrayList;
-import java.util.List;
-import org.apache.zest.api.injection.InjectionScope;
-import org.apache.zest.api.util.Annotations;
-import org.apache.zest.api.util.Classes;
-import org.apache.zest.api.util.Methods;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specifications;
-import org.apache.zest.functional.VisitableHierarchy;
-
-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.flattenIterables;
-import static org.apache.zest.functional.Iterables.iterable;
-import static org.apache.zest.functional.Iterables.map;
-
-/**
- * JAVADOC
- */
-public final class InjectedMethodsModel
-    implements Dependencies, VisitableHierarchy<Object, Object>
-{
-    // Model
-    private final List<InjectedMethodModel> methodModels = new ArrayList<InjectedMethodModel>();
-
-    public InjectedMethodsModel( Class fragmentClass )
-    {
-        nextMethod:
-        for( Method method : Methods.METHODS_OF.map( fragmentClass ) )
-        {
-            Annotation[][] parameterAnnotations = method.getParameterAnnotations();
-            if( parameterAnnotations.length > 0 )
-            {
-                InjectedParametersModel parametersModel = new InjectedParametersModel();
-                final Type[] genericParameterTypes = method.getGenericParameterTypes();
-                for( int i = 0; i < parameterAnnotations.length; i++ )
-                {
-                    Annotation injectionAnnotation = first( filter( Specifications.translate( Annotations.type(), hasAnnotation( InjectionScope.class ) ), iterable( parameterAnnotations[ i ] ) ) );
-                    if( injectionAnnotation == null )
-                    {
-                        continue nextMethod;
-                    }
-
-                    Type genericType = genericParameterTypes[ i ];
-                    if( genericType instanceof ParameterizedType )
-                    {
-                        genericType = new ParameterizedTypeInstance( ( (ParameterizedType) genericType ).getActualTypeArguments(), ( (ParameterizedType) genericType )
-                            .getRawType(), ( (ParameterizedType) genericType ).getOwnerType() );
-
-                        for( int j = 0; j < ( (ParameterizedType) genericType ).getActualTypeArguments().length; j++ )
-                        {
-                            Type type = ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ];
-                            if( type instanceof TypeVariable )
-                            {
-                                type = Classes.resolveTypeVariable( (TypeVariable) type, method.getDeclaringClass(), fragmentClass );
-                                ( (ParameterizedType) genericType ).getActualTypeArguments()[ j ] = type;
-                            }
-                        }
-                    }
-
-                    boolean optional = DependencyModel.isOptional( injectionAnnotation, parameterAnnotations[ i ] );
-                    DependencyModel dependencyModel = new DependencyModel( injectionAnnotation, genericType, fragmentClass, optional, parameterAnnotations[ i ] );
-                    parametersModel.addDependency( dependencyModel );
-                }
-                InjectedMethodModel methodModel = new InjectedMethodModel( method, parametersModel );
-                methodModels.add( methodModel );
-            }
-        }
-    }
-
-    @Override
-    public Iterable<DependencyModel> dependencies()
-    {
-        return flattenIterables( map( Dependencies.DEPENDENCIES_FUNCTION, methodModels ) );
-    }
-
-    // Context
-    public void inject( InjectionContext context, Object instance )
-    {
-        for( InjectedMethodModel methodModel : methodModels )
-        {
-            methodModel.inject( context, instance );
-        }
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( InjectedMethodModel methodModel : methodModels )
-            {
-                if( !methodModel.accept( visitor ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
deleted file mode 100644
index 2bb8360..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectedParametersModel.java
+++ /dev/null
@@ -1,103 +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.injection;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import org.apache.zest.api.composite.InjectedParametersDescriptor;
-import org.apache.zest.functional.HierarchicalVisitor;
-import org.apache.zest.functional.Specification;
-import org.apache.zest.functional.VisitableHierarchy;
-
-/**
- * JAVADOC
- */
-public final class InjectedParametersModel
-    implements InjectedParametersDescriptor, Dependencies, VisitableHierarchy<Object, Object>
-{
-    private final List<DependencyModel> parameterDependencies;
-
-    public InjectedParametersModel()
-    {
-        parameterDependencies = new ArrayList<DependencyModel>();
-    }
-
-    @Override
-    public Iterable<DependencyModel> dependencies()
-    {
-        return parameterDependencies;
-    }
-
-    // Context
-    public Object[] newParametersInstance( InjectionContext context )
-    {
-        Object[] parametersInstance = new Object[ parameterDependencies.size() ];
-
-        // Inject parameterDependencies
-        for( int j = 0; j < parameterDependencies.size(); j++ )
-        {
-            DependencyModel dependencyModel = parameterDependencies.get( j );
-            Object parameter = dependencyModel.inject( context );
-            parametersInstance[ j ] = parameter;
-        }
-
-        return parametersInstance;
-    }
-
-    public void addDependency( DependencyModel dependency )
-    {
-        parameterDependencies.add( dependency );
-    }
-
-    @Override
-    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
-        throws ThrowableType
-    {
-        if( visitor.visitEnter( this ) )
-        {
-            for( DependencyModel parameterDependency : parameterDependencies )
-            {
-                if( !visitor.visit( parameterDependency ) )
-                {
-                    break;
-                }
-            }
-        }
-        return visitor.visitLeave( this );
-    }
-
-    public Collection<DependencyModel> filter( Specification<DependencyModel> specification )
-    {
-        ArrayList<DependencyModel> result = new ArrayList<DependencyModel>();
-        for( DependencyModel model : parameterDependencies )
-        {
-            if( specification.satisfiedBy( model ) )
-            {
-                result.add( model );
-            }
-        }
-        return result;
-    }
-
-    @Override
-    public String toString()
-    {
-        return "InjectedParametersModel{" +
-               "parameterDependencies=" + parameterDependencies +
-               '}';
-    }
-}
-

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionContext.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionContext.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionContext.java
deleted file mode 100644
index f9cefac..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionContext.java
+++ /dev/null
@@ -1,121 +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.injection;
-
-import org.apache.zest.api.composite.CompositeInstance;
-import org.apache.zest.api.property.StateHolder;
-import org.apache.zest.runtime.composite.ProxyReferenceInvocationHandler;
-import org.apache.zest.runtime.composite.UsesInstance;
-import org.apache.zest.runtime.structure.ModuleInstance;
-import org.apache.zest.spi.module.ModuleSpi;
-
-/**
- * JAVADOC
- */
-public final class InjectionContext
-{
-    private final ModuleSpi moduleInstance;
-    private CompositeInstance compositeInstance;
-    private UsesInstance uses;
-    private StateHolder state;
-    private Object next; // Only used for concerns and side-effects
-    private ProxyReferenceInvocationHandler proxyHandler;
-    private Object instance; // Only used for inner classes
-
-    // For mixins
-
-    public InjectionContext( CompositeInstance compositeInstance, UsesInstance uses, StateHolder state )
-    {
-        this.moduleInstance = (ModuleInstance) compositeInstance.module();
-        this.compositeInstance = compositeInstance;
-        this.uses = uses;
-        this.state = state;
-    }
-
-    // For concerns and side-effects
-    public InjectionContext( ModuleSpi moduleInstance, Object next, ProxyReferenceInvocationHandler proxyHandler )
-    {
-        this.moduleInstance = moduleInstance;
-        this.next = next;
-        this.proxyHandler = proxyHandler;
-    }
-
-    public InjectionContext( ModuleSpi moduleInstance, UsesInstance uses )
-    {
-        this.moduleInstance = moduleInstance;
-        this.uses = uses;
-    }
-
-    // For inner classes
-    public InjectionContext( ModuleSpi moduleInstance, UsesInstance uses, Object instance )
-    {
-        this.moduleInstance = moduleInstance;
-        this.uses = uses;
-        this.instance = instance;
-    }
-
-    public ModuleSpi module()
-    {
-        return moduleInstance;
-    }
-
-    public CompositeInstance compositeInstance()
-    {
-        return compositeInstance;
-    }
-
-    public UsesInstance uses()
-    {
-        return uses;
-    }
-
-    public StateHolder state()
-    {
-        return state;
-    }
-
-    public Object next()
-    {
-        return next;
-    }
-
-    public Object instance()
-    {
-        return instance;
-    }
-
-    public ProxyReferenceInvocationHandler proxyHandler()
-    {
-        return proxyHandler;
-    }
-
-    public void setUses( UsesInstance uses )
-    {
-        this.uses = uses;
-    }
-
-    @Override
-    public String toString()
-    {
-        return "InjectionContext{" +
-               "compositeInstance=" + compositeInstance +
-               ", module=" + moduleInstance +
-               ", uses=" + uses +
-               ", state=" + state +
-               ", next=" + next +
-               ", proxyHandler=" + proxyHandler +
-               '}';
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProvider.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProvider.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProvider.java
deleted file mode 100644
index f69c24e..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProvider.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.injection;
-
-import org.apache.zest.runtime.injection.provider.InjectionProviderException;
-
-/**
- * JAVADOC
- */
-public interface InjectionProvider
-{
-    Object provideInjection( InjectionContext context )
-        throws InjectionProviderException;
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProviderFactory.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProviderFactory.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProviderFactory.java
deleted file mode 100644
index a993367..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/InjectionProviderFactory.java
+++ /dev/null
@@ -1,37 +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.injection;
-
-import org.apache.zest.bootstrap.InvalidInjectionException;
-import org.apache.zest.runtime.model.Resolution;
-
-/**
- * JAVADOC
- */
-public interface InjectionProviderFactory
-{
-    /**
-     * Binding a dependency given an injection resolution. If no binding
-     * can be found, return null. If the dependency is optional the dependency will
-     * then be explicitly set to null.
-     *
-     * @param resolution Injection resolution
-     * @param dependencyModel Dependency model
-     * @return InjectionProvider
-     * @throws InvalidInjectionException if the injection is invalid
-     */
-    InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel )
-        throws InvalidInjectionException;
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/ParameterizedTypeInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/ParameterizedTypeInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/ParameterizedTypeInstance.java
deleted file mode 100644
index 6a161b0..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/ParameterizedTypeInstance.java
+++ /dev/null
@@ -1,65 +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;
-
-import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.Type;
-import java.util.Arrays;
-
-/**
- * TODO
- */
-public class ParameterizedTypeInstance
-    implements ParameterizedType
-{
-    private Type[] actualTypeArguments;
-    private Type rawType;
-    private Type ownerType;
-
-    public ParameterizedTypeInstance( Type[] actualTypeArguments, Type rawType, Type ownerType )
-    {
-        this.actualTypeArguments = actualTypeArguments;
-        this.rawType = rawType;
-        this.ownerType = ownerType;
-    }
-
-    @Override
-    public Type[] getActualTypeArguments()
-    {
-        return actualTypeArguments;
-    }
-
-    @Override
-    public Type getRawType()
-    {
-        return rawType;
-    }
-
-    @Override
-    public Type getOwnerType()
-    {
-        return ownerType;
-    }
-
-    @Override
-    public String toString()
-    {
-        return rawType.toString() + Arrays.asList( actualTypeArguments );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderDecorator.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderDecorator.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderDecorator.java
deleted file mode 100644
index 300e1d7..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderDecorator.java
+++ /dev/null
@@ -1,57 +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 org.apache.zest.runtime.injection.InjectionContext;
-import org.apache.zest.runtime.injection.InjectionProvider;
-
-/**
- * If a dependency resolution should be a singleton, wrap it with this
- * to provide a single instance "cache".
- */
-public final class CachingInjectionProviderDecorator
-    implements InjectionProvider
-{
-    private final InjectionProvider decoratedProvider;
-    private volatile Object singletonInstance;
-
-    public CachingInjectionProviderDecorator( InjectionProvider injectionProvider )
-    {
-        this.decoratedProvider = injectionProvider;
-    }
-
-    public InjectionProvider decoratedProvider()
-    {
-        return decoratedProvider;
-    }
-
-    @Override
-    public Object provideInjection( InjectionContext context )
-        throws InjectionProviderException
-    {
-        if( singletonInstance == null )
-        {
-            synchronized( this )
-            {
-                if( singletonInstance == null )
-                {
-                    singletonInstance = decoratedProvider.provideInjection( context );
-                }
-            }
-        }
-
-        return singletonInstance;
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderFactoryDecorator.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderFactoryDecorator.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderFactoryDecorator.java
deleted file mode 100644
index cdb4f5a..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/CachingInjectionProviderFactoryDecorator.java
+++ /dev/null
@@ -1,50 +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.injection.provider;
-
-import org.apache.zest.bootstrap.InvalidInjectionException;
-import org.apache.zest.runtime.injection.DependencyModel;
-import org.apache.zest.runtime.injection.InjectionProvider;
-import org.apache.zest.runtime.injection.InjectionProviderFactory;
-import org.apache.zest.runtime.model.Resolution;
-
-/**
- * JAVADOC
- */
-public class CachingInjectionProviderFactoryDecorator
-    implements InjectionProviderFactory
-{
-    private final InjectionProviderFactory decoratedFactory;
-
-    public CachingInjectionProviderFactoryDecorator( InjectionProviderFactory decoratedFactory )
-    {
-        this.decoratedFactory = decoratedFactory;
-    }
-
-    @Override
-    public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel )
-        throws InvalidInjectionException
-    {
-        InjectionProvider injectionProvider = decoratedFactory.newInjectionProvider( resolution, dependencyModel );
-        if( injectionProvider != null )
-        {
-            return new CachingInjectionProviderDecorator( injectionProvider );
-        }
-        else
-        {
-            return null;
-        }
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderException.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderException.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderException.java
deleted file mode 100644
index abdae00..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderException.java
+++ /dev/null
@@ -1,32 +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;
-
-/**
- * JAVADOC
- */
-public class InjectionProviderException
-    extends RuntimeException
-{
-    public InjectionProviderException( String string )
-    {
-        super( string );
-    }
-
-    public InjectionProviderException( String string, Throwable throwable )
-    {
-        super( string, throwable );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/a789141d/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java b/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
deleted file mode 100644
index 8d87bb9..0000000
--- a/core/runtime/src/main/java/org/apache/zest/runtime/injection/provider/InjectionProviderFactoryStrategy.java
+++ /dev/null
@@ -1,102 +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.util.HashMap;
-import java.util.Map;
-import org.apache.zest.api.common.MetaInfo;
-import org.apache.zest.api.composite.InvalidValueCompositeException;
-import org.apache.zest.api.composite.ModelDescriptor;
-import org.apache.zest.api.concern.internal.ConcernFor;
-import org.apache.zest.api.injection.scope.Invocation;
-import org.apache.zest.api.injection.scope.Service;
-import org.apache.zest.api.injection.scope.State;
-import org.apache.zest.api.injection.scope.Structure;
-import org.apache.zest.api.injection.scope.This;
-import org.apache.zest.api.injection.scope.Uses;
-import org.apache.zest.api.sideeffect.internal.SideEffectFor;
-import org.apache.zest.api.value.ValueComposite;
-import org.apache.zest.bootstrap.InvalidInjectionException;
-import org.apache.zest.runtime.injection.DependencyModel;
-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;
-
-/**
- * JAVADOC
- */
-public final class InjectionProviderFactoryStrategy
-    implements InjectionProviderFactory
-{
-    private final Map<Class<? extends Annotation>, InjectionProviderFactory> generalProviderFactories = new HashMap<Class<? extends Annotation>, InjectionProviderFactory>();
-    private final Map<Class<? extends Annotation>, InjectionProviderFactory> valuesProviderFactories = new HashMap<Class<? extends Annotation>, InjectionProviderFactory>();
-    private MetaInfo metaInfo;
-
-    public InjectionProviderFactoryStrategy( MetaInfo metaInfo )
-    {
-        this.metaInfo = metaInfo;
-        valuesProviderFactories.put( This.class, new ThisInjectionProviderFactory() );
-        ModifiesInjectionProviderFactory modifiesInjectionProviderFactory = new ModifiesInjectionProviderFactory();
-        valuesProviderFactories.put( ConcernFor.class, modifiesInjectionProviderFactory );
-        valuesProviderFactories.put( SideEffectFor.class, modifiesInjectionProviderFactory );
-        valuesProviderFactories.put( State.class, new StateInjectionProviderFactory() );
-
-        valuesProviderFactories.put( Structure.class, new CachingInjectionProviderFactoryDecorator( new StructureInjectionProviderFactory() ) );
-        valuesProviderFactories.put( Service.class, new CachingInjectionProviderFactoryDecorator( new ServiceInjectionProviderFactory() ) );
-        generalProviderFactories.put( Invocation.class, new InvocationInjectionProviderFactory() );
-        generalProviderFactories.put( Uses.class, new UsesInjectionProviderFactory() );
-    }
-
-    @Override
-    public InjectionProvider newInjectionProvider( Resolution resolution, DependencyModel dependencyModel )
-        throws InvalidInjectionException
-    {
-        Class<? extends Annotation> injectionAnnotationType = dependencyModel.injectionAnnotation().annotationType();
-        InjectionProviderFactory factory1 = generalProviderFactories.get( injectionAnnotationType );
-        InjectionProviderFactory factory2 = valuesProviderFactories.get( injectionAnnotationType );
-        if( factory1 == null && factory2 == null )
-        {
-            InjectionProviderFactory factory = metaInfo.get( InjectionProviderFactory.class );
-            if( factory != null )
-            {
-                return factory.newInjectionProvider( resolution, dependencyModel );
-            }
-            else
-            {
-                throw new InvalidInjectionException( "Unknown injection annotation @" + injectionAnnotationType.getSimpleName() );
-            }
-        }
-        ModelDescriptor composite = resolution.model();
-        Class<?> compositeType = first( composite.types() );
-        if( factory1 != null && ValueComposite.class.isAssignableFrom( compositeType ) )
-        {
-            throw new InvalidValueCompositeException( "@" + injectionAnnotationType.getSimpleName() + " is not allowed in ValueComposites: " + compositeType );
-        }
-
-        InjectionProviderFactory factory;
-        if( factory1 == null )
-        {
-            factory = factory2;
-        }
-        else
-        {
-            factory = factory1;
-        }
-        return factory.newInjectionProvider( resolution, dependencyModel );
-    }
-}