You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by al...@apache.org on 2007/03/21 16:13:03 UTC
svn commit: r520910 - in /incubator/uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/ main/java/org/apache/uima/impl/
main/java/org/apache/uima/resource/
main/java/org/apache/uima/resource/impl/ main/java/org/apache/uima/util/
main/java/org/a...
Author: alally
Date: Wed Mar 21 08:13:00 2007
New Revision: 520910
URL: http://svn.apache.org/viewvc?view=rev&rev=520910
Log:
Added support for CustomResourceSpecifier.
UIMA-352: https://issues.apache.org/jira/browse/UIMA-352
Added:
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/CustomResourceFactory_impl.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CustomResourceSpecifier.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CustomResourceSpecifier_impl.java
incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/CustomResourceSpecifierFactory_implTest.java
incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/SomeCustomResource.java
incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/XmlParserTest/TestCustomResourceSpecifier.xml
Modified:
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/ResourceSpecifierFactory.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/ResourceSpecifierFactory_impl.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/XMLParser.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/factoryConfig.xml
incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/resourceSpecifierSchema.xsd
incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/impl/XMLParser_implTest.java
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/ResourceSpecifierFactory.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/ResourceSpecifierFactory.java?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/ResourceSpecifierFactory.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/ResourceSpecifierFactory.java Wed Mar 21 08:13:00 2007
@@ -47,6 +47,7 @@
import org.apache.uima.collection.metadata.CpeInclude;
import org.apache.uima.collection.metadata.OutputQueue;
import org.apache.uima.flow.FlowControllerDescription;
+import org.apache.uima.resource.CustomResourceSpecifier;
import org.apache.uima.resource.ExternalResourceDependency;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.FileLanguageResourceSpecifier;
@@ -419,6 +420,13 @@
*/
public FlowControllerDeclaration createFlowControllerDeclaration();
+ /**
+ * Creates a <code>CustomResourceSpecifier</code>.
+ *
+ * @return an instance of an object implementing <code>CustomResourceSpecifier</code>.
+ */
+ public CustomResourceSpecifier createCustomResourceSpecifier();
+
/**
* Creates a <code>FlowControllerDescription</code>
*
Added: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/CustomResourceFactory_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/CustomResourceFactory_impl.java?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/CustomResourceFactory_impl.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/CustomResourceFactory_impl.java Wed Mar 21 08:13:00 2007
@@ -0,0 +1,101 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.impl;
+
+import java.util.Map;
+
+import org.apache.uima.ResourceFactory;
+import org.apache.uima.resource.CustomResourceSpecifier;
+import org.apache.uima.resource.Resource;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.ResourceManager;
+import org.apache.uima.resource.ResourceSpecifier;
+
+/**
+ * Resource Factory that handles {@link CustomResourceSpecifier} elements.
+ */
+public class CustomResourceFactory_impl implements ResourceFactory {
+ /**
+ * @see org.apache.uima.ResourceFactory#produceResource(java.lang.Class,
+ * org.apache.uima.resource.ResourceSpecifier, java.util.Map)
+ */
+ public Resource produceResource(Class aResourceClass, ResourceSpecifier aSpecifier,
+ Map aAdditionalParams) throws ResourceInitializationException {
+
+ if (aSpecifier instanceof CustomResourceSpecifier) {
+ String className = ((CustomResourceSpecifier)aSpecifier).getResourceClassName();
+ //check additional params map for ResourceManager, and use the UIMA extension ClassLoader
+ //if one exists
+ ClassLoader loader = null;
+ ResourceManager resMgr = (ResourceManager)aAdditionalParams.get(Resource.PARAM_RESOURCE_MANAGER);
+ if (resMgr != null) {
+ resMgr.getExtensionClassLoader();
+ }
+ if (loader == null) {
+ loader = this.getClass().getClassLoader();
+ }
+
+ //load the Resourceclass
+ Class resourceClass;
+ try {
+ resourceClass = Class.forName(className, true, loader);
+ } catch (ClassNotFoundException e) {
+ throw new ResourceInitializationException(
+ ResourceInitializationException.CLASS_NOT_FOUND, new Object[] { className,
+ aSpecifier.getSourceUrlString() }, e);
+ }
+
+ //check that the class implements the required interface
+ if (!aResourceClass.isAssignableFrom(resourceClass)) {
+ throw new ResourceInitializationException(
+ ResourceInitializationException.RESOURCE_DOES_NOT_IMPLEMENT_INTERFACE,
+ new Object[] { className, aResourceClass.getName(),
+ aSpecifier.getSourceUrlString() });
+ }
+
+ // instantiate this Resource Class
+ Resource resource;
+ try {
+ resource = (Resource) resourceClass.newInstance();
+ } catch (InstantiationException e) {
+ throw new ResourceInitializationException(
+ ResourceInitializationException.COULD_NOT_INSTANTIATE, new Object[] { className,
+ aSpecifier.getSourceUrlString() }, e);
+ } catch (IllegalAccessException e) {
+ throw new ResourceInitializationException(
+ ResourceInitializationException.COULD_NOT_INSTANTIATE, new Object[] { className,
+ aSpecifier.getSourceUrlString() }, e);
+ }
+ // attempt to initialize it
+ if (resource.initialize(aSpecifier, aAdditionalParams)) {
+ // success!
+ return resource;
+ } else
+ // failure, for some unknown reason :(
+ {
+ throw new ResourceInitializationException(
+ ResourceInitializationException.ERROR_INITIALIZING_FROM_DESCRIPTOR, new Object[] {
+ className, aSpecifier.getSourceUrlString() });
+ }
+ }
+ //unsupported ResourceSpecifier type
+ return null;
+ }
+}
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/ResourceSpecifierFactory_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/ResourceSpecifierFactory_impl.java?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/ResourceSpecifierFactory_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/impl/ResourceSpecifierFactory_impl.java Wed Mar 21 08:13:00 2007
@@ -56,6 +56,7 @@
import org.apache.uima.collection.metadata.CpeSofaMappings;
import org.apache.uima.collection.metadata.OutputQueue;
import org.apache.uima.flow.FlowControllerDescription;
+import org.apache.uima.resource.CustomResourceSpecifier;
import org.apache.uima.resource.ExternalResourceDependency;
import org.apache.uima.resource.ExternalResourceDescription;
import org.apache.uima.resource.FileLanguageResourceSpecifier;
@@ -436,10 +437,14 @@
public FlowControllerDeclaration createFlowControllerDeclaration() {
return (FlowControllerDeclaration) createObject(FlowControllerDeclaration.class);
}
-
+
public FlowControllerDescription createFlowControllerDescription() {
return (FlowControllerDescription) createObject(FlowControllerDescription.class);
}
+
+ public CustomResourceSpecifier createCustomResourceSpecifier() {
+ return (CustomResourceSpecifier) createObject(CustomResourceSpecifier.class);
+ }
public CpeCollectionReaderCasInitializer createCasInitializer() {
return (CpeCollectionReaderCasInitializer) createObject(CpeCollectionReaderCasInitializer.class);
Added: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CustomResourceSpecifier.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CustomResourceSpecifier.java?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CustomResourceSpecifier.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/CustomResourceSpecifier.java Wed Mar 21 08:13:00 2007
@@ -0,0 +1,63 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.resource;
+
+
+/**
+ * A type of <code>ResourceSpecifier</code> that specifically names the
+ * Java class that should be created. This allows users to plug in their own
+ * custom resource implementations.
+ */
+public interface CustomResourceSpecifier extends ResourceSpecifier {
+
+ /**
+ * Retrieves the name of the Java class that will be instantiated when
+ * one of the <code>UIMAFramework.produceXXX(ResourceSpecifier,...)</code> methods is called
+ * with this resource specifier.
+ *
+ * @return a fully-qualified Java class name. The named class should implement {@link Resource}.
+ */
+ public String getResourceClassName();
+
+ /**
+ * Setss the name of the Java class that will be instantiated when
+ * one of the <code>UIMAFramework.produceXXX(ResourceSpecifier,...)</code> methods is called
+ * with this resource specifier.
+ *
+ * @param aResourceClassName a fully-qualified Java class name. The named class should implement {@link Resource}.
+ */
+ public void setResourceClassName(String aResourceClassName);
+
+
+ /**
+ * Gets parameters that may be read by the custom resource class when it is initialized.
+ *
+ * @return an array of parameters. This will never return <code>null</code>.
+ */
+ public Parameter[] getParameters();
+
+ /**
+ * Sets parameters that may be read by the custom resource class when it is initialized.
+ *
+ * @param parameters the Parameters to set.
+ */
+ public void setParameters(Parameter[] parameters);
+
+}
Added: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CustomResourceSpecifier_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CustomResourceSpecifier_impl.java?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CustomResourceSpecifier_impl.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/CustomResourceSpecifier_impl.java Wed Mar 21 08:13:00 2007
@@ -0,0 +1,80 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.resource.impl;
+
+import org.apache.uima.resource.CustomResourceSpecifier;
+import org.apache.uima.resource.Parameter;
+import org.apache.uima.resource.metadata.impl.MetaDataObject_impl;
+import org.apache.uima.resource.metadata.impl.PropertyXmlInfo;
+import org.apache.uima.resource.metadata.impl.XmlizationInfo;
+
+/**
+ * Implementation of {@link CustomResourceSpecifier}.
+ */
+public class CustomResourceSpecifier_impl extends MetaDataObject_impl implements
+ CustomResourceSpecifier {
+ private static final long serialVersionUID = 8922306013278525153L;
+
+ private Parameter[] mParameters = new Parameter[0];
+ private String mResourceClassName;
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.CustomResourceSpecifier#getParameters()
+ */
+ public Parameter[] getParameters() {
+ return mParameters;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.CustomResourceSpecifier#getResourceClassName()
+ */
+ public String getResourceClassName() {
+ return mResourceClassName;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.CustomResourceSpecifier#setParameters(org.apache.uima.resource.Parameter[])
+ */
+ public void setParameters(Parameter[] aParameters) {
+ if (aParameters != null) {
+ mParameters = aParameters;
+ } else {
+ mParameters = new Parameter[0];
+ }
+
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.CustomResourceSpecifier#setResourceClassName(java.lang.String)
+ */
+ public void setResourceClassName(String aResourceClassName) {
+ mResourceClassName = aResourceClassName;
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.metadata.impl.MetaDataObject_impl#getXmlizationInfo()
+ */
+ protected XmlizationInfo getXmlizationInfo() {
+ return XMLIZATION_INFO;
+ }
+
+ static final private XmlizationInfo XMLIZATION_INFO = new XmlizationInfo("customResourceSpecifier",
+ new PropertyXmlInfo[] { new PropertyXmlInfo("resourceClassName"),
+ new PropertyXmlInfo("parameters")});
+}
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/XMLParser.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/XMLParser.java?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/XMLParser.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/XMLParser.java Wed Mar 21 08:13:00 2007
@@ -29,6 +29,7 @@
import org.apache.uima.collection.CollectionReaderDescription;
import org.apache.uima.collection.metadata.CpeDescription;
import org.apache.uima.flow.FlowControllerDescription;
+import org.apache.uima.resource.CustomResourceSpecifier;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.URISpecifier;
import org.apache.uima.resource.metadata.FsIndexCollection;
@@ -590,6 +591,36 @@
* if the input XML is not valid or does not specify a valid FlowControllerDescription
*/
public FlowControllerDescription parseFlowControllerDescription(XMLInputSource aInput,
+ ParsingOptions aOptions) throws InvalidXMLException;
+
+ /**
+ * Parses a CustomResourceSpecifier from an XML input stream.
+ *
+ * @param aInput
+ * the input source from which to read the XML document
+ *
+ * @return a <code>CustomResourceSpecifier</code> object constructed from the XML document
+ *
+ * @throws InvalidXMLException
+ * if the input XML is not valid or does not specify a valid CustomResourceSpecifier
+ */
+ public CustomResourceSpecifier parseCustomResourceSpecifier(XMLInputSource aInput)
+ throws InvalidXMLException;
+
+ /**
+ * Parses a CustomResourceSpecifier from an XML input stream.
+ *
+ * @param aInput
+ * the input source from which to read the XML document
+ * @param aOptions
+ * option settings
+ *
+ * @return a <code>CustomResourceSpecifier</code> object constructed from the XML document
+ *
+ * @throws InvalidXMLException
+ * if the input XML is not valid or does not specify a valid CustomResourceSpecifier
+ */
+ public CustomResourceSpecifier parseCustomResourceSpecifier(XMLInputSource aInput,
ParsingOptions aOptions) throws InvalidXMLException;
/**
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/util/impl/XMLParser_impl.java Wed Mar 21 08:13:00 2007
@@ -41,6 +41,7 @@
import org.apache.uima.collection.metadata.CpeDescription;
import org.apache.uima.flow.FlowControllerDescription;
import org.apache.uima.internal.util.XMLUtils;
+import org.apache.uima.resource.CustomResourceSpecifier;
import org.apache.uima.resource.ResourceSpecifier;
import org.apache.uima.resource.URISpecifier;
import org.apache.uima.resource.metadata.FsIndexCollection;
@@ -788,6 +789,28 @@
}
}
+ /* (non-Javadoc)
+ * @see org.apache.uima.util.XMLParser#parseCustomResourceSpecifier(org.apache.uima.util.XMLInputSource)
+ */
+ public CustomResourceSpecifier parseCustomResourceSpecifier(XMLInputSource aInput) throws InvalidXMLException {
+ return parseCustomResourceSpecifier(aInput, DEFAULT_PARSING_OPTIONS);
+ }
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.util.XMLParser#parseCustomResourceSpecifier(org.apache.uima.util.XMLInputSource, org.apache.uima.util.XMLParser.ParsingOptions)
+ */
+ public CustomResourceSpecifier parseCustomResourceSpecifier(XMLInputSource aInput, ParsingOptions aOptions) throws InvalidXMLException {
+ // attempt to locate resource specifier schema
+ URL schemaURL = getResourceSpecifierSchemaUrl();
+ XMLizable object = parse(aInput, RESOURCE_SPECIFIER_NAMESPACE, schemaURL, aOptions);
+
+ if (object instanceof CustomResourceSpecifier) {
+ return (CustomResourceSpecifier) object;
+ } else {
+ throw new InvalidXMLException(InvalidXMLException.INVALID_CLASS, new Object[] {
+ CustomResourceSpecifier.class.getName(), object.getClass().getName() });
+ }
+ }
/*
* (non-Javadoc)
*
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/factoryConfig.xml
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/factoryConfig.xml?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/factoryConfig.xml (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/factoryConfig.xml Wed Mar 21 08:13:00 2007
@@ -53,6 +53,8 @@
factoryClass="org.apache.uima.impl.CollectionReaderFactory_impl"/>
<customFactory specifier="org.apache.uima.resource.ResourceCreationSpecifier"
factoryClass="org.apache.uima.impl.AnalysisEngineFactory_impl"/>
+ <customFactory specifier="org.apache.uima.resource.CustomResourceSpecifier"
+ factoryClass="org.apache.uima.impl.CustomResourceFactory_impl"/>
</resource>
<resourceSpecifier>
@@ -69,6 +71,7 @@
<binding element="configurationParameter" interface="org.apache.uima.resource.metadata.ConfigurationParameter" class="org.apache.uima.resource.metadata.impl.ConfigurationParameter_impl"/>
<binding element="configurationParameterSettings" interface="org.apache.uima.resource.metadata.ConfigurationParameterSettings" class="org.apache.uima.resource.metadata.impl.ConfigurationParameterSettings_impl"/>
<binding element="configurationParameters" interface="org.apache.uima.resource.metadata.ConfigurationParameterDeclarations" class="org.apache.uima.resource.metadata.impl.ConfigurationParameterDeclarations_impl"/>
+ <binding element="customResourceSpecifier" interface="org.apache.uima.resource.CustomResourceSpecifier" class="org.apache.uima.resource.impl.CustomResourceSpecifier_impl"/>
<binding element="externalResource" interface="org.apache.uima.resource.ExternalResourceDescription" class="org.apache.uima.resource.impl.ExternalResourceDescription_impl"/>
<binding element="externalResourceBinding" interface="org.apache.uima.resource.metadata.ExternalResourceBinding" class="org.apache.uima.resource.metadata.impl.ExternalResourceBinding_impl"/>
<binding element="externalResourceDependency" interface="org.apache.uima.resource.ExternalResourceDependency" class="org.apache.uima.resource.impl.ExternalResourceDependency_impl"/>
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/resourceSpecifierSchema.xsd
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/resourceSpecifierSchema.xsd?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/resourceSpecifierSchema.xsd (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/resources/resourceSpecifierSchema.xsd Wed Mar 21 08:13:00 2007
@@ -616,7 +616,7 @@
<element name="parameters" minOccurs="0">
<complexType>
<sequence>
- <element name="parameter" maxOccurs="unbounded">
+ <element name="parameter" minOccurs="0" maxOccurs="unbounded">
<complexType>
<attribute name="name" type="string"/>
<attribute name="value" type="string"/>
@@ -628,5 +628,27 @@
</sequence>
</complexType>
</element>
+
+ <!-- Top Level Element Definitions for Custom ResourceSpecifiers -->
+
+ <element name="customResourceSpecifier" substitutionGroup="rs:resourceSpecifier">
+ <complexType>
+ <sequence>
+ <element name="resourceClassName" type="string"/>
+ <element name="parameters" minOccurs="0">
+ <complexType>
+ <sequence>
+ <element name="parameter" minOccurs="0" maxOccurs="unbounded">
+ <complexType>
+ <attribute name="name" type="string"/>
+ <attribute name="value" type="string"/>
+ </complexType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
+ </sequence>
+ </complexType>
+ </element>
</schema>
Added: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/CustomResourceSpecifierFactory_implTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/CustomResourceSpecifierFactory_implTest.java?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/CustomResourceSpecifierFactory_implTest.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/CustomResourceSpecifierFactory_implTest.java Wed Mar 21 08:13:00 2007
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.impl;
+
+import java.util.Collections;
+
+import junit.framework.TestCase;
+
+import org.apache.uima.UIMAFramework;
+import org.apache.uima.collection.CasConsumer;
+import org.apache.uima.collection.CasConsumerDescription;
+import org.apache.uima.collection.impl.CasConsumerDescription_impl;
+import org.apache.uima.resource.CustomResourceSpecifier;
+import org.apache.uima.resource.Parameter;
+import org.apache.uima.resource.Resource;
+import org.apache.uima.resource.ResourceInitializationException;
+
+/**
+ *
+ */
+public class CustomResourceSpecifierFactory_implTest extends TestCase {
+
+ private CustomResourceFactory_impl crFactory;
+
+ protected void setUp() throws Exception {
+ crFactory = new CustomResourceFactory_impl();
+ }
+
+ public void testProduceResource() throws Exception {
+ CustomResourceSpecifier specifier = UIMAFramework.getResourceSpecifierFactory().createCustomResourceSpecifier();
+ specifier.setResourceClassName("org.apache.uima.impl.SomeCustomResource");
+ Parameter[] parameters = new Parameter[2];
+ parameters[0] = UIMAFramework.getResourceSpecifierFactory().createParameter();
+ parameters[0].setName("param1");
+ parameters[0].setValue("val1");
+ parameters[1] = UIMAFramework.getResourceSpecifierFactory().createParameter();
+ parameters[1].setName("param2");
+ parameters[1].setValue("val2");
+ specifier.setParameters(parameters);
+
+ Resource res = crFactory.produceResource(Resource.class, specifier, Collections.EMPTY_MAP);
+ assertTrue(res instanceof SomeCustomResource);
+ assertEquals("val1", ((SomeCustomResource)res).paramMap.get("param1"));
+ assertEquals("val2", ((SomeCustomResource)res).paramMap.get("param2"));
+
+ //also UIMAFramework.produceResource should do the same thing
+ res = UIMAFramework.produceResource(specifier, Collections.EMPTY_MAP);
+ assertTrue(res instanceof SomeCustomResource);
+ assertEquals("val1", ((SomeCustomResource)res).paramMap.get("param1"));
+ assertEquals("val2", ((SomeCustomResource)res).paramMap.get("param2"));
+ }
+
+}
Added: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/SomeCustomResource.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/SomeCustomResource.java?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/SomeCustomResource.java (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/impl/SomeCustomResource.java Wed Mar 21 08:13:00 2007
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.uima.impl;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import junit.framework.Assert;
+
+import org.apache.uima.resource.CustomResourceSpecifier;
+import org.apache.uima.resource.Parameter;
+import org.apache.uima.resource.ResourceInitializationException;
+import org.apache.uima.resource.ResourceSpecifier;
+import org.apache.uima.resource.Resource_ImplBase;
+
+/**
+ *
+ */
+public class SomeCustomResource extends Resource_ImplBase {
+
+ public Map paramMap = new HashMap();
+
+ /* (non-Javadoc)
+ * @see org.apache.uima.resource.Resource_ImplBase#initialize(org.apache.uima.resource.ResourceSpecifier, java.util.Map)
+ */
+ public boolean initialize(ResourceSpecifier aSpecifier, Map aAdditionalParams) throws ResourceInitializationException {
+ Assert.assertTrue(aSpecifier instanceof CustomResourceSpecifier);
+ Parameter[] params = ((CustomResourceSpecifier)aSpecifier).getParameters();
+ for (int i = 0; i < params.length; i++) {
+ paramMap.put(params[i].getName(), params[i].getValue());
+ }
+ return true;
+ }
+
+}
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/impl/XMLParser_implTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/impl/XMLParser_implTest.java?view=diff&rev=520910&r1=520909&r2=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/impl/XMLParser_implTest.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/util/impl/XMLParser_implTest.java Wed Mar 21 08:13:00 2007
@@ -31,6 +31,7 @@
import org.apache.uima.analysis_engine.AnalysisEngineDescription;
import org.apache.uima.analysis_engine.TaeDescription;
import org.apache.uima.flow.FlowControllerDescription;
+import org.apache.uima.resource.CustomResourceSpecifier;
import org.apache.uima.resource.Parameter;
import org.apache.uima.resource.URISpecifier;
import org.apache.uima.test.junit_extension.JUnitExtension;
@@ -163,5 +164,18 @@
assertEquals("some.internet.ip.name-or-address", params[0].getValue());
assertEquals("VNS_PORT", params[1].getName());
assertEquals("9000", params[1].getValue());
+ }
+
+ public void testParseCustomResourceSpecifier() throws Exception {
+ XMLInputSource in = new XMLInputSource(
+ JUnitExtension.getFile("XmlParserTest/TestCustomResourceSpecifier.xml"));
+ CustomResourceSpecifier uriSpec = mXmlParser.parseCustomResourceSpecifier(in);
+ assertEquals("foo.bar.MyResource", uriSpec.getResourceClassName());
+ Parameter[] params = uriSpec.getParameters();
+ assertEquals(2, params.length);
+ assertEquals("param1", params[0].getName());
+ assertEquals("val1", params[0].getValue());
+ assertEquals("param2", params[1].getName());
+ assertEquals("val2", params[1].getValue());
}
}
Added: incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/XmlParserTest/TestCustomResourceSpecifier.xml
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/XmlParserTest/TestCustomResourceSpecifier.xml?view=auto&rev=520910
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/XmlParserTest/TestCustomResourceSpecifier.xml (added)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/resources/XmlParserTest/TestCustomResourceSpecifier.xml Wed Mar 21 08:13:00 2007
@@ -0,0 +1,25 @@
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ -->
+<customResourceSpecifier xmlns="http://uima.apache.org/resourceSpecifier">
+ <resourceClassName>foo.bar.MyResource</resourceClassName>
+ <parameters>
+ <parameter name="param1" value="val1"/>
+ <parameter name="param2" value="val2"/>
+ </parameters>
+</customResourceSpecifier>
\ No newline at end of file