package org.oddjob.framework;
import java.io.Serializable;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.Callable;
import org.apache.commons.beanutils.DynaBean;
import org.oddjob.Describeable;
import org.oddjob.Forceable;
import org.oddjob.Iconic;
import org.oddjob.Resetable;
import org.oddjob.Stateful;
import org.oddjob.Stoppable;
import org.oddjob.arooa.life.ArooaContextAware;
import org.oddjob.arooa.life.ArooaSessionAware;
import org.oddjob.logging.LogEnabled;
/**
* Shared class definitions for {@link Callable} and {@link Runnable}
* wrappers.
*
* @author rob
*
* @param <T> The {@link WrapperFactory} type.
*/
abstract public class BaseWrapperFactory<T> implements WrapperFactory<T> {
@Override
public Class<?>[] wrappingInterfacesFor(T wrapped) {
Set<Class<?>> interfaces = new HashSet<Class<?>>();
interfaces.add(Object.class);
interfaces.add(ArooaSessionAware.class);
interfaces.add(ArooaContextAware.class);
interfaces.add(Stateful.class);
interfaces.add(Resetable.class);
interfaces.add(Forceable.class);
interfaces.add(DynaBean.class);
interfaces.add(Stoppable.class);
interfaces.add(Iconic.class);
interfaces.add(Runnable.class);
interfaces.add(LogEnabled.class);
interfaces.add(Describeable.class);
if (!(wrapped instanceof Serializable)) {
interfaces.add(Transient.class);
}
return (Class[]) interfaces.toArray(new Class[0]);
}
}