package org.infinispan.counter.configuration; import javax.xml.stream.XMLStreamException; import org.infinispan.configuration.serializing.ConfigurationSerializer; import org.infinispan.configuration.serializing.XMLExtendedStreamWriter; /** * Counters configuration serializer. * * @author Pedro Ruivo * @since 9.0 */ public class CounterConfigurationSerializer implements ConfigurationSerializer<CounterManagerConfiguration> { @Override public void serialize(XMLExtendedStreamWriter writer, CounterManagerConfiguration configuration) throws XMLStreamException { writer.writeStartElement(Element.COUNTERS); configuration.attributes().write(writer); for (AbstractCounterConfiguration c : configuration.counters()) { if (c instanceof StrongCounterConfiguration) { writeStrongConfiguration((StrongCounterConfiguration) c, writer); } else if (c instanceof WeakCounterConfiguration) { writeWeakConfiguration((WeakCounterConfiguration) c, writer); } } writer.writeEndElement(); } private void writeWeakConfiguration(WeakCounterConfiguration configuration, XMLExtendedStreamWriter writer) throws XMLStreamException { writer.writeStartElement(Element.WEAK_COUNTER); configuration.attributes().write(writer); writer.writeEndElement(); } private void writeStrongConfiguration(StrongCounterConfiguration configuration, XMLExtendedStreamWriter writer) throws XMLStreamException { writer.writeStartElement(Element.STRONG_COUNTER); configuration.attributes().write(writer); if (configuration.attributes().attribute(StrongCounterConfiguration.LOWER_BOUND).isModified()) { writeBound(Element.LOWER_BOUND, configuration.lowerBound(), writer); } if (configuration.attributes().attribute(StrongCounterConfiguration.UPPER_BOUND).isModified()) { writeBound(Element.UPPER_BOUND, configuration.upperBound(), writer); } writer.writeEndElement(); } private void writeBound(Element element, long value, XMLExtendedStreamWriter writer) throws XMLStreamException { writer.writeStartElement(element); writer.writeAttribute(Attribute.VALUE, Long.toString(value)); writer.writeEndElement(); } }