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/30 21:48:05 UTC

[06/80] [partial] zest-java git commit: First round of changes to move to org.apache.zest namespace.

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/NamedAssociationValueState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/NamedAssociationValueState.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/NamedAssociationValueState.java
new file mode 100644
index 0000000..b252d33
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/NamedAssociationValueState.java
@@ -0,0 +1,84 @@
+/*
+ * Copyright (c) 2011-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.value;
+
+import java.util.Iterator;
+import java.util.Map;
+import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.spi.entity.NamedAssociationState;
+
+public class NamedAssociationValueState
+    implements NamedAssociationState
+{
+    private final Map<String, EntityReference> references;
+
+    public NamedAssociationValueState( Map<String, EntityReference> references )
+    {
+        this.references = references;
+    }
+
+    @Override
+    public int count()
+    {
+        return references.size();
+    }
+
+    @Override
+    public boolean containsName( String name )
+    {
+        return references.containsKey( name );
+    }
+
+    @Override
+    public boolean put( String name, EntityReference entityReference )
+    {
+        return references.put( name, entityReference ) != null;
+    }
+
+    @Override
+    public boolean remove( String name )
+    {
+        return references.remove( name ) != null;
+    }
+
+    @Override
+    public EntityReference get( String name )
+    {
+        return references.get( name );
+    }
+
+    @Override
+    public String nameOf( EntityReference entityReference )
+    {
+        for( Map.Entry<String, EntityReference> entry : references.entrySet() )
+        {
+            if( entry.getValue().equals( entityReference ) )
+            {
+                return entry.getKey();
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public Iterator<String> iterator()
+    {
+        return references.keySet().iterator();
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ReferenceProperty.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ReferenceProperty.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ReferenceProperty.java
new file mode 100644
index 0000000..1bda2e9
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ReferenceProperty.java
@@ -0,0 +1,53 @@
+/*
+ * 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.value;
+
+import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.property.Property;
+
+/**
+ * The reference for an Association
+ */
+public class ReferenceProperty
+    implements Property<EntityReference>
+{
+    EntityReference reference;
+
+    public ReferenceProperty()
+    {
+    }
+
+    public ReferenceProperty( EntityReference reference )
+    {
+        this.reference = reference;
+    }
+
+    @Override
+    public EntityReference get()
+    {
+        return reference;
+    }
+
+    @Override
+    public void set( EntityReference newValue )
+        throws IllegalArgumentException, IllegalStateException
+    {
+        reference = newValue;
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
new file mode 100644
index 0000000..ceeeb10
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderInstance.java
@@ -0,0 +1,79 @@
+/*
+ * 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.value;
+
+import org.apache.zest.api.association.AssociationStateHolder;
+import org.apache.zest.api.common.ConstructionException;
+import org.apache.zest.api.composite.Composite;
+import org.apache.zest.api.value.NoSuchValueException;
+import org.apache.zest.api.value.ValueBuilder;
+import org.apache.zest.runtime.composite.StateResolver;
+import org.apache.zest.spi.module.ModelModule;
+import org.apache.zest.runtime.structure.ModuleInstance;
+
+import static org.apache.zest.functional.Iterables.first;
+
+/**
+ * Implementation of ValueBuilder
+ */
+public final class ValueBuilderInstance<T>
+    implements ValueBuilder<T>
+{
+
+    private final ModuleInstance currentModule;
+    private final ValueInstance prototypeInstance;
+
+    public ValueBuilderInstance( ModelModule<ValueModel> compositeModelModule, ModuleInstance currentModule, StateResolver stateResolver )
+    {
+        ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, stateResolver );
+        prototypeInstance = compositeModelModule.model().newValueInstance( compositeModelModule.module(), state );
+        prototypeInstance.prepareToBuild();
+        this.currentModule = currentModule;
+    }
+
+    @Override
+    public T prototype()
+    {
+        return prototypeInstance.<T>proxy();
+    }
+
+    @Override
+    public AssociationStateHolder state()
+    {
+        return prototypeInstance.state();
+    }
+
+    @Override
+    public <K> K prototypeFor( Class<K> mixinType )
+    {
+        return prototypeInstance.newProxy( mixinType );
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public T newInstance()
+        throws ConstructionException
+    {
+        Class<Composite> valueType = (Class<Composite>) first( prototypeInstance.types() );
+
+        ModelModule<ValueModel> valueModel = currentModule.typeLookup().lookupValueModel( valueType );
+
+        if( valueModel == null )
+        {
+            throw new NoSuchValueException( valueType.getName(), currentModule.name() );
+        }
+        return new ValueBuilderWithPrototype<>( valueModel, currentModule, prototype() ).newInstance();
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithPrototype.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithPrototype.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithPrototype.java
new file mode 100644
index 0000000..f6a40ae
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithPrototype.java
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2007, Rickard Öberg.
+ * Copyright 2009, Niclas Hedhman.
+ * Copyright 2012, Kent Sølvsten.
+ * Copyright 2013, Paul Merlin.
+ *
+ * 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.value;
+
+import java.util.HashMap;
+import java.util.Map;
+import org.apache.zest.api.association.AssociationDescriptor;
+import org.apache.zest.api.association.AssociationStateHolder;
+import org.apache.zest.api.association.NamedAssociation;
+import org.apache.zest.api.common.ConstructionException;
+import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.property.PropertyDescriptor;
+import org.apache.zest.api.value.ValueBuilder;
+import org.apache.zest.api.value.ValueComposite;
+import org.apache.zest.functional.Function;
+import org.apache.zest.runtime.composite.FunctionStateResolver;
+import org.apache.zest.runtime.composite.MixinModel;
+import org.apache.zest.runtime.composite.MixinsModel;
+import org.apache.zest.runtime.composite.StateResolver;
+import org.apache.zest.runtime.composite.UsesInstance;
+import org.apache.zest.runtime.injection.InjectionContext;
+import org.apache.zest.spi.module.ModelModule;
+import org.apache.zest.runtime.structure.ModuleInstance;
+
+/**
+ * Implementation of ValueBuilder with a prototype supplied
+ */
+public class ValueBuilderWithPrototype<T>
+    implements ValueBuilder<T>
+{
+    private ValueInstance prototypeInstance;
+    private final ValueModel valueModel;
+
+    public ValueBuilderWithPrototype( ModelModule<ValueModel> compositeModelModule,
+                                      ModuleInstance currentModule,
+                                      T prototype
+    )
+    {
+        valueModel = compositeModelModule.model();
+        // Only shallow clone, as all generic types of the ValueComposites are expected to be Immutable.
+
+        MixinsModel mixinsModel = valueModel.mixinsModel();
+        Object[] mixins = mixinsModel.newMixinHolder();
+        final ValueStateInstance prototypeState = ValueInstance.valueInstanceOf( (ValueComposite) prototype ).state();
+        StateResolver resolver = new FunctionStateResolver(
+            new PropertyDescriptorFunction( prototypeState ),
+            new AssociationDescriptorEntityReferenceFunction( prototypeState ),
+            new AssociationDescriptorIterableFunction( prototypeState ),
+            new AssociationDescriptorMapFunction( prototypeState )
+        );
+        ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, resolver );
+        ValueInstance valueInstance = new ValueInstance(
+            valueModel,
+            currentModule,
+            mixins,
+            state
+        );
+
+        int i = 0;
+        InjectionContext injectionContext = new InjectionContext( valueInstance, UsesInstance.EMPTY_USES, state );
+        for( MixinModel mixinModel : mixinsModel.mixinModels() )
+        {
+            mixins[ i++ ] = mixinModel.newInstance( injectionContext );
+        }
+
+//        // Use serialization-deserialization to make a copy of the prototype
+//        final Object value;
+//        try
+//        {
+//            // @TODO there is probably a more efficient way to do this
+//            ValueSerialization valueSerialization = currentModule.valueSerialization();
+//            String serialized = valueSerialization.serialize( prototype );
+//            value = valueSerialization.deserialize( valueModel.valueType(), serialized);
+//        }
+//        catch( ValueSerializationException e )
+//        {
+//            throw new IllegalStateException( "Could not serialize-copy Value", e );
+//        }
+
+//        ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
+        valueInstance.prepareToBuild();
+        this.prototypeInstance = valueInstance;
+    }
+
+    @Override
+    public T prototype()
+    {
+        verifyUnderConstruction();
+        return prototypeInstance.<T>proxy();
+    }
+
+    @Override
+    public AssociationStateHolder state()
+    {
+        verifyUnderConstruction();
+        return prototypeInstance.state();
+    }
+
+    @Override
+    public <K> K prototypeFor( Class<K> mixinType )
+    {
+        verifyUnderConstruction();
+        return prototypeInstance.newProxy( mixinType );
+    }
+
+    @Override
+    public T newInstance()
+        throws ConstructionException
+    {
+        verifyUnderConstruction();
+
+        // Set correct info's (immutable) on the state
+        prototypeInstance.prepareBuilderState();
+
+        // Check that it is valid
+        valueModel.checkConstraints( prototypeInstance.state() );
+
+        try
+        {
+            return prototypeInstance.<T>proxy();
+        }
+        finally
+        {
+            // Invalidate builder
+            prototypeInstance = null;
+        }
+    }
+
+    private void verifyUnderConstruction()
+    {
+        if( prototypeInstance == null )
+        {
+            throw new IllegalStateException( "ValueBuilder instances cannot be reused" );
+        }
+    }
+
+    private static class PropertyDescriptorFunction
+        implements Function<PropertyDescriptor, Object>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public PropertyDescriptorFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Object map( PropertyDescriptor descriptor )
+        {
+            return prototypeState.propertyFor( descriptor.accessor() ).get();
+        }
+    }
+
+    private static class AssociationDescriptorEntityReferenceFunction
+        implements Function<AssociationDescriptor, EntityReference>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorEntityReferenceFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public EntityReference map( AssociationDescriptor descriptor )
+        {
+            return prototypeState.associationFor( descriptor.accessor() ).reference();
+        }
+    }
+
+    private static class AssociationDescriptorIterableFunction
+        implements Function<AssociationDescriptor, Iterable<EntityReference>>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorIterableFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Iterable<EntityReference> map( AssociationDescriptor descriptor )
+        {
+            return prototypeState.manyAssociationFor( descriptor.accessor() ).references();
+        }
+    }
+
+    private static class AssociationDescriptorMapFunction
+        implements Function<AssociationDescriptor, Map<String, EntityReference>>
+    {
+        private final ValueStateInstance prototypeState;
+
+        public AssociationDescriptorMapFunction( ValueStateInstance prototypeState )
+        {
+            this.prototypeState = prototypeState;
+        }
+
+        @Override
+        public Map<String, EntityReference> map( AssociationDescriptor descriptor )
+        {
+            Map<String, EntityReference> result = new HashMap<>();
+            NamedAssociation<?> namedAssociation = prototypeState.namedAssociationFor( descriptor.accessor() );
+            for( String name : namedAssociation )
+            {
+                result.put( name, namedAssociation.referenceOf( name ) );
+            }
+            return result;
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithState.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithState.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithState.java
new file mode 100644
index 0000000..57413b5
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueBuilderWithState.java
@@ -0,0 +1,91 @@
+/*
+ * Copyright (c) 2012, Kent Sølvsten. 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.value;
+
+import org.apache.zest.api.association.AssociationStateHolder;
+import org.apache.zest.api.common.ConstructionException;
+import org.apache.zest.api.value.ValueBuilder;
+import org.apache.zest.runtime.composite.StateResolver;
+import org.apache.zest.spi.module.ModelModule;
+import org.apache.zest.runtime.structure.ModuleInstance;
+
+public class ValueBuilderWithState<T> implements ValueBuilder<T>
+{
+    private final ModelModule<ValueModel> model;
+    private ValueInstance prototypeInstance;
+
+    public ValueBuilderWithState( ModelModule<ValueModel> compositeModelModule,
+                                  ModuleInstance currentModule,
+                                  StateResolver stateResolver )
+    {
+        ValueStateInstance state = new ValueStateInstance( compositeModelModule, currentModule, stateResolver );
+        ValueInstance instance = compositeModelModule.model().newValueInstance( compositeModelModule.module(), state );
+        instance.prepareToBuild();
+        this.model = compositeModelModule;
+        this.prototypeInstance = instance;
+    }
+
+    @Override
+    public T prototype()
+    {
+        verifyUnderConstruction();
+        return prototypeInstance.<T>proxy();
+    }
+
+    @Override
+    public AssociationStateHolder state()
+    {
+        verifyUnderConstruction();
+        return prototypeInstance.state();
+    }
+
+    @Override
+    public <K> K prototypeFor( Class<K> mixinType )
+    {
+        verifyUnderConstruction();
+
+        return prototypeInstance.newProxy( mixinType );
+    }
+
+    @Override
+    public T newInstance()
+        throws ConstructionException
+    {
+        verifyUnderConstruction();
+
+        // Set correct info's (immutable) on the state
+        prototypeInstance.prepareBuilderState();
+
+        // Check that it is valid
+        model.model().checkConstraints( prototypeInstance.state() );
+
+        try
+        {
+            return prototypeInstance.<T>proxy();
+        }
+        finally
+        {
+            // Invalidate builder
+            prototypeInstance = null;
+        }
+    }
+
+    private void verifyUnderConstruction()
+    {
+        if( prototypeInstance == null )
+        {
+            throw new IllegalStateException( "ValueBuilder instances cannot be reused" );
+        }
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
new file mode 100644
index 0000000..3141ac1
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueInstance.java
@@ -0,0 +1,182 @@
+/*
+ * Copyright (c) 2007, Rickard Öberg. All Rights Reserved.
+ * Copyright (c) 2007, Niclas Hedhman. All Rights Reserved.
+ * Copyright (c) 2007, Alin Dreghiciu. All Rights Reserved.
+ * Copyright (c) 2012, 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.value;
+
+import java.lang.reflect.Proxy;
+import org.apache.zest.api.composite.CompositeInstance;
+import org.apache.zest.api.value.ValueComposite;
+import org.apache.zest.runtime.association.AssociationModel;
+import org.apache.zest.runtime.association.ManyAssociationModel;
+import org.apache.zest.runtime.association.NamedAssociationModel;
+import org.apache.zest.runtime.composite.MixinsInstance;
+import org.apache.zest.runtime.composite.TransientInstance;
+import org.apache.zest.runtime.property.PropertyInstance;
+import org.apache.zest.runtime.property.PropertyModel;
+import org.apache.zest.spi.module.ModuleSpi;
+
+/**
+ * ValueComposite instance
+ */
+public final class ValueInstance
+    extends TransientInstance
+    implements CompositeInstance, MixinsInstance
+{
+    public static ValueInstance valueInstanceOf( ValueComposite composite )
+    {
+        return (ValueInstance) Proxy.getInvocationHandler( composite );
+    }
+
+    public ValueInstance( ValueModel compositeModel,
+                          ModuleSpi moduleInstance,
+                          Object[] mixins,
+                          ValueStateInstance state
+    )
+    {
+        super( compositeModel, moduleInstance, mixins, state );
+    }
+
+    /**
+     * Perform equals with {@code o} argument.
+     * <p>
+     * The definition of equals() for the Value is that if both the state and descriptor are equal,
+     * then the values 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 || !Proxy.isProxyClass( o.getClass() ) )
+        {
+            return false;
+        }
+
+        try
+        {
+            ValueInstance that = (ValueInstance) Proxy.getInvocationHandler( o );
+            // Descriptor equality
+            if( !descriptor().equals( that.descriptor() ) )
+            {
+                return false;
+            }
+            // State equality
+            return state.equals( that.state );
+        }
+        catch( ClassCastException e )
+        {
+            return false;
+        }
+    }
+
+    @Override
+    public ValueStateInstance state()
+    {
+        return (ValueStateInstance) state;
+    }
+
+    @Override
+    public ValueModel descriptor()
+    {
+        return (ValueModel) compositeModel;
+    }
+
+    /**
+     * When a ValueBuilder is about to start, ensure that all state has builder infos, i.e. they are mutable.
+     */
+    public void prepareToBuild()
+    {
+        for( PropertyModel propertyDescriptor : descriptor().state().properties() )
+        {
+            PropertyInstance<Object> propertyInstance =
+                (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
+
+            propertyInstance.prepareToBuild( propertyDescriptor );
+        }
+
+        for( AssociationModel associationDescriptor : descriptor().state().associations() )
+        {
+            state().associationFor( associationDescriptor.accessor() )
+                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+        }
+
+        for( ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations() )
+        {
+            state().manyAssociationFor( associationDescriptor.accessor() )
+                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+        }
+
+        for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
+        {
+            state().namedAssociationFor( associationDescriptor.accessor() )
+                .setAssociationInfo( associationDescriptor.getBuilderInfo() );
+        }
+    }
+
+    /**
+     * When a ValueBuilder is finished and is about to instantiate a Value, call this to ensure that the state has correct
+     * settings, i.e. is immutable.
+     */
+    public void prepareBuilderState()
+    {
+        for( PropertyModel propertyDescriptor : descriptor().state().properties() )
+        {
+            PropertyInstance<Object> propertyInstance =
+                (PropertyInstance<Object>) state.propertyFor( propertyDescriptor.accessor() );
+            propertyInstance.prepareBuilderState( propertyDescriptor );
+        }
+
+        for( AssociationModel associationDescriptor : descriptor().state().associations() )
+        {
+            state().associationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
+        }
+
+        for( ManyAssociationModel associationDescriptor : descriptor().state().manyAssociations() )
+        {
+            state().manyAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
+        }
+
+        for( NamedAssociationModel associationDescriptor : descriptor().state().namedAssociations() )
+        {
+            state().namedAssociationFor( associationDescriptor.accessor() ).setAssociationInfo( associationDescriptor );
+        }
+    }
+
+    /**
+     * Calculate hash code.
+     *
+     * @return the hashcode of this instance.
+     */
+    @Override
+    public int hashCode()
+    {
+        int hash = compositeModel.hashCode() * 23; // Descriptor
+        return hash + state.hashCode() * 5; // State
+    }
+
+    @Override
+    public String toString()
+    {
+        return ( (ModuleSpi) module() ).valueSerialization().serialize( this.<ValueComposite>proxy() );
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
new file mode 100644
index 0000000..aa8c9b4
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueModel.java
@@ -0,0 +1,112 @@
+/*
+ * 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.value;
+
+import org.apache.zest.api.common.MetaInfo;
+import org.apache.zest.api.common.Visibility;
+import org.apache.zest.api.constraint.ConstraintViolationException;
+import org.apache.zest.api.type.ValueCompositeType;
+import org.apache.zest.api.value.ValueDescriptor;
+import org.apache.zest.runtime.association.AssociationModel;
+import org.apache.zest.runtime.association.ManyAssociationModel;
+import org.apache.zest.runtime.composite.CompositeMethodsModel;
+import org.apache.zest.runtime.composite.CompositeModel;
+import org.apache.zest.runtime.composite.MixinModel;
+import org.apache.zest.runtime.composite.MixinsModel;
+import org.apache.zest.runtime.composite.UsesInstance;
+import org.apache.zest.runtime.injection.InjectionContext;
+import org.apache.zest.runtime.property.PropertyModel;
+import org.apache.zest.runtime.unitofwork.UnitOfWorkInstance;
+import org.apache.zest.spi.module.ModuleSpi;
+
+/**
+ * Model for ValueComposites
+ */
+public final class ValueModel
+    extends CompositeModel
+    implements ValueDescriptor
+{
+    private ValueCompositeType valueType;
+
+    public ValueModel( final Iterable<Class<?>> types,
+                       final Visibility visibility,
+                       final MetaInfo metaInfo,
+                       final MixinsModel mixinsModel,
+                       final ValueStateModel stateModel,
+                       final CompositeMethodsModel compositeMethodsModel
+    )
+    {
+        super( types, visibility, metaInfo, mixinsModel, stateModel, compositeMethodsModel );
+
+        valueType = new ValueCompositeType( this );
+    }
+
+    @Override
+    public ValueCompositeType valueType()
+    {
+        return valueType;
+    }
+
+    @Override
+    public ValueStateModel state()
+    {
+        return (ValueStateModel) super.state();
+    }
+
+    // This method is ONLY called by ValueBuilders
+    void checkConstraints( ValueStateInstance state )
+        throws ConstraintViolationException
+    {
+        for( PropertyModel propertyModel : stateModel.properties() )
+        {
+            propertyModel.checkConstraints( state.propertyFor( propertyModel.accessor() ).get() );
+        }
+
+        // IF no UnitOfWork is active, then the Association checks shouldn't be done.
+        if( UnitOfWorkInstance.getCurrent().empty() )
+        {
+            return;
+        }
+        for( AssociationModel associationModel : ( (ValueStateModel) stateModel ).associations() )
+        {
+            associationModel.checkConstraints( state.associationFor( associationModel.accessor() ).get() );
+        }
+
+        for( ManyAssociationModel associationModel : ( (ValueStateModel) stateModel ).manyAssociations() )
+        {
+            associationModel.checkAssociationConstraints( state.manyAssociationFor( associationModel.accessor() ) );
+        }
+    }
+
+    public ValueInstance newValueInstance( ModuleSpi moduleInstance,
+                                           ValueStateInstance state
+    )
+    {
+        Object[] mixins = mixinsModel.newMixinHolder();
+
+        ValueInstance instance = new ValueInstance( this, moduleInstance, mixins, state );
+
+        // Instantiate all mixins
+        int i = 0;
+        InjectionContext injectionContext = new InjectionContext( instance, UsesInstance.EMPTY_USES, state );
+        for( MixinModel mixinModel : mixinsModel.mixinModels() )
+        {
+            mixins[ i++ ] = mixinModel.newInstance( injectionContext );
+        }
+
+        // Return
+        return instance;
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
new file mode 100644
index 0000000..84a2719
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateInstance.java
@@ -0,0 +1,233 @@
+/*
+ * Copyright (c) 2008-2011, Rickard Öberg. All Rights Reserved.
+ * Copyright (c) 2008-2013, Niclas Hedhman. All Rights Reserved.
+ * Copyright (c) 2012, Kent Sølvsten. 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.value;
+
+import java.lang.reflect.AccessibleObject;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+import org.apache.zest.api.association.AssociationDescriptor;
+import org.apache.zest.api.association.AssociationStateHolder;
+import org.apache.zest.api.entity.EntityReference;
+import org.apache.zest.api.property.PropertyDescriptor;
+import org.apache.zest.runtime.association.AssociationInfo;
+import org.apache.zest.runtime.association.AssociationInstance;
+import org.apache.zest.runtime.association.AssociationModel;
+import org.apache.zest.runtime.association.ManyAssociationInstance;
+import org.apache.zest.runtime.association.ManyAssociationModel;
+import org.apache.zest.runtime.association.NamedAssociationInstance;
+import org.apache.zest.runtime.association.NamedAssociationModel;
+import org.apache.zest.runtime.composite.StateResolver;
+import org.apache.zest.runtime.property.PropertyInfo;
+import org.apache.zest.runtime.property.PropertyInstance;
+import org.apache.zest.runtime.property.PropertyModel;
+import org.apache.zest.spi.module.ModelModule;
+import org.apache.zest.runtime.structure.ModuleInstance;
+
+/**
+ * TODO
+ */
+public final class ValueStateInstance
+    implements AssociationStateHolder
+{
+    private final Map<AccessibleObject, PropertyInstance<?>> properties;
+    private final Map<AccessibleObject, AssociationInstance<?>> associations;
+    private final Map<AccessibleObject, ManyAssociationInstance<?>> manyAssociations;
+    private final Map<AccessibleObject, NamedAssociationInstance<?>> namedAssociations;
+
+    public ValueStateInstance( Map<AccessibleObject, PropertyInstance<?>> properties,
+                               Map<AccessibleObject, AssociationInstance<?>> associations,
+                               Map<AccessibleObject, ManyAssociationInstance<?>> manyAssociations,
+                               Map<AccessibleObject, NamedAssociationInstance<?>> namedAssociations
+    )
+    {
+        this.properties = properties;
+        this.associations = associations;
+        this.manyAssociations = manyAssociations;
+        this.namedAssociations = namedAssociations;
+    }
+
+    public ValueStateInstance( ModelModule<ValueModel> compositeModelModule,
+                               ModuleInstance currentModule,
+                               StateResolver stateResolver )
+    {
+        ValueModel valueModel = compositeModelModule.model();
+        this.properties = new LinkedHashMap<>();
+        for( PropertyDescriptor propertyDescriptor : valueModel.state().properties() )
+        {
+            PropertyInfo builderInfo = ( (PropertyModel) propertyDescriptor ).getBuilderInfo();
+            Object value = stateResolver.getPropertyState( propertyDescriptor );
+            PropertyInstance<Object> propertyInstance = new PropertyInstance<>( builderInfo, value );
+            properties.put( propertyDescriptor.accessor(), propertyInstance );
+        }
+
+        this.associations = new LinkedHashMap<>();
+        for( AssociationDescriptor associationDescriptor : valueModel.state().associations() )
+        {
+            AssociationInfo builderInfo = ( (AssociationModel) associationDescriptor ).getBuilderInfo();
+            EntityReference value = stateResolver.getAssociationState( associationDescriptor );
+            AssociationInstance<Object> associationInstance1 = new AssociationInstance<>(
+                builderInfo,
+                currentModule.getEntityFunction(),
+                new ReferenceProperty( value ) );
+            associations.put( associationDescriptor.accessor(), associationInstance1 );
+        }
+
+        this.manyAssociations = new LinkedHashMap<>();
+        for( AssociationDescriptor associationDescriptor : valueModel.state().manyAssociations() )
+        {
+            AssociationInfo builderInfo = ( (ManyAssociationModel) associationDescriptor ).getBuilderInfo();
+            List<EntityReference> value = stateResolver.getManyAssociationState( associationDescriptor );
+            ManyAssociationValueState manyAssociationState = new ManyAssociationValueState( value );
+            ManyAssociationInstance<Object> associationInstance = new ManyAssociationInstance<>(
+                builderInfo,
+                currentModule.getEntityFunction(),
+                manyAssociationState );
+            manyAssociations.put( associationDescriptor.accessor(), associationInstance );
+        }
+
+        this.namedAssociations = new LinkedHashMap<>();
+        for( AssociationDescriptor associationDescriptor : valueModel.state().namedAssociations() )
+        {
+            AssociationInfo builderInfo = ( (NamedAssociationModel) associationDescriptor ).getBuilderInfo();
+            Map<String, EntityReference> value = stateResolver.getNamedAssociationState( associationDescriptor );
+            NamedAssociationValueState namedAssociationState = new NamedAssociationValueState( value );
+            NamedAssociationInstance<Object> associationInstance = new NamedAssociationInstance<>(
+                builderInfo,
+                currentModule.getEntityFunction(),
+                namedAssociationState );
+            namedAssociations.put( associationDescriptor.accessor(), associationInstance );
+        }
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <T> PropertyInstance<T> propertyFor( AccessibleObject accessor )
+        throws IllegalArgumentException
+    {
+        PropertyInstance<T> property = (PropertyInstance<T>) properties.get( accessor );
+
+        if( property == null )
+        {
+            throw new IllegalArgumentException( "No such property:" + accessor );
+        }
+
+        return property;
+    }
+
+    @Override
+    public Iterable<PropertyInstance<?>> properties()
+    {
+        return properties.values();
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <T> AssociationInstance<T> associationFor( AccessibleObject accessor )
+    {
+        AssociationInstance<T> association = (AssociationInstance<T>) associations.get( accessor );
+
+        if( association == null )
+        {
+            throw new IllegalArgumentException( "No such association:" + accessor );
+        }
+
+        return association;
+    }
+
+    @Override
+    public Iterable<AssociationInstance<?>> allAssociations()
+    {
+        return associations.values();
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <T> ManyAssociationInstance<T> manyAssociationFor( AccessibleObject accessor )
+    {
+        ManyAssociationInstance<T> manyAssociation = (ManyAssociationInstance<T>) manyAssociations.get( accessor );
+
+        if( manyAssociation == null )
+        {
+            throw new IllegalArgumentException( "No such many-association:" + accessor );
+        }
+
+        return manyAssociation;
+    }
+
+    @Override
+    public Iterable<ManyAssociationInstance<?>> allManyAssociations()
+    {
+        return manyAssociations.values();
+    }
+
+    @Override
+    @SuppressWarnings( "unchecked" )
+    public <T> NamedAssociationInstance<T> namedAssociationFor( AccessibleObject accessor )
+    {
+        NamedAssociationInstance<T> namedAssociation = (NamedAssociationInstance<T>) namedAssociations.get( accessor );
+
+        if( namedAssociation == null )
+        {
+            throw new IllegalArgumentException( "No such named-association:" + accessor );
+        }
+
+        return namedAssociation;
+    }
+
+    @Override
+    public Iterable<? extends NamedAssociationInstance<?>> allNamedAssociations()
+    {
+        return namedAssociations.values();
+    }
+
+    @Override
+    public boolean equals( Object obj )
+    {
+        if( !( obj instanceof ValueStateInstance ) )
+        {
+            return false;
+        }
+        ValueStateInstance state = (ValueStateInstance) obj;
+        if( !properties.equals( state.properties ) )
+        {
+            return false;
+        }
+        if( !associations.equals( state.associations ) )
+        {
+            return false;
+        }
+        if( !manyAssociations.equals( state.manyAssociations ) )
+        {
+            return false;
+        }
+        return namedAssociations.equals( state.namedAssociations );
+    }
+
+    @Override
+    public int hashCode()
+    {
+        int result = properties.hashCode();
+        result = 31 * result + associations.hashCode();
+        result = 31 * result + manyAssociations.hashCode();
+        result = 31 * result + namedAssociations.hashCode();
+        return result;
+    }
+}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
new file mode 100644
index 0000000..e34398f
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValueStateModel.java
@@ -0,0 +1,132 @@
+/*
+ * Copyright (c) 2008-2011, Rickard Öberg.
+ * Copyright (c) 2012, Kent Sølvsten.
+ * Copyright (c) 2014-2015, Paul Merlin.
+ *
+ * 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.value;
+
+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 ValueComposite state.
+ */
+public final class ValueStateModel
+    extends StateModel
+    implements AssociationStateDescriptor
+{
+    private final AssociationsModel associationsModel;
+    private final ManyAssociationsModel manyAssociationsModel;
+    private final NamedAssociationsModel namedAssociationsModel;
+
+    public ValueStateModel( PropertiesModel propertiesModel,
+                            AssociationsModel associationsModel,
+                            ManyAssociationsModel manyAssociationsModel,
+                            NamedAssociationsModel namedAssociationsModel
+    )
+    {
+        super( propertiesModel );
+        this.associationsModel = associationsModel;
+        this.manyAssociationsModel = manyAssociationsModel;
+        this.namedAssociationsModel = namedAssociationsModel;
+    }
+
+    @Override
+    public AssociationDescriptor getAssociationByName( String name )
+    {
+        return associationsModel.getAssociationByName( name );
+    }
+
+    @Override
+    public AssociationDescriptor getAssociationByQualifiedName( QualifiedName name )
+    {
+        return associationsModel.getAssociationByQualifiedName( name );
+    }
+
+    @Override
+    public AssociationDescriptor getManyAssociationByName( String name )
+    {
+        return manyAssociationsModel.getManyAssociationByName( name );
+    }
+
+    @Override
+    public AssociationDescriptor getManyAssociationByQualifiedName( QualifiedName name )
+    {
+        return manyAssociationsModel.getManyAssociationByQualifiedName( name );
+    }
+
+    @Override
+    public AssociationDescriptor getNamedAssociationByName( String name )
+    {
+        return namedAssociationsModel.getNamedAssociationByName( name );
+    }
+
+    @Override
+    public AssociationDescriptor getNamedAssociationByQualifiedName( QualifiedName name )
+    {
+        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/8744a67f/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
new file mode 100644
index 0000000..08f91e1
--- /dev/null
+++ b/core/runtime/src/main/java/org/apache/zest/runtime/value/ValuesModel.java
@@ -0,0 +1,55 @@
+/*
+ * 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.value;
+
+import java.util.List;
+import org.apache.zest.functional.HierarchicalVisitor;
+import org.apache.zest.functional.VisitableHierarchy;
+
+/**
+ * JAVADOC
+ */
+public final class ValuesModel
+    implements VisitableHierarchy<Object, Object>
+{
+    private final List<ValueModel> valueModels;
+
+    public ValuesModel( List<ValueModel> valueModels )
+    {
+        this.valueModels = valueModels;
+    }
+
+    public Iterable<ValueModel> models()
+    {
+        return valueModels;
+    }
+
+    @Override
+    public <ThrowableType extends Throwable> boolean accept( HierarchicalVisitor<? super Object, ? super Object, ThrowableType> visitor )
+        throws ThrowableType
+    {
+        if( visitor.visitEnter( this ) )
+        {
+            for( ValueModel valueModel : valueModels )
+            {
+                if( !valueModel.accept( visitor ) )
+                {
+                    break;
+                }
+            }
+        }
+        return visitor.visitLeave( this );
+    }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java b/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
deleted file mode 100644
index 232ad6f..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/Qi4jRuntimeImpl.java
+++ /dev/null
@@ -1,358 +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.qi4j.runtime;
-
-import java.lang.reflect.InvocationHandler;
-import java.util.Arrays;
-import java.util.Map;
-import org.qi4j.api.Qi4j;
-import org.qi4j.api.association.AbstractAssociation;
-import org.qi4j.api.association.Association;
-import org.qi4j.api.association.AssociationDescriptor;
-import org.qi4j.api.association.AssociationStateHolder;
-import org.qi4j.api.association.AssociationWrapper;
-import org.qi4j.api.association.ManyAssociation;
-import org.qi4j.api.association.ManyAssociationWrapper;
-import org.qi4j.api.association.NamedAssociation;
-import org.qi4j.api.association.NamedAssociationWrapper;
-import org.qi4j.api.composite.Composite;
-import org.qi4j.api.composite.CompositeDescriptor;
-import org.qi4j.api.composite.CompositeInstance;
-import org.qi4j.api.composite.ModelDescriptor;
-import org.qi4j.api.composite.TransientComposite;
-import org.qi4j.api.composite.TransientDescriptor;
-import org.qi4j.api.entity.EntityComposite;
-import org.qi4j.api.entity.EntityDescriptor;
-import org.qi4j.api.entity.EntityReference;
-import org.qi4j.api.property.Property;
-import org.qi4j.api.property.PropertyDescriptor;
-import org.qi4j.api.property.PropertyWrapper;
-import org.qi4j.api.property.StateHolder;
-import org.qi4j.api.service.ServiceComposite;
-import org.qi4j.api.service.ServiceDescriptor;
-import org.qi4j.api.service.ServiceReference;
-import org.qi4j.api.structure.Module;
-import org.qi4j.api.unitofwork.UnitOfWork;
-import org.qi4j.api.value.ValueComposite;
-import org.qi4j.api.value.ValueDescriptor;
-import org.qi4j.bootstrap.ApplicationAssemblyFactory;
-import org.qi4j.bootstrap.ApplicationModelFactory;
-import org.qi4j.bootstrap.Qi4jRuntime;
-import org.qi4j.runtime.association.AbstractAssociationInstance;
-import org.qi4j.runtime.association.AssociationInstance;
-import org.qi4j.runtime.association.ManyAssociationInstance;
-import org.qi4j.runtime.association.NamedAssociationInstance;
-import org.qi4j.runtime.bootstrap.ApplicationAssemblyFactoryImpl;
-import org.qi4j.runtime.bootstrap.ApplicationModelFactoryImpl;
-import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
-import org.qi4j.runtime.composite.TransientInstance;
-import org.qi4j.runtime.entity.EntityInstance;
-import org.qi4j.runtime.property.PropertyInstance;
-import org.qi4j.runtime.service.ImportedServiceReferenceInstance;
-import org.qi4j.runtime.service.ServiceInstance;
-import org.qi4j.runtime.service.ServiceReferenceInstance;
-import org.qi4j.runtime.structure.ModuleUnitOfWork;
-import org.qi4j.runtime.value.ValueInstance;
-import org.qi4j.spi.Qi4jSPI;
-import org.qi4j.spi.entity.EntityState;
-
-import static java.lang.reflect.Proxy.getInvocationHandler;
-import static org.qi4j.runtime.composite.TransientInstance.compositeInstanceOf;
-
-/**
- * Incarnation of Zest.
- */
-public final class Qi4jRuntimeImpl
-    implements Qi4jSPI, Qi4jRuntime
-{
-    private final ApplicationAssemblyFactory applicationAssemblyFactory;
-    private final ApplicationModelFactory applicationModelFactory;
-
-    public Qi4jRuntimeImpl()
-    {
-        applicationAssemblyFactory = new ApplicationAssemblyFactoryImpl();
-        applicationModelFactory = new ApplicationModelFactoryImpl();
-    }
-
-    @Override
-    public ApplicationAssemblyFactory applicationAssemblyFactory()
-    {
-        return applicationAssemblyFactory;
-    }
-
-    @Override
-    public ApplicationModelFactory applicationModelFactory()
-    {
-        return applicationModelFactory;
-    }
-
-    @Override
-    public Qi4j api()
-    {
-        return this;
-    }
-
-    @Override
-    public Qi4jSPI spi()
-    {
-        return this;
-    }
-
-    // API
-
-    @Override
-    @SuppressWarnings( "unchecked" )
-    public <T> T dereference( T composite )
-    {
-        InvocationHandler handler = getInvocationHandler( composite );
-        if( handler instanceof ProxyReferenceInvocationHandler )
-        {
-            return (T) ( (ProxyReferenceInvocationHandler) handler ).proxy();
-        }
-        if( handler instanceof CompositeInstance )
-        {
-            return composite;
-        }
-        return null;
-    }
-
-    @Override
-    public Module moduleOf( Object compositeOrServiceReferenceOrUow )
-    {
-        if( compositeOrServiceReferenceOrUow instanceof TransientComposite )
-        {
-            TransientComposite composite = (TransientComposite) compositeOrServiceReferenceOrUow;
-            return TransientInstance.compositeInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof EntityComposite )
-        {
-            EntityComposite composite = (EntityComposite) compositeOrServiceReferenceOrUow;
-            return EntityInstance.entityInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ValueComposite )
-        {
-            ValueComposite composite = (ValueComposite) compositeOrServiceReferenceOrUow;
-            return ValueInstance.valueInstanceOf( composite ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) compositeOrServiceReferenceOrUow;
-            InvocationHandler handler = getInvocationHandler( composite );
-            if( handler instanceof ServiceInstance )
-            {
-                return ( (ServiceInstance) handler ).module();
-            }
-            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof UnitOfWork )
-        {
-            ModuleUnitOfWork unitOfWork = (ModuleUnitOfWork) compositeOrServiceReferenceOrUow;
-            return unitOfWork.module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
-            return reference.module();
-        }
-        else if( compositeOrServiceReferenceOrUow instanceof ImportedServiceReferenceInstance )
-        {
-            ImportedServiceReferenceInstance<?> importedServiceReference
-                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReferenceOrUow;
-            return importedServiceReference.module();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be one of "
-                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
-                                                             ServiceComposite.class, ServiceReference.class,
-                                                             UnitOfWork.class ) );
-    }
-
-    @Override
-    public ModelDescriptor modelDescriptorFor( Object compositeOrServiceReference )
-    {
-        if( compositeOrServiceReference instanceof TransientComposite )
-        {
-            TransientComposite composite = (TransientComposite) compositeOrServiceReference;
-            return TransientInstance.compositeInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof EntityComposite )
-        {
-            EntityComposite composite = (EntityComposite) compositeOrServiceReference;
-            return EntityInstance.entityInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ValueComposite )
-        {
-            ValueComposite composite = (ValueComposite) compositeOrServiceReference;
-            return ValueInstance.valueInstanceOf( composite ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) compositeOrServiceReference;
-            InvocationHandler handler = getInvocationHandler( composite );
-            if( handler instanceof ServiceInstance )
-            {
-                return ( (ServiceInstance) handler ).descriptor();
-            }
-            return ( (ServiceReferenceInstance.ServiceInvocationHandler) handler ).descriptor();
-        }
-        else if( compositeOrServiceReference instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> reference = (ServiceReferenceInstance<?>) compositeOrServiceReference;
-            return reference.serviceDescriptor();
-        }
-        else if( compositeOrServiceReference instanceof ImportedServiceReferenceInstance )
-        {
-            ImportedServiceReferenceInstance<?> importedServiceReference
-                = (ImportedServiceReferenceInstance<?>) compositeOrServiceReference;
-            return importedServiceReference.serviceDescriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be one of "
-                                            + Arrays.asList( TransientComposite.class, ValueComposite.class,
-                                                             ServiceComposite.class, ServiceReference.class ) );
-    }
-
-    @Override
-    public CompositeDescriptor compositeDescriptorFor( Object compositeOrServiceReference )
-    {
-        return (CompositeDescriptor) modelDescriptorFor( compositeOrServiceReference );
-    }
-
-    // Descriptors
-
-    @Override
-    public TransientDescriptor transientDescriptorFor( Object transsient )
-    {
-        if( transsient instanceof TransientComposite )
-        {
-            TransientInstance transientInstance = compositeInstanceOf( (Composite) transsient );
-            return (TransientDescriptor) transientInstance.descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + TransientComposite.class );
-    }
-
-    @Override
-    public StateHolder stateOf( TransientComposite composite )
-    {
-        return TransientInstance.compositeInstanceOf( composite ).state();
-    }
-
-    @Override
-    public EntityDescriptor entityDescriptorFor( Object entity )
-    {
-        if( entity instanceof EntityComposite )
-        {
-            EntityInstance entityInstance = (EntityInstance) getInvocationHandler( entity );
-            return entityInstance.entityModel();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + EntityComposite.class );
-    }
-
-    @Override
-    public AssociationStateHolder stateOf( EntityComposite composite )
-    {
-        return EntityInstance.entityInstanceOf( composite ).state();
-    }
-
-    @Override
-    public ValueDescriptor valueDescriptorFor( Object value )
-    {
-        if( value instanceof ValueComposite )
-        {
-            ValueInstance valueInstance = ValueInstance.valueInstanceOf( (ValueComposite) value );
-            return valueInstance.descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of " + ValueComposite.class );
-    }
-
-    @Override
-    public AssociationStateHolder stateOf( ValueComposite composite )
-    {
-        return ValueInstance.valueInstanceOf( composite ).state();
-    }
-
-    @Override
-    public ServiceDescriptor serviceDescriptorFor( Object service )
-    {
-        if( service instanceof ServiceReferenceInstance )
-        {
-            ServiceReferenceInstance<?> ref = (ServiceReferenceInstance<?>) service;
-            return ref.serviceDescriptor();
-        }
-        if( service instanceof ServiceComposite )
-        {
-            ServiceComposite composite = (ServiceComposite) service;
-            return (ServiceDescriptor) ServiceInstance.serviceInstanceOf( composite ).descriptor();
-        }
-        throw new IllegalArgumentException( "Wrong type. Must be subtype of "
-                                            + ServiceComposite.class + " or " + ServiceReference.class );
-    }
-
-    @Override
-    public PropertyDescriptor propertyDescriptorFor( Property<?> property )
-    {
-        while( property instanceof PropertyWrapper )
-        {
-            property = ( (PropertyWrapper) property ).next();
-        }
-
-        return (PropertyDescriptor) ( (PropertyInstance<?>) property ).propertyInfo();
-    }
-
-    @Override
-    public AssociationDescriptor associationDescriptorFor( AbstractAssociation association )
-    {
-        while( association instanceof AssociationWrapper )
-        {
-            association = ( (AssociationWrapper) association ).next();
-        }
-
-        while( association instanceof ManyAssociationWrapper )
-        {
-            association = ( (ManyAssociationWrapper) association ).next();
-        }
-
-        while( association instanceof NamedAssociationWrapper )
-        {
-            association = ( (NamedAssociationWrapper) association ).next();
-        }
-
-        return (AssociationDescriptor) ( (AbstractAssociationInstance) association ).associationInfo();
-    }
-
-    // SPI
-    @Override
-    public EntityState entityStateOf( EntityComposite composite )
-    {
-        return EntityInstance.entityInstanceOf( composite ).entityState();
-    }
-
-    @Override
-    public EntityReference entityReferenceOf( Association assoc )
-    {
-        @SuppressWarnings( "unchecked" )
-        Property<EntityReference> associationState = ( (AssociationInstance) assoc ).getAssociationState();
-        return associationState.get();
-    }
-
-    @Override
-    public Iterable<EntityReference> entityReferenceOf( ManyAssociation assoc )
-    {
-        return ( (ManyAssociationInstance) assoc ).getManyAssociationState();
-    }
-
-    @Override
-    public Iterable<Map.Entry<String, EntityReference>> entityReferenceOf( NamedAssociation assoc )
-    {
-        return ( (NamedAssociationInstance) assoc ).getEntityReferences();
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationDelegate.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationDelegate.java b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationDelegate.java
deleted file mode 100644
index 86b1d2c..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationDelegate.java
+++ /dev/null
@@ -1,394 +0,0 @@
-/*
- * Copyright (c) 2008, Rickard Öberg. All Rights Reserved.
- * Copyright (c) 2012, Paul Merlin.
- *
- * 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.qi4j.runtime.activation;
-
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.LinkedList;
-import java.util.Set;
-import org.qi4j.api.activation.Activation;
-import org.qi4j.api.activation.ActivationEvent;
-import org.qi4j.api.activation.ActivationEventListener;
-import org.qi4j.api.activation.ActivationException;
-import org.qi4j.api.activation.PassivationException;
-import org.qi4j.api.service.ServiceReference;
-
-import static org.qi4j.api.activation.ActivationEvent.EventType.ACTIVATED;
-import static org.qi4j.api.activation.ActivationEvent.EventType.ACTIVATING;
-import static org.qi4j.api.activation.ActivationEvent.EventType.PASSIVATED;
-import static org.qi4j.api.activation.ActivationEvent.EventType.PASSIVATING;
-
-/**
- * This class manage Activation of a target and propagates to children.
- */
-@SuppressWarnings( "raw" )
-public final class ActivationDelegate
-    extends ActivationEventListenerSupport
-{
-    private final Object target;
-    private final boolean fireEvents;
-    private ActivatorsInstance targetActivators = null;
-    private final LinkedList<Activation> activeChildren = new LinkedList<>();
-
-    /**
-     * Create a new ActivationDelegate that will fire events.
-     * @param target target of Activation
-     */
-    public ActivationDelegate( Object target )
-    {
-        this( target, true );
-    }
-
-    /**
-     * Create a new ActivationDelegate.
-     * @param target target of Activation
-     * @param fireEvents if {@link ActivationEvent}s should be fired
-     */
-    public ActivationDelegate( Object target, boolean fireEvents )
-    {
-        super();
-        this.target = target;
-        this.fireEvents = fireEvents;
-    }
-
-    public void activate( ActivatorsInstance targetActivators, Activation child )
-        throws Exception
-    {
-        activate( targetActivators, Collections.singleton( child ), null );
-    }
-
-    public void activate( ActivatorsInstance targetActivators, Activation child, Runnable callback )
-        throws Exception
-    {
-        activate( targetActivators, Collections.singleton( child ), callback );
-    }
-
-    public void activate( ActivatorsInstance targetActivators, Iterable<? extends Activation> children )
-        throws ActivationException
-    {
-        activate( targetActivators, children, null );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    public void activate( ActivatorsInstance targetActivators, Iterable<? extends Activation> children, Runnable callback )
-        throws ActivationException
-    {
-        if( this.targetActivators != null )
-        {
-            throw new IllegalStateException( "Activation.activate() called multiple times "
-                                             + "or without calling passivate() first!" );
-        }
-
-        try
-        {
-            // Before Activation Events
-            if( fireEvents )
-            {
-                fireEvent( new ActivationEvent( target, ACTIVATING ) );
-            }
-
-            // Before Activation for Activators
-            targetActivators.beforeActivation( target instanceof ServiceReference
-                                               ? new PassiveServiceReference( (ServiceReference) target )
-                                               : target );
-
-            // Activation
-            for( Activation child : children )
-            {
-                if( !activeChildren.contains( child ) )
-                {
-                    child.activate();
-                }
-                activeChildren.addFirst( child );
-            }
-
-            // Internal Activation Callback
-            if( callback != null )
-            {
-                callback.run();
-            }
-
-            // After Activation
-            targetActivators.afterActivation( target );
-
-            // After Activation Events
-            if( fireEvents )
-            {
-                fireEvent( new ActivationEvent( target, ACTIVATED ) );
-            }
-
-            // Activated
-            this.targetActivators = targetActivators;
-        }
-        catch( Exception e )
-        {
-            // Passivate actives
-            try
-            {
-                passivate();
-            }
-            catch( PassivationException e1 )
-            {
-                ActivationException activationEx = new ActivationException( "Unable to Activate application.", e );
-                activationEx.addSuppressed( e1 );
-                throw activationEx;
-            }
-            if( e instanceof ActivationException )
-            {
-                throw ( (ActivationException) e );
-            }
-            throw new ActivationException( "Unable to Activate application.", e );
-        }
-    }
-
-    public void passivate()
-        throws PassivationException
-    {
-        passivate( (Runnable) null );
-    }
-
-    @SuppressWarnings( "unchecked" )
-    public void passivate( Runnable callback )
-        throws PassivationException
-    {
-        Set<Exception> exceptions = new LinkedHashSet<>();
-
-        // Before Passivation Events
-        if( fireEvents )
-        {
-            ActivationEvent event = new ActivationEvent( target, PASSIVATING );
-            for( ActivationEventListener listener : listeners )
-            {
-                try
-                {
-                    listener.onEvent( event );
-                }
-                catch( Exception ex )
-                {
-                    if( ex instanceof PassivationException )
-                    {
-                        exceptions.addAll( ( (PassivationException) ex ).causes() );
-                    }
-                    else
-                    {
-                        exceptions.add( ex );
-                    }
-                }
-            }
-        }
-
-        // Before Passivation for Activators
-        if( targetActivators != null )
-        {
-            try
-            {
-                targetActivators.beforePassivation( target );
-            }
-            catch( PassivationException ex )
-            {
-                exceptions.addAll( ex.causes() );
-            }
-            catch( Exception ex )
-            {
-                exceptions.add( ex );
-            }
-        }
-
-        // Passivation
-        while( !activeChildren.isEmpty() )
-        {
-            passivateOneChild( exceptions );
-        }
-
-        // Internal Passivation Callback
-        if( callback != null )
-        {
-            try
-            {
-                callback.run();
-            }
-            catch( Exception ex )
-            {
-                if( ex instanceof PassivationException )
-                {
-                    exceptions.addAll( ( (PassivationException) ex ).causes() );
-                }
-                else
-                {
-                    exceptions.add( ex );
-                }
-            }
-        }
-
-        // After Passivation for Activators
-        if( targetActivators != null )
-        {
-            try
-            {
-                targetActivators.afterPassivation( target instanceof ServiceReference
-                                                   ? new PassiveServiceReference( (ServiceReference) target )
-                                                   : target );
-            }
-            catch( PassivationException ex )
-            {
-                exceptions.addAll( ex.causes() );
-            }
-            catch( Exception ex )
-            {
-                exceptions.add( ex );
-            }
-        }
-        targetActivators = null;
-
-        // After Passivation Events
-        if( fireEvents )
-        {
-            ActivationEvent event = new ActivationEvent( target, PASSIVATED );
-            for( ActivationEventListener listener : listeners )
-            {
-                try
-                {
-                    listener.onEvent( event );
-                }
-                catch( Exception ex )
-                {
-                    if( ex instanceof PassivationException )
-                    {
-                        exceptions.addAll( ( (PassivationException) ex ).causes() );
-                    }
-                    else
-                    {
-                        exceptions.add( ex );
-                    }
-                }
-            }
-        }
-
-        // Error handling
-        if( exceptions.isEmpty() )
-        {
-            return;
-        }
-        throw new PassivationException( exceptions );
-    }
-
-    @SuppressWarnings( "TooBroadCatch" )
-    private void passivateOneChild( Set<Exception> exceptions )
-    {
-        Activation activeChild = activeChildren.removeFirst();
-        try
-        {
-            activeChild.passivate();
-        }
-        catch( PassivationException ex )
-        {
-            exceptions.addAll( ex.causes() );
-        }
-        catch( Exception ex )
-        {
-            exceptions.add( ex );
-        }
-    }
-
-    @SuppressWarnings( "raw" )
-    private static class PassiveServiceReference
-        implements ServiceReference
-    {
-
-        private final ServiceReference reference;
-
-        private PassiveServiceReference( ServiceReference reference )
-        {
-            this.reference = reference;
-        }
-
-        @Override
-        public String identity()
-        {
-            return reference.identity();
-        }
-
-        @Override
-        public Object get()
-        {
-            throw new IllegalStateException( "Service is passive, either activating and"
-                                             + " cannot be used yet or passivating and cannot be used anymore." );
-        }
-
-        @Override
-        public boolean isActive()
-        {
-            return false;
-        }
-
-        @Override
-        public boolean isAvailable()
-        {
-            return false;
-        }
-
-        @Override
-        public Iterable<Class<?>> types()
-        {
-            return reference.types();
-        }
-
-        @Override
-        public <T> T metaInfo( Class<T> infoType )
-        {
-            return reference.metaInfo( infoType );
-        }
-
-        @Override
-        public void registerActivationEventListener( ActivationEventListener listener )
-        {
-            reference.registerActivationEventListener( listener );
-        }
-
-        @Override
-        public void deregisterActivationEventListener( ActivationEventListener listener )
-        {
-            reference.deregisterActivationEventListener( listener );
-        }
-
-        @Override
-        public int hashCode()
-        {
-            return identity().hashCode();
-        }
-
-        @Override
-        public boolean equals( Object obj )
-        {
-            if( obj == null )
-            {
-                return false;
-            }
-            if( getClass() != obj.getClass() )
-            {
-                return false;
-            }
-            final ServiceReference other = (ServiceReference) obj;
-            return identity().equals( other.identity() );
-        }
-
-        @Override
-        public String toString()
-        {
-            return reference.toString();
-        }
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationEventListenerSupport.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationEventListenerSupport.java b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationEventListenerSupport.java
deleted file mode 100644
index 41c883d..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivationEventListenerSupport.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * Copyright (c) 2011, Rickard Öberg.
- * Copyright (c) 2012, 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.qi4j.runtime.activation;
-
-import java.util.ArrayList;
-import java.util.List;
-import org.qi4j.api.activation.ActivationEvent;
-import org.qi4j.api.activation.ActivationEventListener;
-import org.qi4j.api.activation.ActivationEventListenerRegistration;
-
-/**
- * Internal helper for managing registrations and firing events
- */
-/* package */ class ActivationEventListenerSupport
-    implements ActivationEventListenerRegistration, ActivationEventListener
-{
-    protected List<ActivationEventListener> listeners = new ArrayList<>();
-
-    @Override
-    public void registerActivationEventListener( ActivationEventListener listener )
-    {
-        List<ActivationEventListener> newListeners = new ArrayList<>();
-        newListeners.addAll( listeners );
-        newListeners.add( listener );
-        listeners = newListeners;
-    }
-
-    @Override
-    public void deregisterActivationEventListener( ActivationEventListener listener )
-    {
-        List<ActivationEventListener> newListeners = new ArrayList<>();
-        newListeners.addAll( listeners );
-        newListeners.remove( listener );
-        listeners = newListeners;
-    }
-
-    /* package */ void fireEvent( ActivationEvent event )
-        throws Exception
-    {
-        for( ActivationEventListener listener : listeners )
-        {
-            listener.onEvent( event );
-        }
-    }
-
-    @Override
-    public void onEvent( ActivationEvent event )
-        throws Exception
-    {
-        fireEvent( event );
-    }
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorModel.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorModel.java b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorModel.java
deleted file mode 100644
index 823aace..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorModel.java
+++ /dev/null
@@ -1,108 +0,0 @@
-/*
- * 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.qi4j.runtime.activation;
-
-import org.qi4j.api.activation.Activator;
-import org.qi4j.api.activation.ActivatorDescriptor;
-import org.qi4j.api.common.ConstructionException;
-import org.qi4j.functional.HierarchicalVisitor;
-import org.qi4j.functional.VisitableHierarchy;
-import org.qi4j.runtime.composite.ConstructorsModel;
-import org.qi4j.runtime.injection.InjectedFieldsModel;
-import org.qi4j.runtime.injection.InjectedMethodsModel;
-import org.qi4j.runtime.injection.InjectionContext;
-
-/**
- * Model for a single Activator.
- *
- * @param <ActivateeType> Type of the activation target
- */
-public class ActivatorModel<ActivateeType>
-    implements ActivatorDescriptor, VisitableHierarchy<Object, Object>
-{
-    private final Class<? extends Activator<ActivateeType>> activatorType;
-    private final ConstructorsModel constructorsModel;
-    private final InjectedFieldsModel injectedFieldsModel;
-    private final InjectedMethodsModel injectedMethodsModel;
-
-    public ActivatorModel( Class<? extends Activator<ActivateeType>> activatorType )
-    {
-        this.activatorType = activatorType;
-        this.constructorsModel = new ConstructorsModel( activatorType );
-        this.injectedFieldsModel = new InjectedFieldsModel( activatorType );
-        this.injectedMethodsModel = new InjectedMethodsModel( activatorType );
-    }
-
-    @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 Activator<ActivateeType> newInstance()
-    {
-        try
-        {
-            return activatorType.newInstance();
-        }
-        catch( InstantiationException | IllegalAccessException ex )
-        {
-            throw new ConstructionException( "Could not instantiate " + activatorType.getName(), ex );
-        }
-    }
-
-    @SuppressWarnings( "unchecked" )
-    public Activator<ActivateeType> newInstance( InjectionContext injectionContext )
-    {
-        try
-        {
-            Activator<ActivateeType> instance = (Activator<ActivateeType>) constructorsModel.newInstance( injectionContext );
-            injectionContext = new InjectionContext( injectionContext.module(), injectionContext.uses(), instance );
-            inject( injectionContext, instance );
-            return instance;
-        }
-        catch( Exception ex )
-        {
-            throw new ConstructionException( "Could not instantiate " + activatorType.getName(), ex );
-        }
-    }
-
-    public void inject( InjectionContext injectionContext, Activator<ActivateeType> instance )
-    {
-        injectedFieldsModel.inject( injectionContext, instance );
-        injectedMethodsModel.inject( injectionContext, instance );
-    }
-
-    @Override
-    public String toString()
-    {
-        return activatorType.getName();
-    }
-
-}

http://git-wip-us.apache.org/repos/asf/zest-java/blob/8744a67f/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
----------------------------------------------------------------------
diff --git a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java b/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
deleted file mode 100644
index 2059e1e..0000000
--- a/core/runtime/src/main/java/org/qi4j/runtime/activation/ActivatorsInstance.java
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * Copyright (c) 2012, Paul Merlin.
- *
- * 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.qi4j.runtime.activation;
-
-import java.util.Collections;
-import java.util.LinkedHashSet;
-import java.util.Set;
-import org.qi4j.api.activation.Activator;
-import org.qi4j.api.activation.PassivationException;
-import org.qi4j.functional.Iterables;
-
-/**
- * Instance of a Zest Activators of one Activation target. Contains ordered
- * Activators and roll the Activation on the target.
- *
- * @param <ActivateeType> Type of the activation target
- */
-public class ActivatorsInstance<ActivateeType>
-    implements Activator<ActivateeType>
-{
-    @SuppressWarnings( {"raw", "unchecked"} )
-    public static final ActivatorsInstance EMPTY = new ActivatorsInstance( Collections.emptyList() );
-
-    private final Iterable<Activator<ActivateeType>> activators;
-
-    public ActivatorsInstance( Iterable<Activator<ActivateeType>> activators )
-    {
-        this.activators = activators;
-    }
-
-    @Override
-    public void beforeActivation( ActivateeType activating )
-        throws Exception
-    {
-        for( Activator<ActivateeType> activator : activators )
-        {
-            activator.beforeActivation( activating );
-        }
-    }
-
-    @Override
-    public void afterActivation( ActivateeType activated )
-        throws Exception
-    {
-        for( Activator<ActivateeType> activator : activators )
-        {
-            activator.afterActivation( activated );
-        }
-    }
-
-    @Override
-    public void beforePassivation( ActivateeType passivating )
-        throws Exception
-    {
-        Set<Exception> exceptions = new LinkedHashSet<>();
-        for( Activator<ActivateeType> activator : Iterables.reverse( activators ) )
-        {
-            try
-            {
-                activator.beforePassivation( passivating );
-            }
-            catch( Exception ex )
-            {
-                exceptions.add( ex );
-            }
-        }
-        if( !exceptions.isEmpty() )
-        {
-            throw new PassivationException( exceptions );
-        }
-    }
-
-    @Override
-    public void afterPassivation( ActivateeType passivated )
-        throws Exception
-    {
-        Set<Exception> exceptions = new LinkedHashSet<>();
-        for( Activator<ActivateeType> activator : Iterables.reverse( activators ) )
-        {
-            try
-            {
-                activator.afterPassivation( passivated );
-            }
-            catch( Exception ex )
-            {
-                exceptions.add( ex );
-            }
-        }
-        if( !exceptions.isEmpty() )
-        {
-            throw new PassivationException( exceptions );
-        }
-    }
-
-}