Author: nick
Date: Sat May  2 15:41:43 2015
New Revision: 1677328

URL: http://svn.apache.org/r1677328
Log:
TIKA-1517 Pull the ordering logic for loaded classed (non-Tika first etc) out 
into a util class

Added:
    
tika/trunk/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
Modified:
    
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java
    
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultProbDetector.java
    tika/trunk/tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java

Modified: 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java?rev=1677328&r1=1677327&r2=1677328&view=diff
==============================================================================
--- 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java 
(original)
+++ 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultDetector.java 
Sat May  2 15:41:43 2015
@@ -16,14 +16,13 @@
  */
 package org.apache.tika.detect;
 
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
 import javax.imageio.spi.ServiceRegistry;
 
 import org.apache.tika.config.ServiceLoader;
 import org.apache.tika.mime.MimeTypes;
+import org.apache.tika.utils.ServiceLoaderUtils;
 
 /**
  * A composite detector based on all the {@link Detector} implementations
@@ -53,23 +52,9 @@ public class DefaultDetector extends Com
      */
     private static List<Detector> getDefaultDetectors(
             MimeTypes types, ServiceLoader loader) {
-        List<Detector> detectors =
-                loader.loadStaticServiceProviders(Detector.class);
-        Collections.sort(detectors, new Comparator<Detector>() {
-            public int compare(Detector d1, Detector d2) {
-                String n1 = d1.getClass().getName();
-                String n2 = d2.getClass().getName();
-                boolean t1 = n1.startsWith("org.apache.tika.");
-                boolean t2 = n2.startsWith("org.apache.tika.");
-                if (t1 == t2) {
-                    return n1.compareTo(n2);
-                } else if (t1) {
-                    return 1;
-                } else {
-                    return -1;
-                }
-            }
-        });
+        List<Detector> detectors = 
loader.loadStaticServiceProviders(Detector.class);
+        ServiceLoaderUtils.sortLoadedClasses(detectors);
+        
         // Finally the Tika MimeTypes as a fallback
         detectors.add(types);
         return detectors;

Modified: 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultProbDetector.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultProbDetector.java?rev=1677328&r1=1677327&r2=1677328&view=diff
==============================================================================
--- 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultProbDetector.java
 (original)
+++ 
tika/trunk/tika-core/src/main/java/org/apache/tika/detect/DefaultProbDetector.java
 Sat May  2 15:41:43 2015
@@ -16,13 +16,12 @@
  */
 package org.apache.tika.detect;
 
-import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 
 import org.apache.tika.config.ServiceLoader;
 import org.apache.tika.mime.MimeTypes;
 import org.apache.tika.mime.ProbabilisticMimeDetectionSelector;
+import org.apache.tika.utils.ServiceLoaderUtils;
 
 /**
  * A version of {@link DefaultDetector} for probabilistic mime
@@ -37,22 +36,7 @@ public class DefaultProbDetector extends
     private static List<Detector> getDefaultDetectors(
             ProbabilisticMimeDetectionSelector sel, ServiceLoader loader) {
         List<Detector> detectors = 
loader.loadStaticServiceProviders(Detector.class);
-        Collections.sort(detectors, new Comparator<Detector>() {
-            public int compare(Detector d1, Detector d2) {
-                String n1 = d1.getClass().getName();
-                String n2 = d2.getClass().getName();
-                boolean t1 = n1.startsWith("org.apache.tika.");
-                boolean t2 = n2.startsWith("org.apache.tika.");
-                if (t1 == t2) {
-                    return n1.compareTo(n2);
-                } else if (t1) {
-                    return 1;
-                } else {
-                    return -1;
-                }
-            }
-        });
-
+        ServiceLoaderUtils.sortLoadedClasses(detectors);
         detectors.add(sel);
         return detectors;
     }

Modified: 
tika/trunk/tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java?rev=1677328&r1=1677327&r2=1677328&view=diff
==============================================================================
--- 
tika/trunk/tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java 
(original)
+++ 
tika/trunk/tika-core/src/main/java/org/apache/tika/parser/DefaultParser.java 
Sat May  2 15:41:43 2015
@@ -19,13 +19,13 @@ package org.apache.tika.parser;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
-import java.util.Comparator;
 import java.util.List;
 import java.util.Map;
 
 import org.apache.tika.config.ServiceLoader;
 import org.apache.tika.mime.MediaType;
 import org.apache.tika.mime.MediaTypeRegistry;
+import org.apache.tika.utils.ServiceLoaderUtils;
 
 /**
  * A composite parser based on all the {@link Parser} implementations
@@ -49,23 +49,8 @@ public class DefaultParser extends Compo
      * @return ordered list of statically loadable parsers
      */
     private static List<Parser> getDefaultParsers(ServiceLoader loader) {
-        List<Parser> parsers =
-                loader.loadStaticServiceProviders(Parser.class);
-        Collections.sort(parsers, new Comparator<Parser>() {
-            public int compare(Parser p1, Parser p2) {
-                String n1 = p1.getClass().getName();
-                String n2 = p2.getClass().getName();
-                boolean t1 = n1.startsWith("org.apache.tika.");
-                boolean t2 = n2.startsWith("org.apache.tika.");
-                if (t1 == t2) {
-                    return n1.compareTo(n2);
-                } else if (t1) {
-                    return -1;
-                } else {
-                    return 1;
-                }
-            }
-        });
+        List<Parser> parsers = loader.loadStaticServiceProviders(Parser.class);
+        ServiceLoaderUtils.sortLoadedClasses(parsers);
         return parsers;
     }
 

Added: 
tika/trunk/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
URL: 
http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java?rev=1677328&view=auto
==============================================================================
--- 
tika/trunk/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
 (added)
+++ 
tika/trunk/tika-core/src/main/java/org/apache/tika/utils/ServiceLoaderUtils.java
 Sat May  2 15:41:43 2015
@@ -0,0 +1,48 @@
+/**
+ * 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.tika.utils;
+
+import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
+
+/**
+ * Service Loading and Ordering related utils
+ */
+public class ServiceLoaderUtils {
+    /**
+     * Sorts a list of loaded classes, so that non-Tika ones come
+     *  before Tika ones, and otherwise in reverse alphabetical order
+     */
+    public static <T> void sortLoadedClasses(List<T> loaded) {
+        Collections.sort(loaded, new Comparator<T>() {
+            public int compare(T c1, T c2) {
+                String n1 = c1.getClass().getName();
+                String n2 = c2.getClass().getName();
+                boolean t1 = n1.startsWith("org.apache.tika.");
+                boolean t2 = n2.startsWith("org.apache.tika.");
+                if (t1 == t2) {
+                    return n1.compareTo(n2);
+                } else if (t1) {
+                    return 1;
+                } else {
+                    return -1;
+                }
+            }
+        });
+    }
+}


Reply via email to