// This software is released into the Public Domain. See copying.txt for details.
package org.openstreetmap.osmosis.core.pipeline.common;
import java.util.HashMap;
import java.util.Map;
import org.openstreetmap.osmosis.core.OsmosisRuntimeException;
/**
* Maintains the set of task manager factories each identified by one or more
* unique names. This allows a pipeline to be configured dynamically such as
* from a user provided command line.
*
* @author Brett Henderson
*/
public class TaskManagerFactoryRegister {
/**
* The global register of task manager factories, keyed by a unique
* identifier.
*/
private Map<String, TaskManagerFactory> factoryMap;
/**
* Creates a new instance.
*/
public TaskManagerFactoryRegister() {
factoryMap = new HashMap<String, TaskManagerFactory>();
}
/**
* Registers a new factory.
*
* @param taskType
* The name the factory is identified by.
* @param factory
* The factory to be registered.
*/
public void register(String taskType, TaskManagerFactory factory) {
if (factoryMap.containsKey(taskType)) {
throw new OsmosisRuntimeException("Task type \"" + taskType + "\" already exists.");
}
factoryMap.put(taskType, factory);
}
/**
* Get a task manager factory from the register.
*
* @param taskType
* The type of task requiring a factory.
* @return The factory instance.
*/
public TaskManagerFactory getInstance(String taskType) {
if (!factoryMap.containsKey(taskType)) {
throw new OsmosisRuntimeException("Task type " + taskType
+ " doesn't exist.");
}
return factoryMap.get(taskType);
}
}