package org.infinispan.persistence.rest.configuration; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.APPEND_CACHE_NAME_TO_PATH; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.HOST; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.KEY2STRING_MAPPER; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.METADATA_HELPER; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.PATH; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.PORT; import static org.infinispan.persistence.rest.configuration.RestStoreConfiguration.RAW_VALUES; import org.infinispan.configuration.cache.AbstractStoreConfigurationBuilder; import org.infinispan.configuration.cache.PersistenceConfigurationBuilder; import org.infinispan.persistence.keymappers.MarshallingTwoWayKey2StringMapper; import org.infinispan.persistence.rest.logging.Log; import org.infinispan.persistence.rest.metadata.MetadataHelper; import org.infinispan.util.logging.LogFactory; /** * RestStoreConfigurationBuilder. Configures a {@link org.infinispan.persistence.rest.RestStore} * * @author Tristan Tarrant * @since 6.0 */ public class RestStoreConfigurationBuilder extends AbstractStoreConfigurationBuilder<RestStoreConfiguration, RestStoreConfigurationBuilder> implements RestStoreConfigurationChildBuilder<RestStoreConfigurationBuilder> { private static final Log log = LogFactory.getLog(RestStoreConfigurationBuilder.class, Log.class); private final ConnectionPoolConfigurationBuilder connectionPool; public RestStoreConfigurationBuilder(PersistenceConfigurationBuilder builder) { super(builder, RestStoreConfiguration.attributeDefinitionSet()); connectionPool = new ConnectionPoolConfigurationBuilder(this); } @Override public RestStoreConfigurationBuilder self() { return this; } @Override public ConnectionPoolConfigurationBuilder connectionPool() { return connectionPool; } @Override public RestStoreConfigurationBuilder host(String host) { attributes.attribute(HOST).set(host); return this; } @Override public RestStoreConfigurationBuilder key2StringMapper(String key2StringMapper) { attributes.attribute(KEY2STRING_MAPPER).set(key2StringMapper); return this; } @Override public RestStoreConfigurationBuilder key2StringMapper(Class<? extends MarshallingTwoWayKey2StringMapper> klass) { attributes.attribute(KEY2STRING_MAPPER).set(klass.getName()); return this; } @Override public RestStoreConfigurationBuilder metadataHelper(String metadataHelper) { attributes.attribute(METADATA_HELPER).set(metadataHelper); return this; } @Override public RestStoreConfigurationBuilder metadataHelper(Class<? extends MetadataHelper> metadataHelper) { metadataHelper(metadataHelper.getName()); return this; } @Override public RestStoreConfigurationBuilder path(String path) { attributes.attribute(PATH).set(path); return this; } @Override public RestStoreConfigurationBuilder port(int port) { attributes.attribute(PORT).set(port); return this; } @Override public RestStoreConfigurationBuilder appendCacheNameToPath(boolean appendCacheNameToPath) { attributes.attribute(APPEND_CACHE_NAME_TO_PATH).set(appendCacheNameToPath); return this; } @Override public RestStoreConfigurationBuilder rawValues(boolean rawValues) { attributes.attribute(RAW_VALUES).set(rawValues); return this; } @Override public RestStoreConfiguration create() { return new RestStoreConfiguration(attributes.protect(), async.create(), singletonStore.create(), connectionPool.create()); } @Override public RestStoreConfigurationBuilder read(RestStoreConfiguration template) { super.read(template); this.connectionPool.read(template.connectionPool()); return this; } @Override public void validate() { this.connectionPool.validate(); if (attributes.attribute(HOST).get() == null) { throw log.hostNotSpecified(); } String path = attributes.attribute(PATH).get(); if (!path.endsWith("/")) { path(path + "/"); } } }