package org.oddjob.beanbus.mega;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;
import org.apache.commons.beanutils.DynaBean;
import org.oddjob.Describeable;
import org.oddjob.Iconic;
import org.oddjob.arooa.life.ArooaLifeAware;
import org.oddjob.arooa.life.ArooaSessionAware;
import org.oddjob.framework.ComponentWrapper;
import org.oddjob.framework.ProxyGenerator;
import org.oddjob.framework.WrapperFactory;
import org.oddjob.logging.LogEnabled;
/**
* Generate a Proxy for a collection.
* <p>
*
* @author rob
*
*/
public class CollectionProxyGenerator<E> extends ProxyGenerator<Collection<E>> {
/**
* Generate the collection.
*
* @param collection
* @param classLoader
*
* @return The collection.
*/
public Object generate(Collection<E> collection, ClassLoader classLoader) {
return generate(collection, new WrapperFactory<Collection<E>>() {
@Override
public Class<?>[] wrappingInterfacesFor(Collection<E> wrapped) {
Set<Class<?>> interfaces = new HashSet<Class<?>>();
interfaces.add(Object.class);
interfaces.add(ArooaSessionAware.class);
interfaces.add(ArooaLifeAware.class);
interfaces.add(DynaBean.class);
interfaces.add(LogEnabled.class);
interfaces.add(Describeable.class);
interfaces.add(Iconic.class);
interfaces.add(BusPart.class);
interfaces.add(Collection.class);
return (Class[]) interfaces.toArray(
new Class[interfaces.size()]);
}
@Override
public ComponentWrapper wrapperFor(Collection<E> wrapped, Object proxy) {
CollectionWrapper<E> wrapper = new CollectionWrapper<E>(wrapped, proxy);
return wrapper;
}
}, classLoader);
}
}