package org.codehaus.plexus.component.manager;
import org.codehaus.plexus.lifecycle.LifecycleHandler;
import org.codehaus.plexus.component.repository.exception.ComponentLifecycleException;
import org.codehaus.plexus.component.repository.ComponentDescriptor;
import org.codehaus.plexus.MutablePlexusContainer;
import org.codehaus.plexus.personality.plexus.lifecycle.phase.PhaseExecutionException;
import org.codehaus.plexus.classworlds.realm.ClassRealm;
public class StaticComponentManager<T> implements ComponentManager<T>
{
private final MutablePlexusContainer container;
private T instance;
private final ComponentDescriptor<T> descriptor;
private long startId;
private boolean disposed;
public StaticComponentManager( MutablePlexusContainer container, T instance, Class<?> role, String roleHint, ClassRealm realm)
{
this.container = container;
this.instance = instance;
descriptor = new ComponentDescriptor<T>();
descriptor.setRole( role.getName() );
descriptor.setRoleHint( roleHint );
descriptor.setRealm( realm );
descriptor.setImplementationClass( (Class<? extends T>) instance.getClass() );
}
public LifecycleHandler getLifecycleHandler()
{
return null;
}
public synchronized T getComponent() throws ComponentLifecycleException
{
if (disposed)
{
throw new ComponentLifecycleException("This ComponentManager has already been destroyed");
}
return instance;
}
public synchronized void dispose() throws ComponentLifecycleException
{
disposed = true;
instance = null;
}
public synchronized void release( Object component ) throws ComponentLifecycleException
{
instance = null;
}
public ComponentDescriptor<T> getComponentDescriptor()
{
return descriptor;
}
public MutablePlexusContainer getContainer()
{
return container;
}
public void start( Object component ) throws PhaseExecutionException
{
startId = NEXT_START_ID.getAndIncrement();
}
public long getStartId()
{
return startId;
}
public synchronized String toString()
{
return "StaticComponentManager[" + instance == null ? getComponentDescriptor().getImplementationClass().getName() : instance + "]";
}
}