org.picocontainer.lifecycle.CompositeLifecycleStrategy Maven / Gradle / Ivy
/*****************************************************************************
* Copyright (C) PicoContainer Organization. All rights reserved. *
* ------------------------------------------------------------------------- *
* The software in this package is published under the terms of the BSD *
* style license a copy of which has been included with this distribution in *
* the LICENSE.txt file. *
*****************************************************************************/
package org.picocontainer.lifecycle;
import org.picocontainer.ComponentAdapter;
import org.picocontainer.LifecycleStrategy;
/**
* Allow for use of alternate LifecycleStrategy strategies to be used
* at the same time. A component can be started/stopped/disposed according
* to *any* of the supplied LifecycleStrategy instances.
*
* @author Paul Hammant
*/
public class CompositeLifecycleStrategy implements LifecycleStrategy {
private final LifecycleStrategy[] alternateStrategies;
public CompositeLifecycleStrategy(LifecycleStrategy... alternateStrategies) {
this.alternateStrategies = alternateStrategies;
}
public void start(Object component) {
for (LifecycleStrategy lifecycleStrategy : alternateStrategies) {
lifecycleStrategy.start(component);
}
}
public void stop(Object component) {
for (LifecycleStrategy lifecycleStrategy : alternateStrategies) {
lifecycleStrategy.stop(component);
}
}
public void dispose(Object component) {
for (LifecycleStrategy lifecycleStrategy : alternateStrategies) {
lifecycleStrategy.dispose(component);
}
}
public boolean hasLifecycle(Class> type) {
for (LifecycleStrategy lifecycleStrategy : alternateStrategies) {
if (lifecycleStrategy.hasLifecycle(type)) {
return true;
}
}
return false;
}
public boolean isLazy(ComponentAdapter> adapter) {
for (LifecycleStrategy lifecycleStrategy : alternateStrategies) {
if (lifecycleStrategy.isLazy(adapter)) {
return true;
}
}
return false;
}
}