You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2013/01/11 00:12:37 UTC

svn commit: r1431721 [6/19] - in /uima/sandbox/uimafit/trunk: uimafit-examples/src/main/java/org/apache/uima/fit/examples/experiment/pos/ uimafit-examples/src/main/java/org/apache/uima/fit/examples/getstarted/ uimafit-examples/src/main/java/org/apache/...

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java Thu Jan 10 23:12:33 2013
@@ -72,570 +72,559 @@ import org.apache.uima.util.FileUtils;
 /**
  */
 public final class AnalysisEngineFactory {
-	private AnalysisEngineFactory() {
-		// This class is not meant to be instantiated
-	}
-
-	/**
-	 * Get an AnalysisEngine from the name (Java-style, dotted) of an XML descriptor file, and a set
-	 * of configuration parameters.
-	 *
-	 * @param descriptorName
-	 *            The fully qualified, Java-style, dotted name of the XML descriptor file.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
-	 */
-	public static AnalysisEngine createAnalysisEngine(String descriptorName,
-			Object... configurationData) throws UIMAException, IOException {
-		AnalysisEngineDescription aed = createAnalysisEngineDescription(descriptorName,
-				configurationData);
-		return UIMAFramework.produceAnalysisEngine(aed);
-	}
-
-	/**
-	 * Provides a way to create an AnalysisEngineDescription using a descriptor file referenced by
-	 * name
-	 *
-	 * @param configurationData
-	 *            should consist of name value pairs. Will override configuration parameter settings
-	 *            in the descriptor file
-	 */
-	public static AnalysisEngineDescription createAnalysisEngineDescription(String descriptorName,
-			Object... configurationData) throws UIMAException, IOException {
-		Import_impl imprt = new Import_impl();
-		imprt.setName(descriptorName);
-		URL url = imprt.findAbsoluteUrl(UIMAFramework.newDefaultResourceManager());
-		ResourceSpecifier specifier = ResourceCreationSpecifierFactory
-				.createResourceCreationSpecifier(url, configurationData);
-		return (AnalysisEngineDescription) specifier;
-	}
-
-	/**
-	 * This method provides a convenient way to instantiate an AnalysisEngine where the default view
-	 * is mapped to the view name passed into the method.
-	 *
-	 * @param viewName
-	 *            the view name to map the default view to
-	 * @return an aggregate analysis engine consisting of a single component whose default view is
-	 *         mapped to the the view named by viewName.
-	 */
-	public static AnalysisEngine createAnalysisEngine(
-			AnalysisEngineDescription analysisEngineDescription, String viewName)
-			throws ResourceInitializationException {
-		AggregateBuilder builder = new AggregateBuilder();
-		builder.add(analysisEngineDescription, CAS.NAME_DEFAULT_SOFA, viewName);
-		return builder.createAggregate();
-	}
-
-	/**
-	 * Get an AnalysisEngine from an XML descriptor file and a set of configuration parameters.
-	 *
-	 * @param descriptorPath
-	 *            The path to the XML descriptor file.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
-	 */
-	public static AnalysisEngine createAnalysisEngineFromPath(String descriptorPath,
-			Object... configurationData) throws UIMAException, IOException {
-		ResourceSpecifier specifier;
-		specifier = ResourceCreationSpecifierFactory.createResourceCreationSpecifier(
-				descriptorPath, configurationData);
-		return UIMAFramework.produceAnalysisEngine(specifier);
-	}
-
-	/**
-	 * Get an AnalysisEngine from an OperationalProperties class, a type system and a set of
-	 * configuration parameters. The type system is detected automatically using
-	 * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
-	 *
-	 * @param componentClass
-	 *            The class of the OperationalProperties to be created as an AnalysisEngine.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The AnalysisEngine created from the OperationalProperties class and initialized with
-	 *         the type system and the configuration parameters.
-	 */
-	public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
-			Object... configurationData) throws ResourceInitializationException {
-		TypeSystemDescription tsd = createTypeSystemDescription();
-		return createPrimitive(componentClass, tsd, (TypePriorities) null, configurationData);
-	}
-
-	/**
-	 * Get an AnalysisEngine from an OperationalProperties class, a type system and a set of
-	 * configuration parameters.
-	 *
-	 * @param componentClass
-	 *            The class of the OperationalProperties to be created as an AnalysisEngine.
-	 * @param typeSystem
-	 *            A description of the types used by the OperationalProperties (may be null).
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The AnalysisEngine created from the OperationalProperties class and initialized with
-	 *         the type system and the configuration parameters.
-	 */
-	public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
-			TypeSystemDescription typeSystem, Object... configurationData)
-			throws ResourceInitializationException {
-		return createPrimitive(componentClass, typeSystem, (TypePriorities) null, configurationData);
-	}
-
-	public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
-			TypeSystemDescription typeSystem, String[] prioritizedTypeNames,
-			Object... configurationData) throws ResourceInitializationException {
-		TypePriorities typePriorities = TypePrioritiesFactory
-				.createTypePriorities(prioritizedTypeNames);
-		return createPrimitive(componentClass, typeSystem, typePriorities, configurationData);
-
-	}
-
-	/**
-	 * A simple factory method for creating a primitive AnalysisEngineDescription for a given class,
-	 * type system, and configuration parameter data
-	 *
-	 * @param componentClass
-	 *            a class that extends AnalysisComponent e.g.
-	 *            org.uimafit.component.JCasAnnotator_ImplBase
-	 */
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
-			Object... configurationData) throws ResourceInitializationException {
-		return createPrimitiveDescription(componentClass, typeSystem, (TypePriorities) null,
-				configurationData);
-	}
-
-	/**
-	 * A simple factory method for creating a primitive AnalysisEngineDescription for a given class,
-	 * type system, and configuration parameter data The type system is detected automatically using
-	 * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
-	 *
-	 * @param componentClass
-	 *            a class that extends AnalysisComponent e.g.
-	 *            org.uimafit.component.JCasAnnotator_ImplBase
-	 */
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, Object... configurationData)
-			throws ResourceInitializationException {
-		TypeSystemDescription tsd = createTypeSystemDescription();
-		return createPrimitiveDescription(componentClass, tsd, (TypePriorities) null,
-				configurationData);
-	}
-
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, Object... configurationData)
-			throws ResourceInitializationException {
-		return createPrimitiveDescription(componentClass, typeSystem, typePriorities,
-				(FsIndexCollection) null, (Capability[]) null, configurationData);
-	}
-
-	/**
-	 * The factory methods for creating an AnalysisEngineDescription
-	 */
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			Object... configurationData) throws ResourceInitializationException {
-
-		ensureParametersComeInPairs(configurationData);
-
-		// Extract ExternalResourceDescriptions from configurationData
-		// <ParamterName, ExternalResourceDescription> will be stored in this map
-		Map<String, ExternalResourceDescription> externalResources = 
-				ExternalResourceFactory.extractExternalResourceParameters(configurationData);
-
-		// Create primitive description normally
-		ConfigurationData cdata = createConfigurationData(configurationData);
-		return createPrimitiveDescription(componentClass, typeSystem,
-				typePriorities, indexes, capabilities, cdata.configurationParameters,
-				cdata.configurationValues, externalResources);
-	}
-
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			ConfigurationParameter[] configurationParameters, Object[] configurationValues)
-			throws ResourceInitializationException {
-		return createPrimitiveDescription(componentClass, typeSystem, typePriorities, indexes,
-				capabilities, configurationParameters, configurationValues, null);
-	}
-	
-	public static AnalysisEngineDescription createPrimitiveDescription(
-			Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			ConfigurationParameter[] configurationParameters, Object[] configurationValues,
-			Map<String, ExternalResourceDescription> externalResources)
-			throws ResourceInitializationException {
-
-		// create the descriptor and set configuration parameters
-		AnalysisEngineDescription desc = UIMAFramework.getResourceSpecifierFactory()
-				.createAnalysisEngineDescription();
-		desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
-		desc.setPrimitive(true);
-		desc.setAnnotatorImplementationName(componentClass.getName());
-		org.apache.uima.fit.descriptor.OperationalProperties componentAnno = ReflectionUtil
-				.getInheritableAnnotation(org.apache.uima.fit.descriptor.OperationalProperties.class,
-						componentClass);
-		if (componentAnno != null) {
-			OperationalProperties op = desc.getAnalysisEngineMetaData().getOperationalProperties();
-			op.setMultipleDeploymentAllowed(componentAnno.multipleDeploymentAllowed());
-			op.setModifiesCas(componentAnno.modifiesCas());
-			op.setOutputsNewCASes(componentAnno.outputsNewCases());
-		}
-		else {
-			OperationalProperties op = desc.getAnalysisEngineMetaData().getOperationalProperties();
-			op.setMultipleDeploymentAllowed(MULTIPLE_DEPLOYMENT_ALLOWED_DEFAULT);
-			op.setModifiesCas(MODIFIES_CAS_DEFAULT);
-			op.setOutputsNewCASes(OUTPUTS_NEW_CASES_DEFAULT);
-		}
-
-		AnalysisEngineMetaData meta = desc.getAnalysisEngineMetaData();
-		meta.setName(componentClass.getName());
-
-		if(componentClass.getPackage() != null){
-			meta.setVendor(componentClass.getPackage().getName());
-		}
-		meta.setDescription("Descriptor automatically generated by uimaFIT");
-		meta.setVersion("unknown");
-
-		ConfigurationData reflectedConfigurationData = createConfigurationData(componentClass);
-		ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-				reflectedConfigurationData.configurationParameters,
-				reflectedConfigurationData.configurationValues);
-		if (configurationParameters != null) {
-			ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-					configurationParameters, configurationValues);
-		}
-
-		// set the type system
-		if (typeSystem != null) {
-			desc.getAnalysisEngineMetaData().setTypeSystem(typeSystem);
-		}
-
-		if (typePriorities != null) {
-			desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities);
-		}
-
-		// set indexes from the argument to this call or from the annotation present in the
-		// component if the argument is null
-		if (indexes != null) {
-			desc.getAnalysisEngineMetaData().setFsIndexCollection(indexes);
-		}
-		else {
-			desc.getAnalysisEngineMetaData().setFsIndexCollection(
-					FsIndexFactory.createFsIndexCollection(componentClass));
-		}
-
-		// set capabilities from the argument to this call or from the annotation present in the
-		// component if the argument is null
-		if (capabilities != null) {
-			desc.getAnalysisEngineMetaData().setCapabilities(capabilities);
-		}
-		else {
-			Capability capability = CapabilityFactory.createCapability(componentClass);
-			if (capability != null) {
-				desc.getAnalysisEngineMetaData().setCapabilities(new Capability[] { capability });
-			}
-		}
-		
-		// Extract external resource dependencies
-		Collection<ExternalResourceDependency> deps = ExternalResourceInitializer
-				.getResourceDeclarations(componentClass).values();
-		desc.setExternalResourceDependencies(deps.toArray(new ExternalResourceDependency[deps
-				.size()]));
-		
-		// Bind External Resources
-		if (externalResources != null) {
-			for (Entry<String, ExternalResourceDescription> e : externalResources.entrySet()) {
-				bindExternalResource(desc, e.getKey(), e.getValue());
-			}
-		}
-
-		return desc;
-	}
-
-	/**
-	 * Provides a way to override configuration parameter settings with new values in an
-	 * AnalysisEngineDescription
-	 *
-	 * @deprecated use {@link ResourceCreationSpecifierFactory#setConfigurationParameters}
-	 */
-	@Deprecated
-	public static void setConfigurationParameters(
-			AnalysisEngineDescription analysisEngineDescription, Object... configurationData)
-			throws ResourceInitializationException {
-		ResourceCreationSpecifierFactory.setConfigurationParameters(analysisEngineDescription,
-				configurationData);
-	}
-
-	public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
-			TypeSystemDescription typeSystem, TypePriorities typePriorities,
-			Object... configurationParameters) throws ResourceInitializationException {
-
-		AnalysisEngineDescription desc = createPrimitiveDescription(componentClass, typeSystem,
-				typePriorities, configurationParameters);
-
-		// create the AnalysisEngine, initialize it and return it
-		return createPrimitive(desc);
-	}
-
-	public static AnalysisEngine createPrimitive(AnalysisEngineDescription desc,
-			Object... configurationData) throws ResourceInitializationException {
-		AnalysisEngineDescription descClone = (AnalysisEngineDescription) desc.clone();
-		ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
-		return UIMAFramework.produceAnalysisEngine(descClone);
-	}
-
-	public static AnalysisEngine createAggregate(
-			List<Class<? extends AnalysisComponent>> componentClasses,
-			TypeSystemDescription typeSystem, TypePriorities typePriorities,
-			SofaMapping[] sofaMappings, Object... configurationParameters)
-			throws ResourceInitializationException {
-		AnalysisEngineDescription desc = createAggregateDescription(componentClasses, typeSystem,
-				typePriorities, sofaMappings, configurationParameters);
-		// create the AnalysisEngine, initialize it and return it
-		AnalysisEngine engine = new AggregateAnalysisEngine_impl();
-		engine.initialize(desc, null);
-		return engine;
-	}
-
-	public static AnalysisEngine createAggregate(
-			List<Class<? extends AnalysisComponent>> componentClasses,
-			TypeSystemDescription typeSystem, TypePriorities typePriorities,
-			SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription,
-			Object... configurationParameters) throws ResourceInitializationException {
-		AnalysisEngineDescription desc = createAggregateDescription(componentClasses, typeSystem,
-				typePriorities, sofaMappings, configurationParameters, flowControllerDescription);
-		// create the AnalysisEngine, initialize it and return it
-		AnalysisEngine engine = new AggregateAnalysisEngine_impl();
-		engine.initialize(desc, null);
-		return engine;
-	}
-
-	public static AnalysisEngine createAggregate(AnalysisEngineDescription desc)
-			throws ResourceInitializationException {
-		// create the AnalysisEngine, initialize it and return it
-		return UIMAFramework.produceAnalysisEngine(desc, null, null);
-	}
-
-	public static AnalysisEngineDescription createAggregateDescription(
-			List<Class<? extends AnalysisComponent>> componentClasses,
-			TypeSystemDescription typeSystem, TypePriorities typePriorities,
-			SofaMapping[] sofaMappings, Object... configurationParameters)
-			throws ResourceInitializationException {
-
-		List<AnalysisEngineDescription> primitiveEngineDescriptions = new ArrayList<AnalysisEngineDescription>();
-		List<String> componentNames = new ArrayList<String>();
-
-		for (Class<? extends AnalysisComponent> componentClass : componentClasses) {
-			AnalysisEngineDescription primitiveDescription = createPrimitiveDescription(
-					componentClass, typeSystem, typePriorities, configurationParameters);
-			primitiveEngineDescriptions.add(primitiveDescription);
-			componentNames.add(componentClass.getName());
-		}
-		return createAggregateDescription(primitiveEngineDescriptions, componentNames, typeSystem,
-				typePriorities, sofaMappings, null);
-	}
-
-	public static AnalysisEngine createAggregate(
-			List<AnalysisEngineDescription> analysisEngineDescriptions,
-			List<String> componentNames, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, SofaMapping[] sofaMappings)
-			throws ResourceInitializationException {
-
-		AnalysisEngineDescription desc = createAggregateDescription(analysisEngineDescriptions,
-				componentNames, typeSystem, typePriorities, sofaMappings, null);
-		// create the AnalysisEngine, initialize it and return it
-		AnalysisEngine engine = new AggregateAnalysisEngine_impl();
-		engine.initialize(desc, null);
-		return engine;
-
-	}
-
-	public static AnalysisEngineDescription createAggregateDescription(
-			AnalysisEngineDescription... analysisEngineDescriptions)
-			throws ResourceInitializationException {
-		String[] names = new String[analysisEngineDescriptions.length];
-		int i = 0;
-		for (AnalysisEngineDescription aed : analysisEngineDescriptions) {
-			names[i] = aed.getImplementationName() + "-" + i;
-			i++;
-		}
-
-		return createAggregateDescription(asList(analysisEngineDescriptions), asList(names), null,
-				null, null, null);
-	}
-
-	public static AnalysisEngineDescription createAggregateDescription(
-			List<Class<? extends AnalysisComponent>> componentClasses,
-			TypeSystemDescription typeSystem, TypePriorities typePriorities,
-			SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription,
-			Object... configurationParameters) throws ResourceInitializationException {
-
-		List<AnalysisEngineDescription> primitiveEngineDescriptions = new ArrayList<AnalysisEngineDescription>();
-		List<String> componentNames = new ArrayList<String>();
-
-		for (Class<? extends AnalysisComponent> componentClass : componentClasses) {
-			AnalysisEngineDescription primitiveDescription = createPrimitiveDescription(
-					componentClass, typeSystem, typePriorities, configurationParameters);
-			primitiveEngineDescriptions.add(primitiveDescription);
-			componentNames.add(componentClass.getName());
-		}
-		return createAggregateDescription(primitiveEngineDescriptions, componentNames, typeSystem,
-				typePriorities, sofaMappings, flowControllerDescription);
-	}
-
-	public static AnalysisEngine createAggregate(
-			List<AnalysisEngineDescription> analysisEngineDescriptions,
-			List<String> componentNames, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, SofaMapping[] sofaMappings,
-			FlowControllerDescription flowControllerDescription)
-			throws ResourceInitializationException {
-
-		AnalysisEngineDescription desc = createAggregateDescription(analysisEngineDescriptions,
-				componentNames, typeSystem, typePriorities, sofaMappings, flowControllerDescription);
-		// create the AnalysisEngine, initialize it and return it
-		AnalysisEngine engine = new AggregateAnalysisEngine_impl();
-		engine.initialize(desc, null);
-		return engine;
-
-	}
-
-	/**
-	 * A simplified factory method for creating an aggregate description for a given flow controller
-	 * and a sequence of analysis engine descriptions
-	 */
-	public static AnalysisEngineDescription createAggregateDescription(
-			FlowControllerDescription flowControllerDescription,
-			AnalysisEngineDescription... analysisEngineDescriptions)
-			throws ResourceInitializationException {
-		String[] names = new String[analysisEngineDescriptions.length];
-		int i = 0;
-		for (AnalysisEngineDescription aed : analysisEngineDescriptions) {
-			names[i] = aed.getImplementationName() + "-" + i;
-			i++;
-		}
-
-		return createAggregateDescription(asList(analysisEngineDescriptions), asList(names), null,
-				null, null, flowControllerDescription);
-	}
-
-	/**
-	 * A factory method for creating an aggregate description.
-	 */
-	public static AnalysisEngineDescription createAggregateDescription(
-			List<AnalysisEngineDescription> analysisEngineDescriptions,
-			List<String> componentNames, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, SofaMapping[] sofaMappings,
-			FlowControllerDescription flowControllerDescription)
-			throws ResourceInitializationException {
-
-		// create the descriptor and set configuration parameters
-		AnalysisEngineDescription desc = new AnalysisEngineDescription_impl();
-		desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
-		desc.setPrimitive(false);
-
-		// if any of the aggregated analysis engines does not allow multiple
-		// deployment, then the
-		// aggregate engine may also not be multiply deployed
-		boolean allowMultipleDeploy = true;
-		for (AnalysisEngineDescription d : analysisEngineDescriptions) {
-			allowMultipleDeploy &= d.getAnalysisEngineMetaData().getOperationalProperties()
-					.isMultipleDeploymentAllowed();
-		}
-		desc.getAnalysisEngineMetaData().getOperationalProperties()
-				.setMultipleDeploymentAllowed(allowMultipleDeploy);
-
-		List<String> flowNames = new ArrayList<String>();
-
-		for (int i = 0; i < analysisEngineDescriptions.size(); i++) {
-			AnalysisEngineDescription aed = analysisEngineDescriptions.get(i);
-			String componentName = componentNames.get(i);
-			desc.getDelegateAnalysisEngineSpecifiersWithImports().put(componentName, aed);
-			flowNames.add(componentName);
-		}
-
-		if (flowControllerDescription != null) {
-			FlowControllerDeclaration flowControllerDeclaration = new FlowControllerDeclaration_impl();
-			flowControllerDeclaration.setSpecifier(flowControllerDescription);
-			desc.setFlowControllerDeclaration(flowControllerDeclaration);
-		}
-
-		FixedFlow fixedFlow = new FixedFlow_impl();
-		fixedFlow.setFixedFlow(flowNames.toArray(new String[flowNames.size()]));
-		desc.getAnalysisEngineMetaData().setFlowConstraints(fixedFlow);
-
-		if (typePriorities != null) {
-			desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities);
-		}
-
-		if (sofaMappings != null) {
-			desc.setSofaMappings(sofaMappings);
-		}
-
-		return desc;
-	}
-
-	/**
-	 * Creates an AnalysisEngine from the given descriptor, and uses the engine to process the file
-	 * or text.
-	 *
-	 * @param descriptorFileName
-	 *            The fully qualified, Java-style, dotted name of the XML descriptor file.
-	 * @param fileNameOrText
-	 *            Either the path of a file to be loaded, or a string to use as the text. If the
-	 *            string given is not a valid path in the file system, it will be assumed to be
-	 *            text.
-	 * @return A JCas object containing the processed document.
-	 */
-	public static JCas process(String descriptorFileName, String fileNameOrText)
-			throws IOException, UIMAException {
-		AnalysisEngine engine = createAnalysisEngine(descriptorFileName);
-		JCas jCas = process(engine, fileNameOrText);
-		engine.collectionProcessComplete();
-		return jCas;
-	}
-
-	/**
-	 * Processes the file or text with the given AnalysisEngine.
-	 *
-	 * @param analysisEngine
-	 *            The AnalysisEngine object to process the text.
-	 * @param fileNameOrText
-	 *            Either the path of a file to be loaded, or a string to use as the text. If the
-	 *            string given is not a valid path in the file system, it will be assumed to be
-	 *            text.
-	 * @return A JCas object containing the processed document.
-	 */
-	public static JCas process(AnalysisEngine analysisEngine, String fileNameOrText)
-			throws IOException, UIMAException {
-		JCas jCas = analysisEngine.newJCas();
-		process(jCas, analysisEngine, fileNameOrText);
-		return jCas;
-	}
-
-	/**
-	 * Provides a convenience method for running an AnalysisEngine over some text with a given JCas.
-	 */
-	public static void process(JCas jCas, AnalysisEngine analysisEngine, String fileNameOrText)
-			throws IOException, UIMAException {
-		File textFile = new File(fileNameOrText);
-		String text;
-		if (textFile.exists()) {
-			text = FileUtils.file2String(textFile);
-		}
-		else {
-			text = fileNameOrText;
-		}
-
-		jCas.setDocumentText(text);
-		analysisEngine.process(jCas);
-	}
+  private AnalysisEngineFactory() {
+    // This class is not meant to be instantiated
+  }
+
+  /**
+   * Get an AnalysisEngine from the name (Java-style, dotted) of an XML descriptor file, and a set
+   * of configuration parameters.
+   * 
+   * @param descriptorName
+   *          The fully qualified, Java-style, dotted name of the XML descriptor file.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
+   */
+  public static AnalysisEngine createAnalysisEngine(String descriptorName,
+          Object... configurationData) throws UIMAException, IOException {
+    AnalysisEngineDescription aed = createAnalysisEngineDescription(descriptorName,
+            configurationData);
+    return UIMAFramework.produceAnalysisEngine(aed);
+  }
+
+  /**
+   * Provides a way to create an AnalysisEngineDescription using a descriptor file referenced by
+   * name
+   * 
+   * @param configurationData
+   *          should consist of name value pairs. Will override configuration parameter settings in
+   *          the descriptor file
+   */
+  public static AnalysisEngineDescription createAnalysisEngineDescription(String descriptorName,
+          Object... configurationData) throws UIMAException, IOException {
+    Import_impl imprt = new Import_impl();
+    imprt.setName(descriptorName);
+    URL url = imprt.findAbsoluteUrl(UIMAFramework.newDefaultResourceManager());
+    ResourceSpecifier specifier = ResourceCreationSpecifierFactory.createResourceCreationSpecifier(
+            url, configurationData);
+    return (AnalysisEngineDescription) specifier;
+  }
+
+  /**
+   * This method provides a convenient way to instantiate an AnalysisEngine where the default view
+   * is mapped to the view name passed into the method.
+   * 
+   * @param viewName
+   *          the view name to map the default view to
+   * @return an aggregate analysis engine consisting of a single component whose default view is
+   *         mapped to the the view named by viewName.
+   */
+  public static AnalysisEngine createAnalysisEngine(
+          AnalysisEngineDescription analysisEngineDescription, String viewName)
+          throws ResourceInitializationException {
+    AggregateBuilder builder = new AggregateBuilder();
+    builder.add(analysisEngineDescription, CAS.NAME_DEFAULT_SOFA, viewName);
+    return builder.createAggregate();
+  }
+
+  /**
+   * Get an AnalysisEngine from an XML descriptor file and a set of configuration parameters.
+   * 
+   * @param descriptorPath
+   *          The path to the XML descriptor file.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
+   */
+  public static AnalysisEngine createAnalysisEngineFromPath(String descriptorPath,
+          Object... configurationData) throws UIMAException, IOException {
+    ResourceSpecifier specifier;
+    specifier = ResourceCreationSpecifierFactory.createResourceCreationSpecifier(descriptorPath,
+            configurationData);
+    return UIMAFramework.produceAnalysisEngine(specifier);
+  }
+
+  /**
+   * Get an AnalysisEngine from an OperationalProperties class, a type system and a set of
+   * configuration parameters. The type system is detected automatically using
+   * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
+   * 
+   * @param componentClass
+   *          The class of the OperationalProperties to be created as an AnalysisEngine.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The AnalysisEngine created from the OperationalProperties class and initialized with
+   *         the type system and the configuration parameters.
+   */
+  public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
+          Object... configurationData) throws ResourceInitializationException {
+    TypeSystemDescription tsd = createTypeSystemDescription();
+    return createPrimitive(componentClass, tsd, (TypePriorities) null, configurationData);
+  }
+
+  /**
+   * Get an AnalysisEngine from an OperationalProperties class, a type system and a set of
+   * configuration parameters.
+   * 
+   * @param componentClass
+   *          The class of the OperationalProperties to be created as an AnalysisEngine.
+   * @param typeSystem
+   *          A description of the types used by the OperationalProperties (may be null).
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The AnalysisEngine created from the OperationalProperties class and initialized with
+   *         the type system and the configuration parameters.
+   */
+  public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
+          TypeSystemDescription typeSystem, Object... configurationData)
+          throws ResourceInitializationException {
+    return createPrimitive(componentClass, typeSystem, (TypePriorities) null, configurationData);
+  }
+
+  public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
+          TypeSystemDescription typeSystem, String[] prioritizedTypeNames,
+          Object... configurationData) throws ResourceInitializationException {
+    TypePriorities typePriorities = TypePrioritiesFactory
+            .createTypePriorities(prioritizedTypeNames);
+    return createPrimitive(componentClass, typeSystem, typePriorities, configurationData);
+
+  }
+
+  /**
+   * A simple factory method for creating a primitive AnalysisEngineDescription for a given class,
+   * type system, and configuration parameter data
+   * 
+   * @param componentClass
+   *          a class that extends AnalysisComponent e.g.
+   *          org.uimafit.component.JCasAnnotator_ImplBase
+   */
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
+          Object... configurationData) throws ResourceInitializationException {
+    return createPrimitiveDescription(componentClass, typeSystem, (TypePriorities) null,
+            configurationData);
+  }
+
+  /**
+   * A simple factory method for creating a primitive AnalysisEngineDescription for a given class,
+   * type system, and configuration parameter data The type system is detected automatically using
+   * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
+   * 
+   * @param componentClass
+   *          a class that extends AnalysisComponent e.g.
+   *          org.uimafit.component.JCasAnnotator_ImplBase
+   */
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, Object... configurationData)
+          throws ResourceInitializationException {
+    TypeSystemDescription tsd = createTypeSystemDescription();
+    return createPrimitiveDescription(componentClass, tsd, (TypePriorities) null, configurationData);
+  }
+
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, Object... configurationData)
+          throws ResourceInitializationException {
+    return createPrimitiveDescription(componentClass, typeSystem, typePriorities,
+            (FsIndexCollection) null, (Capability[]) null, configurationData);
+  }
+
+  /**
+   * The factory methods for creating an AnalysisEngineDescription
+   */
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          Object... configurationData) throws ResourceInitializationException {
+
+    ensureParametersComeInPairs(configurationData);
+
+    // Extract ExternalResourceDescriptions from configurationData
+    // <ParamterName, ExternalResourceDescription> will be stored in this map
+    Map<String, ExternalResourceDescription> externalResources = ExternalResourceFactory
+            .extractExternalResourceParameters(configurationData);
+
+    // Create primitive description normally
+    ConfigurationData cdata = createConfigurationData(configurationData);
+    return createPrimitiveDescription(componentClass, typeSystem, typePriorities, indexes,
+            capabilities, cdata.configurationParameters, cdata.configurationValues,
+            externalResources);
+  }
+
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          ConfigurationParameter[] configurationParameters, Object[] configurationValues)
+          throws ResourceInitializationException {
+    return createPrimitiveDescription(componentClass, typeSystem, typePriorities, indexes,
+            capabilities, configurationParameters, configurationValues, null);
+  }
+
+  public static AnalysisEngineDescription createPrimitiveDescription(
+          Class<? extends AnalysisComponent> componentClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          ConfigurationParameter[] configurationParameters, Object[] configurationValues,
+          Map<String, ExternalResourceDescription> externalResources)
+          throws ResourceInitializationException {
+
+    // create the descriptor and set configuration parameters
+    AnalysisEngineDescription desc = UIMAFramework.getResourceSpecifierFactory()
+            .createAnalysisEngineDescription();
+    desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
+    desc.setPrimitive(true);
+    desc.setAnnotatorImplementationName(componentClass.getName());
+    org.apache.uima.fit.descriptor.OperationalProperties componentAnno = ReflectionUtil
+            .getInheritableAnnotation(org.apache.uima.fit.descriptor.OperationalProperties.class,
+                    componentClass);
+    if (componentAnno != null) {
+      OperationalProperties op = desc.getAnalysisEngineMetaData().getOperationalProperties();
+      op.setMultipleDeploymentAllowed(componentAnno.multipleDeploymentAllowed());
+      op.setModifiesCas(componentAnno.modifiesCas());
+      op.setOutputsNewCASes(componentAnno.outputsNewCases());
+    } else {
+      OperationalProperties op = desc.getAnalysisEngineMetaData().getOperationalProperties();
+      op.setMultipleDeploymentAllowed(MULTIPLE_DEPLOYMENT_ALLOWED_DEFAULT);
+      op.setModifiesCas(MODIFIES_CAS_DEFAULT);
+      op.setOutputsNewCASes(OUTPUTS_NEW_CASES_DEFAULT);
+    }
+
+    AnalysisEngineMetaData meta = desc.getAnalysisEngineMetaData();
+    meta.setName(componentClass.getName());
+
+    if (componentClass.getPackage() != null) {
+      meta.setVendor(componentClass.getPackage().getName());
+    }
+    meta.setDescription("Descriptor automatically generated by uimaFIT");
+    meta.setVersion("unknown");
+
+    ConfigurationData reflectedConfigurationData = createConfigurationData(componentClass);
+    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
+            reflectedConfigurationData.configurationParameters,
+            reflectedConfigurationData.configurationValues);
+    if (configurationParameters != null) {
+      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
+              configurationValues);
+    }
+
+    // set the type system
+    if (typeSystem != null) {
+      desc.getAnalysisEngineMetaData().setTypeSystem(typeSystem);
+    }
+
+    if (typePriorities != null) {
+      desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities);
+    }
+
+    // set indexes from the argument to this call or from the annotation present in the
+    // component if the argument is null
+    if (indexes != null) {
+      desc.getAnalysisEngineMetaData().setFsIndexCollection(indexes);
+    } else {
+      desc.getAnalysisEngineMetaData().setFsIndexCollection(
+              FsIndexFactory.createFsIndexCollection(componentClass));
+    }
+
+    // set capabilities from the argument to this call or from the annotation present in the
+    // component if the argument is null
+    if (capabilities != null) {
+      desc.getAnalysisEngineMetaData().setCapabilities(capabilities);
+    } else {
+      Capability capability = CapabilityFactory.createCapability(componentClass);
+      if (capability != null) {
+        desc.getAnalysisEngineMetaData().setCapabilities(new Capability[] { capability });
+      }
+    }
+
+    // Extract external resource dependencies
+    Collection<ExternalResourceDependency> deps = ExternalResourceInitializer
+            .getResourceDeclarations(componentClass).values();
+    desc.setExternalResourceDependencies(deps.toArray(new ExternalResourceDependency[deps.size()]));
+
+    // Bind External Resources
+    if (externalResources != null) {
+      for (Entry<String, ExternalResourceDescription> e : externalResources.entrySet()) {
+        bindExternalResource(desc, e.getKey(), e.getValue());
+      }
+    }
+
+    return desc;
+  }
+
+  /**
+   * Provides a way to override configuration parameter settings with new values in an
+   * AnalysisEngineDescription
+   * 
+   * @deprecated use {@link ResourceCreationSpecifierFactory#setConfigurationParameters}
+   */
+  @Deprecated
+  public static void setConfigurationParameters(
+          AnalysisEngineDescription analysisEngineDescription, Object... configurationData)
+          throws ResourceInitializationException {
+    ResourceCreationSpecifierFactory.setConfigurationParameters(analysisEngineDescription,
+            configurationData);
+  }
+
+  public static AnalysisEngine createPrimitive(Class<? extends AnalysisComponent> componentClass,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          Object... configurationParameters) throws ResourceInitializationException {
+
+    AnalysisEngineDescription desc = createPrimitiveDescription(componentClass, typeSystem,
+            typePriorities, configurationParameters);
+
+    // create the AnalysisEngine, initialize it and return it
+    return createPrimitive(desc);
+  }
+
+  public static AnalysisEngine createPrimitive(AnalysisEngineDescription desc,
+          Object... configurationData) throws ResourceInitializationException {
+    AnalysisEngineDescription descClone = (AnalysisEngineDescription) desc.clone();
+    ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
+    return UIMAFramework.produceAnalysisEngine(descClone);
+  }
+
+  public static AnalysisEngine createAggregate(
+          List<Class<? extends AnalysisComponent>> componentClasses,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, Object... configurationParameters)
+          throws ResourceInitializationException {
+    AnalysisEngineDescription desc = createAggregateDescription(componentClasses, typeSystem,
+            typePriorities, sofaMappings, configurationParameters);
+    // create the AnalysisEngine, initialize it and return it
+    AnalysisEngine engine = new AggregateAnalysisEngine_impl();
+    engine.initialize(desc, null);
+    return engine;
+  }
+
+  public static AnalysisEngine createAggregate(
+          List<Class<? extends AnalysisComponent>> componentClasses,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription,
+          Object... configurationParameters) throws ResourceInitializationException {
+    AnalysisEngineDescription desc = createAggregateDescription(componentClasses, typeSystem,
+            typePriorities, sofaMappings, configurationParameters, flowControllerDescription);
+    // create the AnalysisEngine, initialize it and return it
+    AnalysisEngine engine = new AggregateAnalysisEngine_impl();
+    engine.initialize(desc, null);
+    return engine;
+  }
+
+  public static AnalysisEngine createAggregate(AnalysisEngineDescription desc)
+          throws ResourceInitializationException {
+    // create the AnalysisEngine, initialize it and return it
+    return UIMAFramework.produceAnalysisEngine(desc, null, null);
+  }
+
+  public static AnalysisEngineDescription createAggregateDescription(
+          List<Class<? extends AnalysisComponent>> componentClasses,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, Object... configurationParameters)
+          throws ResourceInitializationException {
+
+    List<AnalysisEngineDescription> primitiveEngineDescriptions = new ArrayList<AnalysisEngineDescription>();
+    List<String> componentNames = new ArrayList<String>();
+
+    for (Class<? extends AnalysisComponent> componentClass : componentClasses) {
+      AnalysisEngineDescription primitiveDescription = createPrimitiveDescription(componentClass,
+              typeSystem, typePriorities, configurationParameters);
+      primitiveEngineDescriptions.add(primitiveDescription);
+      componentNames.add(componentClass.getName());
+    }
+    return createAggregateDescription(primitiveEngineDescriptions, componentNames, typeSystem,
+            typePriorities, sofaMappings, null);
+  }
+
+  public static AnalysisEngine createAggregate(
+          List<AnalysisEngineDescription> analysisEngineDescriptions, List<String> componentNames,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings) throws ResourceInitializationException {
+
+    AnalysisEngineDescription desc = createAggregateDescription(analysisEngineDescriptions,
+            componentNames, typeSystem, typePriorities, sofaMappings, null);
+    // create the AnalysisEngine, initialize it and return it
+    AnalysisEngine engine = new AggregateAnalysisEngine_impl();
+    engine.initialize(desc, null);
+    return engine;
+
+  }
+
+  public static AnalysisEngineDescription createAggregateDescription(
+          AnalysisEngineDescription... analysisEngineDescriptions)
+          throws ResourceInitializationException {
+    String[] names = new String[analysisEngineDescriptions.length];
+    int i = 0;
+    for (AnalysisEngineDescription aed : analysisEngineDescriptions) {
+      names[i] = aed.getImplementationName() + "-" + i;
+      i++;
+    }
+
+    return createAggregateDescription(asList(analysisEngineDescriptions), asList(names), null,
+            null, null, null);
+  }
+
+  public static AnalysisEngineDescription createAggregateDescription(
+          List<Class<? extends AnalysisComponent>> componentClasses,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription,
+          Object... configurationParameters) throws ResourceInitializationException {
+
+    List<AnalysisEngineDescription> primitiveEngineDescriptions = new ArrayList<AnalysisEngineDescription>();
+    List<String> componentNames = new ArrayList<String>();
+
+    for (Class<? extends AnalysisComponent> componentClass : componentClasses) {
+      AnalysisEngineDescription primitiveDescription = createPrimitiveDescription(componentClass,
+              typeSystem, typePriorities, configurationParameters);
+      primitiveEngineDescriptions.add(primitiveDescription);
+      componentNames.add(componentClass.getName());
+    }
+    return createAggregateDescription(primitiveEngineDescriptions, componentNames, typeSystem,
+            typePriorities, sofaMappings, flowControllerDescription);
+  }
+
+  public static AnalysisEngine createAggregate(
+          List<AnalysisEngineDescription> analysisEngineDescriptions, List<String> componentNames,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription)
+          throws ResourceInitializationException {
+
+    AnalysisEngineDescription desc = createAggregateDescription(analysisEngineDescriptions,
+            componentNames, typeSystem, typePriorities, sofaMappings, flowControllerDescription);
+    // create the AnalysisEngine, initialize it and return it
+    AnalysisEngine engine = new AggregateAnalysisEngine_impl();
+    engine.initialize(desc, null);
+    return engine;
+
+  }
+
+  /**
+   * A simplified factory method for creating an aggregate description for a given flow controller
+   * and a sequence of analysis engine descriptions
+   */
+  public static AnalysisEngineDescription createAggregateDescription(
+          FlowControllerDescription flowControllerDescription,
+          AnalysisEngineDescription... analysisEngineDescriptions)
+          throws ResourceInitializationException {
+    String[] names = new String[analysisEngineDescriptions.length];
+    int i = 0;
+    for (AnalysisEngineDescription aed : analysisEngineDescriptions) {
+      names[i] = aed.getImplementationName() + "-" + i;
+      i++;
+    }
+
+    return createAggregateDescription(asList(analysisEngineDescriptions), asList(names), null,
+            null, null, flowControllerDescription);
+  }
+
+  /**
+   * A factory method for creating an aggregate description.
+   */
+  public static AnalysisEngineDescription createAggregateDescription(
+          List<AnalysisEngineDescription> analysisEngineDescriptions, List<String> componentNames,
+          TypeSystemDescription typeSystem, TypePriorities typePriorities,
+          SofaMapping[] sofaMappings, FlowControllerDescription flowControllerDescription)
+          throws ResourceInitializationException {
+
+    // create the descriptor and set configuration parameters
+    AnalysisEngineDescription desc = new AnalysisEngineDescription_impl();
+    desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
+    desc.setPrimitive(false);
+
+    // if any of the aggregated analysis engines does not allow multiple
+    // deployment, then the
+    // aggregate engine may also not be multiply deployed
+    boolean allowMultipleDeploy = true;
+    for (AnalysisEngineDescription d : analysisEngineDescriptions) {
+      allowMultipleDeploy &= d.getAnalysisEngineMetaData().getOperationalProperties()
+              .isMultipleDeploymentAllowed();
+    }
+    desc.getAnalysisEngineMetaData().getOperationalProperties()
+            .setMultipleDeploymentAllowed(allowMultipleDeploy);
+
+    List<String> flowNames = new ArrayList<String>();
+
+    for (int i = 0; i < analysisEngineDescriptions.size(); i++) {
+      AnalysisEngineDescription aed = analysisEngineDescriptions.get(i);
+      String componentName = componentNames.get(i);
+      desc.getDelegateAnalysisEngineSpecifiersWithImports().put(componentName, aed);
+      flowNames.add(componentName);
+    }
+
+    if (flowControllerDescription != null) {
+      FlowControllerDeclaration flowControllerDeclaration = new FlowControllerDeclaration_impl();
+      flowControllerDeclaration.setSpecifier(flowControllerDescription);
+      desc.setFlowControllerDeclaration(flowControllerDeclaration);
+    }
+
+    FixedFlow fixedFlow = new FixedFlow_impl();
+    fixedFlow.setFixedFlow(flowNames.toArray(new String[flowNames.size()]));
+    desc.getAnalysisEngineMetaData().setFlowConstraints(fixedFlow);
+
+    if (typePriorities != null) {
+      desc.getAnalysisEngineMetaData().setTypePriorities(typePriorities);
+    }
+
+    if (sofaMappings != null) {
+      desc.setSofaMappings(sofaMappings);
+    }
+
+    return desc;
+  }
+
+  /**
+   * Creates an AnalysisEngine from the given descriptor, and uses the engine to process the file or
+   * text.
+   * 
+   * @param descriptorFileName
+   *          The fully qualified, Java-style, dotted name of the XML descriptor file.
+   * @param fileNameOrText
+   *          Either the path of a file to be loaded, or a string to use as the text. If the string
+   *          given is not a valid path in the file system, it will be assumed to be text.
+   * @return A JCas object containing the processed document.
+   */
+  public static JCas process(String descriptorFileName, String fileNameOrText) throws IOException,
+          UIMAException {
+    AnalysisEngine engine = createAnalysisEngine(descriptorFileName);
+    JCas jCas = process(engine, fileNameOrText);
+    engine.collectionProcessComplete();
+    return jCas;
+  }
+
+  /**
+   * Processes the file or text with the given AnalysisEngine.
+   * 
+   * @param analysisEngine
+   *          The AnalysisEngine object to process the text.
+   * @param fileNameOrText
+   *          Either the path of a file to be loaded, or a string to use as the text. If the string
+   *          given is not a valid path in the file system, it will be assumed to be text.
+   * @return A JCas object containing the processed document.
+   */
+  public static JCas process(AnalysisEngine analysisEngine, String fileNameOrText)
+          throws IOException, UIMAException {
+    JCas jCas = analysisEngine.newJCas();
+    process(jCas, analysisEngine, fileNameOrText);
+    return jCas;
+  }
+
+  /**
+   * Provides a convenience method for running an AnalysisEngine over some text with a given JCas.
+   */
+  public static void process(JCas jCas, AnalysisEngine analysisEngine, String fileNameOrText)
+          throws IOException, UIMAException {
+    File textFile = new File(fileNameOrText);
+    String text;
+    if (textFile.exists()) {
+      text = FileUtils.file2String(textFile);
+    } else {
+      text = fileNameOrText;
+    }
+
+    jCas.setDocumentText(text);
+    analysisEngine.process(jCas);
+  }
 
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnnotationFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnnotationFactory.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnnotationFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnnotationFactory.java Thu Jan 10 23:12:33 2013
@@ -27,25 +27,24 @@ import org.apache.uima.jcas.tcas.Annotat
  * 
  */
 public final class AnnotationFactory {
-	private AnnotationFactory() {
-		// This class is not meant to be instantiated
-	}
+  private AnnotationFactory() {
+    // This class is not meant to be instantiated
+  }
 
-	/**
-	 * Provides a convenient way to create an annotation and addToIndexes in a single line.
-	 */
-	public static <T extends Annotation> T createAnnotation(JCas jCas, int begin, int end,
-			Class<T> cls) throws UIMAException {
-		T annotation;
-		try {
-			annotation = cls.getConstructor(JCas.class, Integer.TYPE, Integer.TYPE).newInstance(
-					jCas, begin, end);
-		}
-		catch (Exception e) {
-			throw new UIMAException(e);
-		}
-		annotation.addToIndexes();
-		return annotation;
-	}
+  /**
+   * Provides a convenient way to create an annotation and addToIndexes in a single line.
+   */
+  public static <T extends Annotation> T createAnnotation(JCas jCas, int begin, int end,
+          Class<T> cls) throws UIMAException {
+    T annotation;
+    try {
+      annotation = cls.getConstructor(JCas.class, Integer.TYPE, Integer.TYPE).newInstance(jCas,
+              begin, end);
+    } catch (Exception e) {
+      throw new UIMAException(e);
+    }
+    annotation.addToIndexes();
+    return annotation;
+  }
 
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CapabilityFactory.java Thu Jan 10 23:12:33 2013
@@ -32,68 +32,66 @@ import org.apache.uima.resource.metadata
  */
 
 public final class CapabilityFactory {
-	private CapabilityFactory() {
-		// This class is not meant to be instantiated
-	}
-
-	/**
-	 * Creates a single capability consisting of the information in the {@link SofaCapability} and
-	 * {@link TypeCapability} annotations for the class.
-	 */
-	public static Capability createCapability(Class<?> componentClass) {
-		if (!componentClass.isAnnotationPresent(SofaCapability.class)
-				&& !componentClass.isAnnotationPresent(TypeCapability.class)) {
-			return null;
-		}
-
-		Capability capability = new Capability_impl();
-
-		if (componentClass.isAnnotationPresent(SofaCapability.class)) {
-			SofaCapability annotation = componentClass.getAnnotation(SofaCapability.class);
-			String[] inputSofas = annotation.inputSofas();
-			if (inputSofas.length == 1 && inputSofas[0].equals(SofaCapability.NO_DEFAULT_VALUE)) {
-				inputSofas = new String[0];
-			}
-			capability.setInputSofas(inputSofas);
-
-			String[] outputSofas = annotation.outputSofas();
-			if (outputSofas.length == 1 && outputSofas[0].equals(SofaCapability.NO_DEFAULT_VALUE)) {
-				outputSofas = new String[0];
-			}
-			capability.setOutputSofas(outputSofas);
-		}
-
-		if (componentClass.isAnnotationPresent(TypeCapability.class)) {
-			TypeCapability annotation = componentClass.getAnnotation(TypeCapability.class);
-			String[] inputTypesOrFeatureNames = annotation.inputs();
-			capability.setInputs(createTypesOrFeatures(inputTypesOrFeatureNames));
-			String[] outputTypesOrFeatureNames = annotation.outputs();
-			capability.setOutputs(createTypesOrFeatures(outputTypesOrFeatureNames));
-		}
-
-		return capability;
-	}
-
-	private static TypeOrFeature[] createTypesOrFeatures(String[] typesOrFeatureNames) {
-		if (typesOrFeatureNames.length == 1
-				&& typesOrFeatureNames[0].equals(TypeCapability.NO_DEFAULT_VALUE)) {
-			return new TypeOrFeature[0];
-		}
-		else {
-			List<TypeOrFeature> typesOrFeatures = new ArrayList<TypeOrFeature>();
-			for (String name : typesOrFeatureNames) {
-				TypeOrFeature tof = new TypeOrFeature_impl();
-				tof.setName(name);
-				if (name.indexOf(":") == -1) {
-					tof.setType(true);
-				}
-				else {
-					tof.setType(false);
-				}
-				typesOrFeatures.add(tof);
-			}
-			return typesOrFeatures.toArray(new TypeOrFeature[typesOrFeatures.size()]);
-		}
+  private CapabilityFactory() {
+    // This class is not meant to be instantiated
+  }
+
+  /**
+   * Creates a single capability consisting of the information in the {@link SofaCapability} and
+   * {@link TypeCapability} annotations for the class.
+   */
+  public static Capability createCapability(Class<?> componentClass) {
+    if (!componentClass.isAnnotationPresent(SofaCapability.class)
+            && !componentClass.isAnnotationPresent(TypeCapability.class)) {
+      return null;
+    }
+
+    Capability capability = new Capability_impl();
+
+    if (componentClass.isAnnotationPresent(SofaCapability.class)) {
+      SofaCapability annotation = componentClass.getAnnotation(SofaCapability.class);
+      String[] inputSofas = annotation.inputSofas();
+      if (inputSofas.length == 1 && inputSofas[0].equals(SofaCapability.NO_DEFAULT_VALUE)) {
+        inputSofas = new String[0];
+      }
+      capability.setInputSofas(inputSofas);
+
+      String[] outputSofas = annotation.outputSofas();
+      if (outputSofas.length == 1 && outputSofas[0].equals(SofaCapability.NO_DEFAULT_VALUE)) {
+        outputSofas = new String[0];
+      }
+      capability.setOutputSofas(outputSofas);
+    }
+
+    if (componentClass.isAnnotationPresent(TypeCapability.class)) {
+      TypeCapability annotation = componentClass.getAnnotation(TypeCapability.class);
+      String[] inputTypesOrFeatureNames = annotation.inputs();
+      capability.setInputs(createTypesOrFeatures(inputTypesOrFeatureNames));
+      String[] outputTypesOrFeatureNames = annotation.outputs();
+      capability.setOutputs(createTypesOrFeatures(outputTypesOrFeatureNames));
+    }
+
+    return capability;
+  }
+
+  private static TypeOrFeature[] createTypesOrFeatures(String[] typesOrFeatureNames) {
+    if (typesOrFeatureNames.length == 1
+            && typesOrFeatureNames[0].equals(TypeCapability.NO_DEFAULT_VALUE)) {
+      return new TypeOrFeature[0];
+    } else {
+      List<TypeOrFeature> typesOrFeatures = new ArrayList<TypeOrFeature>();
+      for (String name : typesOrFeatureNames) {
+        TypeOrFeature tof = new TypeOrFeature_impl();
+        tof.setName(name);
+        if (name.indexOf(":") == -1) {
+          tof.setType(true);
+        } else {
+          tof.setType(false);
+        }
+        typesOrFeatures.add(tof);
+      }
+      return typesOrFeatures.toArray(new TypeOrFeature[typesOrFeatures.size()]);
+    }
 
-	}
+  }
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java?rev=1431721&r1=1431720&r2=1431721&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java Thu Jan 10 23:12:33 2013
@@ -55,271 +55,265 @@ import org.apache.uima.resource.metadata
  */
 public final class CollectionReaderFactory {
 
-	private CollectionReaderFactory() {
-		// This class is not meant to be instantiated
-	}
-
-	/**
-	 * Create a CollectionReader from an XML descriptor file and a set of configuration parameters.
-	 *
-	 * @param descriptorPath
-	 *            The path to the XML descriptor file.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The CollectionReader created from the XML descriptor and the configuration
-	 *         parameters.
-	 */
-	public static CollectionReader createCollectionReaderFromPath(String descriptorPath,
-			Object... configurationData) throws UIMAException, IOException {
-		ResourceCreationSpecifier specifier = createResourceCreationSpecifier(descriptorPath,
-				configurationData);
-		return UIMAFramework.produceCollectionReader(specifier);
-	}
-
-	/**
-	 * Get a CollectionReader from the name (Java-style, dotted) of an XML descriptor file, and a
-	 * set of configuration parameters.
-	 *
-	 * @param descriptorName
-	 *            The fully qualified, Java-style, dotted name of the XML descriptor file.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
-	 */
-
-	public static CollectionReader createCollectionReader(String descriptorName,
-			Object... configurationData) throws UIMAException, IOException {
-		Import imp = UIMAFramework.getResourceSpecifierFactory().createImport();
-		imp.setName(descriptorName);
-		URL url = imp.findAbsoluteUrl(UIMAFramework.newDefaultResourceManager());
-		ResourceSpecifier specifier = createResourceCreationSpecifier(url, configurationData);
-		return UIMAFramework.produceCollectionReader(specifier);
-	}
-
-	/**
-	 * Get a CollectionReader from a CollectionReader class, a type system, and a set of
-	 * configuration parameters. The type system is detected automatically using
-	 * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
-	 *
-	 * @param readerClass
-	 *            The class of the CollectionReader to be created.
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The CollectionReader created and initialized with the type system and configuration
-	 *         parameters.
-	 */
-	public static CollectionReader createCollectionReader(
-			Class<? extends CollectionReader> readerClass, Object... configurationData)
-			throws ResourceInitializationException {
-		TypeSystemDescription tsd = createTypeSystemDescription();
-		return createCollectionReader(readerClass, tsd, (TypePriorities) null, configurationData);
-	}
-
-	/**
-	 * Get a CollectionReader from a CollectionReader class, a type system, and a set of
-	 * configuration parameters.
-	 *
-	 * @param readerClass
-	 *            The class of the CollectionReader to be created.
-	 * @param typeSystem
-	 *            A description of the types used by the CollectionReader (may be null).
-	 * @param configurationData
-	 *            Any additional configuration parameters to be set. These should be supplied as
-	 *            (name, value) pairs, so there should always be an even number of parameters.
-	 * @return The CollectionReader created and initialized with the type system and configuration
-	 *         parameters.
-	 */
-	public static CollectionReader createCollectionReader(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			Object... configurationData) throws ResourceInitializationException {
-		return createCollectionReader(readerClass, typeSystem, (TypePriorities) null,
-				configurationData);
-	}
-
-	public static CollectionReader createCollectionReader(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			String[] prioritizedTypeNames, Object... configurationData)
-			throws ResourceInitializationException {
-		TypePriorities typePriorities = createTypePriorities(prioritizedTypeNames);
-		return createCollectionReader(readerClass, typeSystem, typePriorities, configurationData);
-	}
-
-	public static CollectionReader createCollectionReader(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, Object... configurationData)
-			throws ResourceInitializationException {
-		CollectionReaderDescription desc = createDescription(readerClass, typeSystem,
-				typePriorities, configurationData);
-		return createCollectionReader(desc);
-	}
-
-	/**
-	 * This method creates a CollectionReader from a CollectionReaderDescription adding additional
-	 * configuration parameter data as desired
-	 *
-	 * @param configurationData
-	 *            configuration parameter data as name value pairs. Will override values already set
-	 *            in the description.
-	 */
-	public static CollectionReader createCollectionReader(CollectionReaderDescription desc,
-			Object... configurationData) throws ResourceInitializationException {
-		CollectionReaderDescription descClone = (CollectionReaderDescription) desc.clone();
-		ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
-		return UIMAFramework.produceCollectionReader(descClone);
-	}
-
-	/**
-	 * A simple factory method for creating a CollectionReaderDescription with a given class, type
-	 * system description, and configuration data The type system is detected automatically using
-	 * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
-	 */
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, Object... configurationData)
-			throws ResourceInitializationException {
-		TypeSystemDescription tsd = createTypeSystemDescription();
-		return createDescription(readerClass, tsd, (TypePriorities) null, configurationData);
-	}
-
-	/**
-	 * A simple factory method for creating a CollectionReaderDescription with a given class, type
-	 * system description, and configuration data
-	 */
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			Object... configurationData) throws ResourceInitializationException {
-		return createDescription(readerClass, typeSystem, (TypePriorities) null, configurationData);
-	}
-
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			String[] prioritizedTypeNames, Object... configurationData)
-			throws ResourceInitializationException {
-		TypePriorities typePriorities = createTypePriorities(prioritizedTypeNames);
-		return createDescription(readerClass, typeSystem, typePriorities, configurationData);
-	}
-
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, Object... configurationData)
-			throws ResourceInitializationException {
-		return createDescription(readerClass, typeSystem, typePriorities, (FsIndexCollection) null,
-				(Capability[]) null, configurationData);
-	}
-
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			Object... configurationData) throws ResourceInitializationException {
-
-		ensureParametersComeInPairs(configurationData);
-
-		// Extract ExternalResourceDescriptions from configurationData
-		// <ParamterName, ExternalResourceDescription> will be stored in this map
-		Map<String, ExternalResourceDescription> externalResources = 
-				ExternalResourceFactory.extractExternalResourceParameters(configurationData);
-
-		// Create description normally
-		ConfigurationData cdata = createConfigurationData(configurationData);
-		return createDescription(readerClass, typeSystem, typePriorities, indexes, capabilities,
-				cdata.configurationParameters, cdata.configurationValues, externalResources);
-	}
-
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			ConfigurationParameter[] configurationParameters, Object[] configurationValues)
-			throws ResourceInitializationException {
-		return createDescription(readerClass, typeSystem, typePriorities, indexes, capabilities,
-				configurationParameters, configurationValues, null);
-	}
-	
-	/**
-	 * The factory method for creating CollectionReaderDescription objects for a given class,
-	 * TypeSystemDescription, TypePriorities, capabilities, and configuration data
-	 */
-	public static CollectionReaderDescription createDescription(
-			Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
-			TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
-			ConfigurationParameter[] configurationParameters, Object[] configurationValues,
-			Map<String, ExternalResourceDescription> externalResources)
-			throws ResourceInitializationException {
-		// create the descriptor and set configuration parameters
-		CollectionReaderDescription desc = UIMAFramework.getResourceSpecifierFactory()
-				.createCollectionReaderDescription();
-		desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
-		desc.setImplementationName(readerClass.getName());
-
-		ConfigurationData reflectedConfigurationData = createConfigurationData(readerClass);
-		ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-				reflectedConfigurationData.configurationParameters,
-				reflectedConfigurationData.configurationValues);
-		if (configurationParameters != null) {
-			ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-					configurationParameters, configurationValues);
-		}
-
-		// set the type system
-		if (typeSystem != null) {
-			desc.getCollectionReaderMetaData().setTypeSystem(typeSystem);
-		}
-
-		if (typePriorities != null) {
-			desc.getCollectionReaderMetaData().setTypePriorities(typePriorities);
-		}
-
-		// set indexes from the argument to this call or from the annotation present in the
-		// component if the argument is null
-		if (indexes != null) {
-			desc.getCollectionReaderMetaData().setFsIndexCollection(indexes);
-		}
-		else {
-			desc.getCollectionReaderMetaData().setFsIndexCollection(
-					createFsIndexCollection(readerClass));
-		}
-
-		// set capabilities from the argument to this call or from the annotation present in the
-		// component if the argument is null
-		if (capabilities != null) {
-			desc.getCollectionReaderMetaData().setCapabilities(capabilities);
-		}
-		else {
-			Capability capability = CapabilityFactory.createCapability(readerClass);
-			if (capability != null) {
-				desc.getCollectionReaderMetaData().setCapabilities(new Capability[] { capability });
-			}
-		}
-		
-		// Extract external resource dependencies
-		Collection<ExternalResourceDependency> deps = ExternalResourceInitializer
-				.getResourceDeclarations(readerClass).values();
-		desc.setExternalResourceDependencies(deps.toArray(new ExternalResourceDependency[deps
-				.size()]));
-
-		// Bind External Resources
-		if (externalResources != null) {
-			for (Entry<String, ExternalResourceDescription> e : externalResources.entrySet()) {
-				bindExternalResource(desc, e.getKey(), e.getValue());
-			}
-		}
-
-		return desc;
-	}
-
-	/**
-	 * Since the configuration parameters of a CollectionReader with the given configuration
-	 * parameter data
-	 *
-	 * @deprecated use {@link ResourceCreationSpecifierFactory#setConfigurationParameters}
-	 */
-	@Deprecated
-	public static void setConfigurationParameters(
-			CollectionReaderDescription collectionReaderDescription, Object... configurationData)
-			throws ResourceInitializationException {
-		ResourceCreationSpecifierFactory.setConfigurationParameters(collectionReaderDescription,
-				configurationData);
-	}
+  private CollectionReaderFactory() {
+    // This class is not meant to be instantiated
+  }
+
+  /**
+   * Create a CollectionReader from an XML descriptor file and a set of configuration parameters.
+   * 
+   * @param descriptorPath
+   *          The path to the XML descriptor file.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The CollectionReader created from the XML descriptor and the configuration parameters.
+   */
+  public static CollectionReader createCollectionReaderFromPath(String descriptorPath,
+          Object... configurationData) throws UIMAException, IOException {
+    ResourceCreationSpecifier specifier = createResourceCreationSpecifier(descriptorPath,
+            configurationData);
+    return UIMAFramework.produceCollectionReader(specifier);
+  }
+
+  /**
+   * Get a CollectionReader from the name (Java-style, dotted) of an XML descriptor file, and a set
+   * of configuration parameters.
+   * 
+   * @param descriptorName
+   *          The fully qualified, Java-style, dotted name of the XML descriptor file.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The AnalysisEngine created from the XML descriptor and the configuration parameters.
+   */
+
+  public static CollectionReader createCollectionReader(String descriptorName,
+          Object... configurationData) throws UIMAException, IOException {
+    Import imp = UIMAFramework.getResourceSpecifierFactory().createImport();
+    imp.setName(descriptorName);
+    URL url = imp.findAbsoluteUrl(UIMAFramework.newDefaultResourceManager());
+    ResourceSpecifier specifier = createResourceCreationSpecifier(url, configurationData);
+    return UIMAFramework.produceCollectionReader(specifier);
+  }
+
+  /**
+   * Get a CollectionReader from a CollectionReader class, a type system, and a set of configuration
+   * parameters. The type system is detected automatically using
+   * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
+   * 
+   * @param readerClass
+   *          The class of the CollectionReader to be created.
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The CollectionReader created and initialized with the type system and configuration
+   *         parameters.
+   */
+  public static CollectionReader createCollectionReader(
+          Class<? extends CollectionReader> readerClass, Object... configurationData)
+          throws ResourceInitializationException {
+    TypeSystemDescription tsd = createTypeSystemDescription();
+    return createCollectionReader(readerClass, tsd, (TypePriorities) null, configurationData);
+  }
+
+  /**
+   * Get a CollectionReader from a CollectionReader class, a type system, and a set of configuration
+   * parameters.
+   * 
+   * @param readerClass
+   *          The class of the CollectionReader to be created.
+   * @param typeSystem
+   *          A description of the types used by the CollectionReader (may be null).
+   * @param configurationData
+   *          Any additional configuration parameters to be set. These should be supplied as (name,
+   *          value) pairs, so there should always be an even number of parameters.
+   * @return The CollectionReader created and initialized with the type system and configuration
+   *         parameters.
+   */
+  public static CollectionReader createCollectionReader(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          Object... configurationData) throws ResourceInitializationException {
+    return createCollectionReader(readerClass, typeSystem, (TypePriorities) null, configurationData);
+  }
+
+  public static CollectionReader createCollectionReader(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          String[] prioritizedTypeNames, Object... configurationData)
+          throws ResourceInitializationException {
+    TypePriorities typePriorities = createTypePriorities(prioritizedTypeNames);
+    return createCollectionReader(readerClass, typeSystem, typePriorities, configurationData);
+  }
+
+  public static CollectionReader createCollectionReader(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, Object... configurationData)
+          throws ResourceInitializationException {
+    CollectionReaderDescription desc = createDescription(readerClass, typeSystem, typePriorities,
+            configurationData);
+    return createCollectionReader(desc);
+  }
+
+  /**
+   * This method creates a CollectionReader from a CollectionReaderDescription adding additional
+   * configuration parameter data as desired
+   * 
+   * @param configurationData
+   *          configuration parameter data as name value pairs. Will override values already set in
+   *          the description.
+   */
+  public static CollectionReader createCollectionReader(CollectionReaderDescription desc,
+          Object... configurationData) throws ResourceInitializationException {
+    CollectionReaderDescription descClone = (CollectionReaderDescription) desc.clone();
+    ResourceCreationSpecifierFactory.setConfigurationParameters(descClone, configurationData);
+    return UIMAFramework.produceCollectionReader(descClone);
+  }
+
+  /**
+   * A simple factory method for creating a CollectionReaderDescription with a given class, type
+   * system description, and configuration data The type system is detected automatically using
+   * {@link TypeSystemDescriptionFactory#createTypeSystemDescription()}.
+   */
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, Object... configurationData)
+          throws ResourceInitializationException {
+    TypeSystemDescription tsd = createTypeSystemDescription();
+    return createDescription(readerClass, tsd, (TypePriorities) null, configurationData);
+  }
+
+  /**
+   * A simple factory method for creating a CollectionReaderDescription with a given class, type
+   * system description, and configuration data
+   */
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          Object... configurationData) throws ResourceInitializationException {
+    return createDescription(readerClass, typeSystem, (TypePriorities) null, configurationData);
+  }
+
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          String[] prioritizedTypeNames, Object... configurationData)
+          throws ResourceInitializationException {
+    TypePriorities typePriorities = createTypePriorities(prioritizedTypeNames);
+    return createDescription(readerClass, typeSystem, typePriorities, configurationData);
+  }
+
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, Object... configurationData)
+          throws ResourceInitializationException {
+    return createDescription(readerClass, typeSystem, typePriorities, (FsIndexCollection) null,
+            (Capability[]) null, configurationData);
+  }
+
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          Object... configurationData) throws ResourceInitializationException {
+
+    ensureParametersComeInPairs(configurationData);
+
+    // Extract ExternalResourceDescriptions from configurationData
+    // <ParamterName, ExternalResourceDescription> will be stored in this map
+    Map<String, ExternalResourceDescription> externalResources = ExternalResourceFactory
+            .extractExternalResourceParameters(configurationData);
+
+    // Create description normally
+    ConfigurationData cdata = createConfigurationData(configurationData);
+    return createDescription(readerClass, typeSystem, typePriorities, indexes, capabilities,
+            cdata.configurationParameters, cdata.configurationValues, externalResources);
+  }
+
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          ConfigurationParameter[] configurationParameters, Object[] configurationValues)
+          throws ResourceInitializationException {
+    return createDescription(readerClass, typeSystem, typePriorities, indexes, capabilities,
+            configurationParameters, configurationValues, null);
+  }
+
+  /**
+   * The factory method for creating CollectionReaderDescription objects for a given class,
+   * TypeSystemDescription, TypePriorities, capabilities, and configuration data
+   */
+  public static CollectionReaderDescription createDescription(
+          Class<? extends CollectionReader> readerClass, TypeSystemDescription typeSystem,
+          TypePriorities typePriorities, FsIndexCollection indexes, Capability[] capabilities,
+          ConfigurationParameter[] configurationParameters, Object[] configurationValues,
+          Map<String, ExternalResourceDescription> externalResources)
+          throws ResourceInitializationException {
+    // create the descriptor and set configuration parameters
+    CollectionReaderDescription desc = UIMAFramework.getResourceSpecifierFactory()
+            .createCollectionReaderDescription();
+    desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
+    desc.setImplementationName(readerClass.getName());
+
+    ConfigurationData reflectedConfigurationData = createConfigurationData(readerClass);
+    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
+            reflectedConfigurationData.configurationParameters,
+            reflectedConfigurationData.configurationValues);
+    if (configurationParameters != null) {
+      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
+              configurationValues);
+    }
+
+    // set the type system
+    if (typeSystem != null) {
+      desc.getCollectionReaderMetaData().setTypeSystem(typeSystem);
+    }
+
+    if (typePriorities != null) {
+      desc.getCollectionReaderMetaData().setTypePriorities(typePriorities);
+    }
+
+    // set indexes from the argument to this call or from the annotation present in the
+    // component if the argument is null
+    if (indexes != null) {
+      desc.getCollectionReaderMetaData().setFsIndexCollection(indexes);
+    } else {
+      desc.getCollectionReaderMetaData().setFsIndexCollection(createFsIndexCollection(readerClass));
+    }
+
+    // set capabilities from the argument to this call or from the annotation present in the
+    // component if the argument is null
+    if (capabilities != null) {
+      desc.getCollectionReaderMetaData().setCapabilities(capabilities);
+    } else {
+      Capability capability = CapabilityFactory.createCapability(readerClass);
+      if (capability != null) {
+        desc.getCollectionReaderMetaData().setCapabilities(new Capability[] { capability });
+      }
+    }
+
+    // Extract external resource dependencies
+    Collection<ExternalResourceDependency> deps = ExternalResourceInitializer
+            .getResourceDeclarations(readerClass).values();
+    desc.setExternalResourceDependencies(deps.toArray(new ExternalResourceDependency[deps.size()]));
+
+    // Bind External Resources
+    if (externalResources != null) {
+      for (Entry<String, ExternalResourceDescription> e : externalResources.entrySet()) {
+        bindExternalResource(desc, e.getKey(), e.getValue());
+      }
+    }
+
+    return desc;
+  }
+
+  /**
+   * Since the configuration parameters of a CollectionReader with the given configuration parameter
+   * data
+   * 
+   * @deprecated use {@link ResourceCreationSpecifierFactory#setConfigurationParameters}
+   */
+  @Deprecated
+  public static void setConfigurationParameters(
+          CollectionReaderDescription collectionReaderDescription, Object... configurationData)
+          throws ResourceInitializationException {
+    ResourceCreationSpecifierFactory.setConfigurationParameters(collectionReaderDescription,
+            configurationData);
+  }
 
 }