This is an automated email from the ASF dual-hosted git repository.

nick pushed a commit to branch multiple-parsers
in repository https://gitbox.apache.org/repos/asf/tika.git

commit 4665561c883d3eab2a34d55edab64bb97977b4e1
Author: Nick Burch <n...@gagravarr.org>
AuthorDate: Sun Apr 8 10:37:21 2018 +0100

    Support loading well known enum params
---
 .../main/java/org/apache/tika/config/Param.java    | 22 +++++++++++++++++++++-
 .../tika/config/TIKA-1509-multiple-fallback.xml    |  2 +-
 2 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/tika-core/src/main/java/org/apache/tika/config/Param.java 
b/tika-core/src/main/java/org/apache/tika/config/Param.java
index 112955b..232521d 100644
--- a/tika-core/src/main/java/org/apache/tika/config/Param.java
+++ b/tika-core/src/main/java/org/apache/tika/config/Param.java
@@ -17,6 +17,7 @@
 package org.apache.tika.config;
 
 import org.apache.tika.exception.TikaException;
+import org.apache.tika.parser.multiple.AbstractMultipleParser;
 import org.apache.tika.utils.XMLReaderUtils;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
@@ -53,6 +54,7 @@ public class Param<T> implements Serializable {
 
     private static final Map<Class<?>, String> map = new HashMap<>();
     private static final Map<String, Class<?>> reverseMap = new HashMap<>();
+    private static final Map<String, Class<?>> wellKnownMap = new HashMap<>();
 
     static {
         map.put(Boolean.class, "bool");
@@ -70,6 +72,7 @@ public class Param<T> implements Serializable {
         for (Map.Entry<Class<?>, String> entry : map.entrySet()) {
             reverseMap.put(entry.getValue(), entry.getKey());
         }
+        wellKnownMap.put("metadataPolicy", 
AbstractMultipleParser.MetadataPolicy.class);
     }
 
     private Class<T> type;
@@ -87,6 +90,10 @@ public class Param<T> implements Serializable {
         this.name = name;
         this.type = type;
         this.value = value.toString();
+        
+        if (this.type == null) {
+            this.type = (Class<T>)wellKnownMap.get(name);
+        }
     }
 
     public Param(String name, T value){
@@ -183,11 +190,19 @@ public class Param<T> implements Serializable {
         
         Node nameAttr = node.getAttributes().getNamedItem("name");
         Node typeAttr = node.getAttributes().getNamedItem("type");
+        Node valueAttr = node.getAttributes().getNamedItem("value");
         Node value = node.getFirstChild();
+        if (valueAttr != null && (value == null || value.getTextContent() == 
null)) {
+            value = valueAttr;
+        }
         
         Param<T> ret = new Param<T>();
         ret.name  = nameAttr.getTextContent();
-        ret.setTypeString(typeAttr.getTextContent());
+        if (typeAttr != null) {
+            ret.setTypeString(typeAttr.getTextContent());
+        } else {
+            ret.type = (Class<T>)wellKnownMap.get(ret.name);
+        }
         ret.value = value.getTextContent();
         
         return ret;
@@ -205,6 +220,11 @@ public class Param<T> implements Serializable {
     
     private static <T> T getTypedValue(Class<T> type, String value) {
         try {
+            if (type.isEnum()) {
+                Object val = Enum.valueOf((Class)type, value);
+                return (T)val;
+            }
+            
             Constructor<T> constructor = type.getConstructor(String.class);
             constructor.setAccessible(true);
             return constructor.newInstance(value);
diff --git 
a/tika-core/src/test/resources/org/apache/tika/config/TIKA-1509-multiple-fallback.xml
 
b/tika-core/src/test/resources/org/apache/tika/config/TIKA-1509-multiple-fallback.xml
index 77aba07..e0bc083 100644
--- 
a/tika-core/src/test/resources/org/apache/tika/config/TIKA-1509-multiple-fallback.xml
+++ 
b/tika-core/src/test/resources/org/apache/tika/config/TIKA-1509-multiple-fallback.xml
@@ -27,7 +27,7 @@
     <!--  if the first parser fails (as it will!) -->
     <parser class="org.apache.tika.parser.multiple.FallbackParser">
        <params>
-          <param name="metadataPolicy" value="DISCARD" />
+          <param name="metadataPolicy" value="DISCARD_ALL" />
        </params>
        <parser class="org.apache.tika.parser.ErrorParser"/>
        <parser class="org.apache.tika.parser.EmptyParser"/>

-- 
To stop receiving notification emails like this one, please contact
n...@apache.org.

Reply via email to