package org.infinispan.configuration.cache; import static org.infinispan.configuration.cache.JMXStatisticsConfiguration.AVAILABLE; import static org.infinispan.configuration.cache.JMXStatisticsConfiguration.ENABLED; import java.lang.invoke.MethodHandles; import org.infinispan.commons.configuration.Builder; import org.infinispan.commons.configuration.attributes.Attribute; import org.infinispan.commons.configuration.attributes.AttributeSet; import org.infinispan.configuration.global.GlobalConfiguration; import org.infinispan.util.logging.Log; import org.infinispan.util.logging.LogFactory; /** * Determines whether statistics are gather and reported. * * @author pmuir * */ public class JMXStatisticsConfigurationBuilder extends AbstractConfigurationChildBuilder implements Builder<JMXStatisticsConfiguration> { private static final Log log = LogFactory.getLog(MethodHandles.lookup().lookupClass(), Log.class); private final AttributeSet attributes; JMXStatisticsConfigurationBuilder(ConfigurationBuilder builder) { super(builder); this.attributes = JMXStatisticsConfiguration.attributeDefinitionSet(); } /** * Enable statistics gathering and reporting */ public JMXStatisticsConfigurationBuilder enable() { attributes.attribute(ENABLED).set(true); return this; } /** * Disable statistics gathering and reporting */ public JMXStatisticsConfigurationBuilder disable() { attributes.attribute(ENABLED).set(false); return this; } /** * Enable or disable statistics gathering and reporting */ public JMXStatisticsConfigurationBuilder enabled(boolean enabled) { attributes.attribute(ENABLED).set(enabled); return this; } /** * If set to false, statistics gathering cannot be enabled during runtime. Performance optimization. * @param available * @return */ public JMXStatisticsConfigurationBuilder available(boolean available) { attributes.attribute(AVAILABLE).set(available); return this; } @Override public void validate() { Attribute<Boolean> enabled = attributes.attribute(ENABLED); Attribute<Boolean> available = attributes.attribute(AVAILABLE); if (enabled.isModified() && available.isModified()) { if (enabled.get() && !available.get()) { throw log.statisticsEnabledNotAvailable(); } } } @Override public void validate(GlobalConfiguration globalConfig) { } @Override public JMXStatisticsConfiguration create() { return new JMXStatisticsConfiguration(attributes.protect()); } @Override public JMXStatisticsConfigurationBuilder read(JMXStatisticsConfiguration template) { this.attributes.read(template.attributes()); return this; } @Override public String toString() { return "JMXStatisticsConfigurationBuilder [attributes=" + attributes + "]"; } }