package org.infinispan.persistence.jdbc.configuration; import static org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfiguration.KEY2STRING_MAPPER; import static org.infinispan.persistence.jdbc.configuration.JdbcStringBasedStoreConfiguration.PROPERTIES; import java.util.Map; import java.util.Properties; import org.infinispan.commons.configuration.Builder; import org.infinispan.commons.util.TypedProperties; import org.infinispan.configuration.cache.PersistenceConfigurationBuilder; import org.infinispan.configuration.parsing.XmlConfigHelper; import org.infinispan.persistence.keymappers.DefaultTwoWayKey2StringMapper; import org.infinispan.persistence.keymappers.Key2StringMapper; /** * * JdbcStringBasedStoreConfigurationBuilder. * * @author Tristan Tarrant * @since 5.2 */ public class JdbcStringBasedStoreConfigurationBuilder extends AbstractJdbcStoreConfigurationBuilder<JdbcStringBasedStoreConfiguration, JdbcStringBasedStoreConfigurationBuilder> { private StringTableManipulationConfigurationBuilder table; public JdbcStringBasedStoreConfigurationBuilder(PersistenceConfigurationBuilder builder) { super(builder, JdbcStringBasedStoreConfiguration.attributeDefinitionSet()); table = new StringTableManipulationConfigurationBuilder(this); } @Override public JdbcStringBasedStoreConfigurationBuilder self() { return this; } /** * The class name of a {@link Key2StringMapper} to use for mapping keys to strings suitable for * storage in a database table. Defaults to {@link DefaultTwoWayKey2StringMapper} */ public JdbcStringBasedStoreConfigurationBuilder key2StringMapper(String key2StringMapper) { attributes.attribute(KEY2STRING_MAPPER).set(key2StringMapper); return this; } /** * The class of a {@link Key2StringMapper} to use for mapping keys to strings suitable for * storage in a database table. Defaults to {@link DefaultTwoWayKey2StringMapper} */ public JdbcStringBasedStoreConfigurationBuilder key2StringMapper(Class<? extends Key2StringMapper> klass) { key2StringMapper(klass.getName()); return this; } /** * Allows configuration of table-specific parameters such as column names and types */ public StringTableManipulationConfigurationBuilder table() { return table; } @Override public JdbcStringBasedStoreConfigurationBuilder withProperties(Properties props) { Map<Object, Object> unrecognized = XmlConfigHelper.setAttributes(attributes, props, false, false); unrecognized = XmlConfigHelper.setAttributes(table.attributes(), unrecognized, false, false); XmlConfigHelper.showUnrecognizedAttributes(unrecognized); attributes.attribute(PROPERTIES).set(TypedProperties.toTypedProperties(props)); return this; } @Override public JdbcStringBasedStoreConfiguration create() { return new JdbcStringBasedStoreConfiguration(attributes.protect(), async.create(), singletonStore.create(), connectionFactory != null ? connectionFactory.create() : null, table.create()); } @Override public Builder<?> read(JdbcStringBasedStoreConfiguration template) { super.read(template); this.table.read(template.table()); return this; } public class StringTableManipulationConfigurationBuilder extends TableManipulationConfigurationBuilder<JdbcStringBasedStoreConfigurationBuilder, StringTableManipulationConfigurationBuilder> { StringTableManipulationConfigurationBuilder(AbstractJdbcStoreConfigurationBuilder<?, JdbcStringBasedStoreConfigurationBuilder> builder) { super(builder); } @Override public StringTableManipulationConfigurationBuilder self() { return this; } @Override public PooledConnectionFactoryConfigurationBuilder<JdbcStringBasedStoreConfigurationBuilder> connectionPool() { return JdbcStringBasedStoreConfigurationBuilder.this.connectionPool(); } @Override public ManagedConnectionFactoryConfigurationBuilder<JdbcStringBasedStoreConfigurationBuilder> dataSource() { return JdbcStringBasedStoreConfigurationBuilder.this.dataSource(); } } @Override public String toString() { return "JdbcStringBasedStoreConfigurationBuilder [table=" + table + ", connectionFactory=" + connectionFactory + ", attributes=" + attributes + ", async=" + async + ", singletonStore=" + singletonStore + "]"; } }