package org.infinispan.factories;
import org.infinispan.commands.CancellationService;
import org.infinispan.commands.CancellationServiceImpl;
import org.infinispan.commands.RemoteCommandsFactory;
import org.infinispan.commons.CacheConfigurationException;
import org.infinispan.container.offheap.OffHeapEntryFactory;
import org.infinispan.container.offheap.OffHeapEntryFactoryImpl;
import org.infinispan.container.offheap.OffHeapMemoryAllocator;
import org.infinispan.container.offheap.UnpooledOffHeapMemoryAllocator;
import org.infinispan.factories.annotations.DefaultFactoryFor;
import org.infinispan.factories.scopes.Scope;
import org.infinispan.factories.scopes.Scopes;
import org.infinispan.remoting.inboundhandler.GlobalInboundInvocationHandler;
import org.infinispan.remoting.inboundhandler.InboundInvocationHandler;
import org.infinispan.topology.PersistentUUIDManager;
import org.infinispan.topology.PersistentUUIDManagerImpl;
import org.infinispan.util.DefaultTimeService;
import org.infinispan.util.TimeService;
import org.infinispan.util.logging.events.EventLogManager;
import org.infinispan.util.logging.events.impl.EventLogManagerImpl;
import org.infinispan.xsite.BackupReceiverRepository;
import org.infinispan.xsite.BackupReceiverRepositoryImpl;
/**
* Factory for building global-scope components which have default empty constructors
*
* @author Manik Surtani
* @author <a href="mailto:galder.zamarreno@jboss.com">Galder Zamarreno</a>
* @since 4.0
*/
@DefaultFactoryFor(classes = {BackupReceiverRepository.class, CancellationService.class, EventLogManager.class,
InboundInvocationHandler.class, PersistentUUIDManager.class,
RemoteCommandsFactory.class, TimeService.class, OffHeapEntryFactory.class,
OffHeapMemoryAllocator.class})
@Scope(Scopes.GLOBAL)
public class EmptyConstructorFactory extends AbstractComponentFactory implements AutoInstantiableFactory {
@Override
@SuppressWarnings("unchecked")
public <T> T construct(Class<T> componentType) {
if (componentType.equals(BackupReceiverRepository.class))
return (T) new BackupReceiverRepositoryImpl();
else if (componentType.equals(CancellationService.class))
return (T) new CancellationServiceImpl();
else if (componentType.equals(InboundInvocationHandler.class))
return (T) new GlobalInboundInvocationHandler();
else if (componentType.equals(RemoteCommandsFactory.class))
return (T) new RemoteCommandsFactory();
else if (componentType.equals(TimeService.class))
return (T) new DefaultTimeService();
else if (componentType.equals(EventLogManager.class))
return (T) new EventLogManagerImpl();
else if (componentType.equals(PersistentUUIDManager.class))
return (T) new PersistentUUIDManagerImpl();
else if (componentType.equals(OffHeapEntryFactory.class))
return componentType.cast(new OffHeapEntryFactoryImpl());
else if (componentType.equals(OffHeapMemoryAllocator.class))
return componentType.cast(new UnpooledOffHeapMemoryAllocator());
throw new CacheConfigurationException("Don't know how to create a " + componentType.getName());
}
}