package org.infinispan.server.test.util;
import java.util.ArrayList;
import java.util.Collection;
import org.infinispan.arquillian.core.RemoteInfinispanServer;
import org.infinispan.client.hotrod.ProtocolVersion;
import org.infinispan.client.hotrod.RemoteCache;
import org.infinispan.client.hotrod.RemoteCacheManager;
import org.infinispan.client.hotrod.configuration.ConfigurationBuilder;
import org.infinispan.client.hotrod.impl.ConfigurationProperties;
/**
* Keeps collection of {@link RemoteCacheManager} objects, to be able to stop all of them when needed.
*
* @author Michal Linhard (mlinhard@redhat.com)
*/
public class RemoteCacheManagerFactory {
private Collection<RemoteCacheManager> managers;
public RemoteCacheManagerFactory() {
this.managers = new ArrayList<RemoteCacheManager>();
}
public RemoteCache<Object, Object> createCache(ConfigurationBuilder configBuilder, String cacheName) {
return createManager(configBuilder).getCache(cacheName);
}
public RemoteCache<Object, Object> createCache(RemoteInfinispanMBeans beans) {
return createCache(beans, ProtocolVersion.DEFAULT_PROTOCOL_VERSION.toString());
}
public RemoteCache<Object, Object> createCache(RemoteInfinispanMBeans beans, String protocolVersion) {
return createManager(beans.server, protocolVersion).getCache(beans.cacheName);
}
public RemoteCacheManager createManager(ConfigurationBuilder configBuilder) {
return addToCollection(new RemoteCacheManager(configBuilder.build()));
}
public RemoteCacheManager createManager(RemoteInfinispanMBeans beans) {
return createManager(beans.server);
}
public RemoteCacheManager createManager(RemoteInfinispanServer server) {
return createManager(server, ProtocolVersion.DEFAULT_PROTOCOL_VERSION.toString());
}
private RemoteCacheManager createManager(RemoteInfinispanServer server, String protocolVersion) {
return addToCollection(ITestUtils.createCacheManager(server, protocolVersion));
}
private RemoteCacheManager addToCollection(RemoteCacheManager rcm) {
managers.add(rcm);
return rcm;
}
/**
* Stop all managers created by this factory.
*/
public void stopManagers() {
for (RemoteCacheManager rcm : managers) {
rcm.stop();
}
}
}