Author: nick
Date: Sat Aug  1 17:13:01 2015
New Revision: 1693739

URL: http://svn.apache.org/r1693739
Log:
Allow Detectors to be defined as excluded in Tika Config XML TIKA-1702

Modified:
    tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
    
tika/trunk/tika-parsers/src/test/java/org/apache/tika/config/TikaDetectorConfigTest.java

Modified: 
tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java?rev=1693739&r1=1693738&r2=1693739&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java 
(original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/config/TikaConfig.java 
Sat Aug  1 17:13:01 2015
@@ -504,8 +504,9 @@ public class TikaConfig {
                     }
                 } else {
                     // Regular class, create as-is
-                    // TODO Support arguments, needed for Translators etc
                     loaded = loadedClass.newInstance();
+                    // TODO Support arguments, needed for Translators etc
+                    // See the thread "Configuring parsers and translators" 
for details 
                 }
                 
                 // Have any decoration performed, eg explicit mimetypes
@@ -579,6 +580,12 @@ public class TikaConfig {
                     parser = c.newInstance(registry, childParsers, 
excludeParsers);
                 } catch (NoSuchMethodException me) {}
             }
+            if (parser == null) {
+                try {
+                    c = parserClass.getConstructor(MediaTypeRegistry.class, 
List.class);
+                    parser = c.newInstance(registry, childParsers);
+                } catch (NoSuchMethodException me) {}
+            }
             
             // Create as a Parser Decorator
             if (parser == null && 
ParserDecorator.class.isAssignableFrom(parserClass)) {
@@ -641,14 +648,44 @@ public class TikaConfig {
             return new CompositeDetector(registry, detectors);
         }
         @Override
-        Detector createComposite(Class<? extends Detector> compositeClass,
-                List<Detector> children,
-                Set<Class<? extends Detector>> excludeChildren,
+        Detector createComposite(Class<? extends Detector> detectorClass,
+                List<Detector> childDetectors,
+                Set<Class<? extends Detector>> excludeDetectors,
                 MimeTypes mimeTypes, ServiceLoader loader)
                 throws InvocationTargetException, IllegalAccessException,
                 InstantiationException {
-            // TODO Implement properly
-            return compositeClass.newInstance();
+            Detector detector = null;
+            Constructor<? extends Detector> c = null;
+            MediaTypeRegistry registry = mimeTypes.getMediaTypeRegistry();
+            
+            // Try the possible composite detector constructors
+            if (detector == null) {
+                try {
+                    c = detectorClass.getConstructor(MimeTypes.class, 
ServiceLoader.class, Collection.class);
+                    detector = c.newInstance(mimeTypes, loader, 
excludeDetectors);
+                } 
+                catch (NoSuchMethodException me) {}
+            }
+            if (detector == null) {
+                try {
+                    c = detectorClass.getConstructor(MediaTypeRegistry.class, 
List.class, Collection.class);
+                    detector = c.newInstance(registry, childDetectors, 
excludeDetectors);
+                } catch (NoSuchMethodException me) {}
+            }
+            if (detector == null) {
+                try {
+                    c = detectorClass.getConstructor(MediaTypeRegistry.class, 
List.class);
+                    detector = c.newInstance(registry, childDetectors);
+                } catch (NoSuchMethodException me) {}
+            }
+            if (detector == null) {
+                try {
+                    c = detectorClass.getConstructor(List.class);
+                    detector = c.newInstance(childDetectors);
+                } catch (NoSuchMethodException me) {}
+            }
+            
+            return detector;
         }
         @Override
         Detector decorate(Detector created, Element element) {

Modified: 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/config/TikaDetectorConfigTest.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-parsers/src/test/java/org/apache/tika/config/TikaDetectorConfigTest.java?rev=1693739&r1=1693738&r2=1693739&view=diff
==============================================================================
--- 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/config/TikaDetectorConfigTest.java
 (original)
+++ 
tika/trunk/tika-parsers/src/test/java/org/apache/tika/config/TikaDetectorConfigTest.java
 Sat Aug  1 17:13:01 2015
@@ -27,7 +27,6 @@ import org.apache.tika.detect.Detector;
 import org.apache.tika.detect.EmptyDetector;
 import org.apache.tika.parser.microsoft.POIFSContainerDetector;
 import org.apache.tika.parser.pkg.ZipContainerDetector;
-import org.junit.Ignore;
 import org.junit.Test;
 
 /**
@@ -37,7 +36,6 @@ import org.junit.Test;
  */
 public class TikaDetectorConfigTest extends AbstractTikaConfigTest {
     @Test
-    @Ignore // TODO Work on TIKA-1702 in progress
     public void testDetectorExcludeFromDefault() throws Exception {
         TikaConfig config = getConfig("TIKA-1702-detector-blacklist.xml");
         assertNotNull(config.getParser());


Reply via email to