blob: b3c4981628d6ebd6c890dcda8f2e4c788bfd4971 [file] [log] [blame]
/*
* 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.qi4j.runtime.injection;
import org.qi4j.api.composite.CompositeInstance;
import org.qi4j.api.property.StateHolder;
import org.qi4j.runtime.composite.ProxyReferenceInvocationHandler;
import org.qi4j.runtime.composite.UsesInstance;
import org.qi4j.runtime.structure.ModuleInstance;
import org.qi4j.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 +
'}';
}
}