// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.replicationhttp.v0_6;
import java.net.InetSocketAddress;
import org.openstreetmap.osmosis.core.pipeline.common.TaskConfiguration;
import org.openstreetmap.osmosis.core.pipeline.common.TaskManager;
import org.openstreetmap.osmosis.core.pipeline.common.TaskManagerFactory;
import org.openstreetmap.osmosis.core.pipeline.v0_6.RunnableChangeSourceManager;
/**
* The task manager factory for a HTTP replication data client.
*
* @author Brett Henderson
*/
public class ReplicationDataClientFactory extends TaskManagerFactory {
private static final String ARG_HOST = "host";
private static final String ARG_PORT = "port";
private static final String ARG_PATH_PREFIX = "pathPrefix";
private static final String DEFAULT_HOST = "localhost";
private static final int DEFAULT_PORT = 0;
private static final String DEFAULT_PATH_PREFIX = "";
/**
* {@inheritDoc}
*/
@Override
protected TaskManager createTaskManagerImpl(TaskConfiguration taskConfig) {
String host;
int port;
StringBuilder basePath;
// Get the task arguments.
host = getStringArgument(taskConfig, ARG_HOST, DEFAULT_HOST);
port = getIntegerArgument(taskConfig, ARG_PORT, DEFAULT_PORT);
basePath = new StringBuilder(getStringArgument(taskConfig, ARG_PATH_PREFIX, DEFAULT_PATH_PREFIX));
// Ensure that the base path if it exists has a leading slash but no trailing slash.
while (basePath.length() > 0 && basePath.charAt(0) == '/') {
basePath.delete(0, 1);
}
while (basePath.length() > 0 && basePath.charAt(basePath.length() - 1) == '/') {
basePath.delete(basePath.length() - 1, basePath.length());
}
if (basePath.length() > 0) {
basePath.insert(0, '/');
}
return new RunnableChangeSourceManager(
taskConfig.getId(),
new ReplicationDataClient(new InetSocketAddress(host, port), basePath.toString()),
taskConfig.getPipeArgs()
);
}
}