package org.infinispan.persistence.remote.configuration;
import java.util.List;
import javax.xml.stream.XMLStreamException;
import org.infinispan.commons.configuration.attributes.AttributeSet;
import org.infinispan.configuration.serializing.AbstractStoreSerializer;
import org.infinispan.configuration.serializing.ConfigurationSerializer;
import org.infinispan.configuration.serializing.SerializeUtils;
import org.infinispan.configuration.serializing.XMLExtendedStreamWriter;
/**
* RemoteStoreConfigurationSerializer.
*
* @author Tristan Tarrant
* @since 9.0
*/
public class RemoteStoreConfigurationSerializer extends AbstractStoreSerializer implements ConfigurationSerializer<RemoteStoreConfiguration> {
@Override
public void serialize(XMLExtendedStreamWriter writer, RemoteStoreConfiguration configuration) throws XMLStreamException {
writer.writeStartElement(Element.REMOTE_STORE);
configuration.attributes().write(writer);
writeCommonStoreSubAttributes(writer, configuration);
writeAsyncExecutor(writer, configuration.asyncExecutorFactory());
writeConnectionPool(writer, configuration.connectionPool());
writeServers(writer, configuration.servers());
writeCommonStoreElements(writer, configuration);
writer.writeEndElement();
}
private void writeAsyncExecutor(XMLExtendedStreamWriter writer, ExecutorFactoryConfiguration executorFactoryConfiguration) throws XMLStreamException {
AttributeSet attributes = executorFactoryConfiguration.attributes();
if(attributes.isModified()) {
writer.writeStartElement(Element.ASYNC_TRANSPORT_EXECUTOR);
attributes.write(writer, ExecutorFactoryConfiguration.EXECUTOR_FACTORY, Attribute.FACTORY);
SerializeUtils.writeTypedProperties(writer, executorFactoryConfiguration.properties());
writer.writeEndElement();
}
}
private void writeConnectionPool(XMLExtendedStreamWriter writer, ConnectionPoolConfiguration connectionPool) throws XMLStreamException {
writer.writeStartElement(Element.CONNECTION_POOL);
writer.writeAttribute(Attribute.EXHAUSTED_ACTION, connectionPool.exhaustedAction().name());
writer.writeAttribute(Attribute.MAX_ACTIVE, Integer.toString(connectionPool.maxActive()));
writer.writeAttribute(Attribute.MAX_IDLE, Integer.toString(connectionPool.maxIdle()));
writer.writeAttribute(Attribute.MIN_IDLE, Integer.toString(connectionPool.minIdle()));
writer.writeAttribute(Attribute.MAX_TOTAL, Integer.toString(connectionPool.maxTotal()));
writer.writeAttribute(Attribute.MIN_EVICTABLE_IDLE_TIME, Long.toString(connectionPool.minEvictableIdleTime()));
writer.writeAttribute(Attribute.TIME_BETWEEN_EVICTION_RUNS, Long.toString(connectionPool.timeBetweenEvictionRuns()));
writer.writeAttribute(Attribute.TEST_WHILE_IDLE, Boolean.toString(connectionPool.testWhileIdle()));
writer.writeEndElement();
}
private void writeServers(XMLExtendedStreamWriter writer, List<RemoteServerConfiguration> servers) throws XMLStreamException {
for(RemoteServerConfiguration server : servers) {
writer.writeStartElement(Element.SERVER);
writer.writeAttribute(Attribute.HOST, server.host());
writer.writeAttribute(Attribute.PORT, Integer.toString(server.port()));
writer.writeEndElement();
}
}
}