package org.jboss.as.clustering.infinispan.cs.factory;
import org.infinispan.commons.configuration.BuiltBy;
import org.infinispan.commons.configuration.ConfiguredBy;
import org.infinispan.configuration.cache.CustomStoreConfiguration;
import org.infinispan.configuration.cache.CustomStoreConfigurationBuilder;
import org.infinispan.configuration.cache.StoreConfiguration;
import org.infinispan.configuration.cache.StoreConfigurationBuilder;
/**
* Metadata for deployed Cache Store
*
* @author Sebastian Laskawiec
* @since 7.2
*/
public class DeployedCacheStoreMetadata {
private String loaderWriterInstanceName;
private Object loaderWriterRawInstance;
private Class<? extends StoreConfiguration> storeConfigurationClass;
private Class<? extends StoreConfigurationBuilder> storeBuilderClass;
public DeployedCacheStoreMetadata(Object loaderWriterRawInstance) {
this.loaderWriterRawInstance = loaderWriterRawInstance;
this.loaderWriterInstanceName = loaderWriterRawInstance.getClass().getName();
}
public static DeployedCacheStoreMetadata fromDeployedStoreInstance(Object loaderWriterRawInstance) {
DeployedCacheStoreMetadata ret = new DeployedCacheStoreMetadata(loaderWriterRawInstance);
ret.initializeConfigurationData();
return ret;
}
private void initializeConfigurationData() {
ConfiguredBy configuredBy = loaderWriterRawInstance.getClass().getAnnotation(ConfiguredBy.class);
if (configuredBy != null) {
if (configuredBy.value() == null) {
throw new IllegalArgumentException("Cache Store's configuration class is incorrect");
}
this.storeConfigurationClass = (Class<? extends StoreConfiguration>) configuredBy.value();
BuiltBy builtBy = storeConfigurationClass.getAnnotation(BuiltBy.class);
if (builtBy != null) {
if (builtBy.value() == null) {
throw new IllegalArgumentException("Cache Store's configuration builder class is incorrect");
}
this.storeBuilderClass = builtBy.value().asSubclass(StoreConfigurationBuilder.class);
} else {
this.storeBuilderClass = CustomStoreConfigurationBuilder.class;
}
} else {
this.storeConfigurationClass = CustomStoreConfiguration.class;
this.storeBuilderClass = CustomStoreConfigurationBuilder.class;
}
}
public String getDeployedCacheClassName() {
return loaderWriterInstanceName;
}
public Object getLoaderWriterRawInstance() {
return loaderWriterRawInstance;
}
public Class<? extends StoreConfiguration> getStoreConfigurationClass() {
return storeConfigurationClass;
}
public Class<? extends StoreConfigurationBuilder> getStoreBuilderClass() {
return storeBuilderClass;
}
@Override
public String toString() {
return "DeployedCacheStoreMetadata{" +
"loaderWriterInstanceName='" + loaderWriterInstanceName + '\'' +
", loaderWriterRawInstance=" + loaderWriterRawInstance +
", storeConfigurationClass=" + storeConfigurationClass +
", storeBuilderClass=" + storeBuilderClass +
'}';
}
}