You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tika.apache.org by ni...@apache.org on 2015/08/01 19:27:16 UTC

svn commit: r1693745 - /tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java

Author: nick
Date: Sat Aug  1 17:27:16 2015
New Revision: 1693745

URL: http://svn.apache.org/r1693745
Log:
If DefaultTranslator has multiple translators loaded, use the first available, not just blindly the first

Modified:
    tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java

Modified: tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java
URL: http://svn.apache.org/viewvc/tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java?rev=1693745&r1=1693744&r2=1693745&view=diff
==============================================================================
--- tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java (original)
+++ tika/trunk/tika-core/src/main/java/org/apache/tika/language/translate/DefaultTranslator.java Sat Aug  1 17:27:16 2015
@@ -17,15 +17,22 @@
 
 package org.apache.tika.language.translate;
 
-import org.apache.tika.config.ServiceLoader;
-import org.apache.tika.exception.TikaException;
-
 import java.io.IOException;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-public class DefaultTranslator implements Translator{
+import org.apache.tika.config.ServiceLoader;
+import org.apache.tika.exception.TikaException;
+
+/**
+ * A translator which picks the first available {@link Translator} 
+ * implementations available through the
+ * {@link javax.imageio.spi.ServiceRegistry service provider mechanism}.
+ *
+ * @since Apache Tika 1.6
+ */
+public class DefaultTranslator implements Translator {
     private transient final ServiceLoader loader;
 
     public DefaultTranslator(ServiceLoader loader) {
@@ -58,17 +65,39 @@ public class DefaultTranslator implement
         });
         return translators;
     }
+    /**
+     * Returns the first available translator, or null if none are
+     */
+    private static Translator getFirstAvailable(ServiceLoader loader) {
+        for (Translator t : getDefaultTranslators(loader)) {
+            if (t.isAvailable()) return t;
+        }
+        return null;
+    }
 
+    /**
+     * Translate, using the first available service-loaded translator
+     */
     public String translate(String text, String sourceLanguage, String targetLanguage) throws TikaException, IOException {
-        return getDefaultTranslators(loader).get(0).translate(text, sourceLanguage, targetLanguage);
+        Translator t = getFirstAvailable(loader);
+        if (t != null) {
+            return t.translate(text, sourceLanguage, targetLanguage);
+        }
+        throw new TikaException("No translators currently available");
     }
 
+    /**
+     * Translate, using the first available service-loaded translator
+     */
     public String translate(String text, String targetLanguage) throws TikaException, IOException {
-        return getDefaultTranslators(loader).get(0).translate(text, targetLanguage);
+        Translator t = getFirstAvailable(loader);
+        if (t != null) {
+            return t.translate(text, targetLanguage);
+        }
+        throw new TikaException("No translators currently available");
     }
 
     public boolean isAvailable() {
-        return getDefaultTranslators(loader).get(0).isAvailable();
+        return getFirstAvailable(loader) != null;
     }
-
 }