You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by bu...@apache.org on 2017/02/02 19:54:41 UTC
svn commit: r1781464 - in /uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/resource/ main/java/org/apache/uima/resource/impl/
main/java/org/apache/uima/resource/metadata/impl/
main/resources/org/apache/uima/impl/ test/resources/TextAnalysisE...
Author: burn
Date: Thu Feb 2 19:54:41 2017
New Revision: 1781464
URL: http://svn.apache.org/viewvc?rev=1781464&view=rev
Log:
UIMA-5274 Support external settings in the import element's name and attribute values and in the fileResourceSpecifier's fileUrl
Modified:
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/FileResourceSpecifier_impl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/log_messages.properties
uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithExternalOverrides.xml
uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/testExternalOverride2.settings
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/Resource_ImplBase.java Thu Feb 2 19:54:41 2017
@@ -26,6 +26,7 @@ import org.apache.uima.UIMAFramework;
import org.apache.uima.UIMA_IllegalStateException;
import org.apache.uima.UimaContext;
import org.apache.uima.UimaContextAdmin;
+import org.apache.uima.UimaContextHolder;
import org.apache.uima.resource.impl.RelativePathResolver_impl;
import org.apache.uima.resource.metadata.ResourceManagerConfiguration;
import org.apache.uima.resource.metadata.ResourceMetaData;
@@ -161,7 +162,8 @@ public abstract class Resource_ImplBase
}
}
}
-
+ UimaContextHolder.setContext(mUimaContextAdmin); // Create a UimaContext holder so that AEs created on this thread can use the Settings
+
// initialize configuration
try {
// createContext checks and skips repeated calls with same args (on different threads, for example)
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/FileResourceSpecifier_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/FileResourceSpecifier_impl.java?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/FileResourceSpecifier_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/impl/FileResourceSpecifier_impl.java Thu Feb 2 19:54:41 2017
@@ -50,7 +50,11 @@ public class FileResourceSpecifier_impl
* @see org.apache.uima.resource.FileResourceSpecifier#getFileUrl()
*/
public String getFileUrl() {
- return mFileUrl;
+ if (mFileUrl != null && mFileUrl.contains("${")) {
+ return resolveSettings(mFileUrl);
+ } else {
+ return mFileUrl;
+ }
}
/**
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/Import_impl.java Thu Feb 2 19:54:41 2017
@@ -27,7 +27,6 @@ import org.apache.uima.resource.Resource
import org.apache.uima.resource.metadata.Import;
import org.apache.uima.util.InvalidXMLException;
import org.apache.uima.util.Level;
-import org.apache.uima.util.Logger;
import org.apache.uima.util.XMLParser;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
@@ -42,12 +41,24 @@ import org.xml.sax.helpers.AttributesImp
public class Import_impl extends MetaDataObject_impl implements Import {
private static final long serialVersionUID = 6876757002913848998L;
+
+ /**
+ * resource bundle for log messages
+ */
+ protected static final String LOG_RESOURCE_BUNDLE = "org.apache.uima.impl.log_messages";
private String mName;
private String mLocation;
private String byNameSuffix = ".xml";
+
+ /*
+ * UIMA-5274 Expand any references to external overrides when name and location are fetched.
+ * Leave value unmodified if any settings are undefined.
+ * Don't cache the value as both methods are called (for validation?) early before the settings have been loaded,
+ * but the settings are available when the values are used when initializing an AggregateAnalysisEngine.
+ */
/*
* (non-Javadoc)
@@ -55,7 +66,11 @@ public class Import_impl extends MetaDat
* @see org.apache.uima.resource.metadata.Import#getName()
*/
public String getName() {
- return mName;
+ if (mName != null && mName.contains("${")) {
+ return resolveSettings(mName);
+ } else {
+ return mName;
+ }
}
/*
@@ -73,7 +88,11 @@ public class Import_impl extends MetaDat
* @see org.apache.uima.resource.metadata.Import#getLocation()
*/
public String getLocation() {
- return mLocation;
+ if (mLocation != null && mLocation.contains("${")) {
+ return resolveSettings(mLocation);
+ } else {
+ return mLocation;
+ }
}
/*
@@ -98,22 +117,26 @@ public class Import_impl extends MetaDat
* @see org.apache.uima.resource.metadata.Import#findAbsoluteUrl(org.apache.uima.resource.ResourceManager)
*/
public URL findAbsoluteUrl(ResourceManager aResourceManager) throws InvalidXMLException {
- Logger logger = UIMAFramework.getLogger(this.getClass());
- if (getLocation() != null) {
+ String location, name;
+ if ((location=getLocation()) != null) {
try {
- URL url = new URL(this.getRelativePathBase(), getLocation());
- logger.log(Level.CONFIG, "Import by location: " + url);
+ URL url = new URL(this.getRelativePathBase(), location);
+ UIMAFramework.getLogger(this.getClass()).logrb(Level.CONFIG, this.getClass().getName(),
+ "findAbsoluteUrl", LOG_RESOURCE_BUNDLE, "UIMA_import_by__CONFIG",
+ new Object[] {"location", url});
return url;
} catch (MalformedURLException e) {
throw new InvalidXMLException(InvalidXMLException.MALFORMED_IMPORT_URL, new Object[] {
- getLocation(), getSourceUrlString() }, e);
+ location, getSourceUrlString() }, e);
}
- } else if (getName() != null) {
- String filename = getName().replace('.', '/') + byNameSuffix;
+ } else if ((name=getName()) != null) {
+ String filename = name.replace('.', '/') + byNameSuffix;
URL url;
try {
url = aResourceManager.resolveRelativePath(filename);
- logger.log(Level.CONFIG, "Import by name: " + url);
+ UIMAFramework.getLogger(this.getClass()).logrb(Level.CONFIG, this.getClass().getName(),
+ "findAbsoluteUrl", LOG_RESOURCE_BUNDLE, "UIMA_import_by__CONFIG",
+ new Object[] {"name", url});
} catch (MalformedURLException e) {
throw new InvalidXMLException(InvalidXMLException.IMPORT_BY_NAME_TARGET_NOT_FOUND,
new Object[] { filename, getSourceUrlString() }, e);
@@ -178,11 +201,13 @@ public class Import_impl extends MetaDat
String namespace = getXmlizationInfo().namespace;
AttributesImpl attrs = new AttributesImpl();
- if (getName() != null) {
- attrs.addAttribute("", "name", "name", "", getName());
+ String name = getName();
+ if (name != null) {
+ attrs.addAttribute("", "name", "name", "", name);
}
- if (getLocation() != null) {
- attrs.addAttribute("", "location", "location", "", getLocation());
+ String location = getLocation();
+ if (location != null) {
+ attrs.addAttribute("", "location", "location", "", location);
}
Node node = serializer.findMatchingSubElement("import");
serializer.outputStartElement(node, namespace, "import", "import", attrs);
Modified: uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/resource/metadata/impl/MetaDataObject_impl.java Thu Feb 2 19:54:41 2017
@@ -40,19 +40,24 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
+import org.apache.uima.UIMAFramework;
import org.apache.uima.UIMARuntimeException;
import org.apache.uima.UIMA_IllegalArgumentException;
import org.apache.uima.UIMA_UnsupportedOperationException;
+import org.apache.uima.UimaContext;
+import org.apache.uima.UimaContextHolder;
import org.apache.uima.internal.util.XMLUtils;
import org.apache.uima.resource.metadata.AllowedValue;
import org.apache.uima.resource.metadata.MetaDataObject;
import org.apache.uima.util.ConcurrentHashMapWithProducer;
import org.apache.uima.util.InvalidXMLException;
+import org.apache.uima.util.Level;
import org.apache.uima.util.NameClassPair;
import org.apache.uima.util.XMLParser;
import org.apache.uima.util.XMLSerializer;
import org.apache.uima.util.XMLSerializer.CharacterValidatingContentHandler;
import org.apache.uima.util.XMLizable;
+import org.apache.uima.util.impl.Settings_impl;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
@@ -1650,6 +1655,28 @@ public abstract class MetaDataObject_imp
return (infoset == null) ? null : serialContext.serializer.findMatchingSubElement(name);
}
+
+ /*
+ * UIMA-5274 Resolve any ${variable} entries in the string.
+ * Leaves the whole string unmodified if any variables are undefined
+ * but logs a warning message.
+ */
+ protected String resolveSettings(String text) {
+ try {
+ UimaContext uimaContext = UimaContextHolder.getContext();
+ if (uimaContext != null) {
+ Settings_impl settings = (Settings_impl) uimaContext.getExternalOverrides();
+ if (settings != null) {
+ return settings.resolve(text);
+ }
+ }
+ } catch (Exception e) {
+ UIMAFramework.getLogger(this.getClass()).log(Level.WARNING, e.toString());
+ }
+ return text;
+ }
+
+
// /*****************************************
// * JSON support *
// *
Modified: uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/log_messages.properties
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/log_messages.properties?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/log_messages.properties (original)
+++ uima/uimaj/trunk/uimaj-core/src/main/resources/org/apache/uima/impl/log_messages.properties Thu Feb 2 19:54:41 2017
@@ -80,6 +80,8 @@ UIMA_external_overrides_load__CONFIG = L
UIMA_external_override_ignored__CONFIG = Key "{0}" already in use ... ignoring value "{1}"
+UIMA_import_by__CONFIG = Import by {0}: {1}
+
UIMA_parameter_set__CONFIG = Parameter "{0}" in context {1} = "{2}" {3}
UIMA_overridden_resource__CONFIG = The definition of external resource "{0}" in component {1} was overridden in component {2}.
Modified: uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithExternalOverrides.xml
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithExternalOverrides.xml?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithExternalOverrides.xml (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/AggregateWithExternalOverrides.xml Thu Feb 2 19:54:41 2017
@@ -23,7 +23,7 @@
<primitive>false</primitive>
<delegateAnalysisEngineSpecifiers>
<delegateAnalysisEngine key="ExternalOverrides">
- <import location="AnnotatorWithExternalOverrides.xml"/>
+ <import location="Annotator${with}ExternalOverrides.xml"/>
</delegateAnalysisEngine>
</delegateAnalysisEngineSpecifiers>
<analysisEngineMetaData>
Modified: uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/testExternalOverride2.settings
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/testExternalOverride2.settings?rev=1781464&r1=1781463&r2=1781464&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/testExternalOverride2.settings (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/resources/TextAnalysisEngineImplTest/testExternalOverride2.settings Thu Feb 2 19:54:41 2017
@@ -22,3 +22,9 @@ suffix = should be ignored
# Empty array
test.externalFloatArray = []
context-holder = Context Holder Test
+
+# Part of an import by location
+with = ${W${i}}${TH}
+i = I
+WI = Wi
+TH = th