You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/02/09 02:20:47 UTC

[commons-codec] branch master updated: Refactor commons code.

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

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-codec.git


The following commit(s) were added to refs/heads/master by this push:
     new 2e0213a  Refactor commons code.
2e0213a is described below

commit 2e0213a7a228dd4e8cdc2a97ca34929deda0168c
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Fri Feb 8 21:20:44 2019 -0500

    Refactor commons code.
---
 .../java/org/apache/commons/codec/Resources.java   | 42 ++++++++++++++++++++++
 .../codec/language/DaitchMokotoffSoundex.java      |  9 ++---
 .../org/apache/commons/codec/language/bm/Lang.java | 12 +++----
 .../commons/codec/language/bm/Languages.java       | 42 +++++++++++-----------
 .../org/apache/commons/codec/language/bm/Rule.java | 18 ++--------
 .../codec/language/bm/BeiderMorseEncoderTest.java  |  2 +-
 6 files changed, 73 insertions(+), 52 deletions(-)

diff --git a/src/main/java/org/apache/commons/codec/Resources.java b/src/main/java/org/apache/commons/codec/Resources.java
new file mode 100644
index 0000000..0aed9ce
--- /dev/null
+++ b/src/main/java/org/apache/commons/codec/Resources.java
@@ -0,0 +1,42 @@
+/*
+ * 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.commons.codec;
+
+import java.io.InputStream;
+
+/**
+ * Consider this class package private. Helps load resources.
+ * 
+ * @since 1.12
+ */
+public class Resources {
+
+    /**
+     * Opens the given named resource from the given class.
+     * 
+     * @param name The resource name.
+     * @return An input stream.
+     */
+    public static InputStream getInputStream(final String name) {
+        final InputStream inputStream = Resources.class.getClassLoader().getResourceAsStream(name);
+        if (inputStream == null) {
+            throw new IllegalArgumentException("Unable to resolve required resource: " + name);
+        }
+        return inputStream;
+    }
+}
diff --git a/src/main/java/org/apache/commons/codec/language/DaitchMokotoffSoundex.java b/src/main/java/org/apache/commons/codec/language/DaitchMokotoffSoundex.java
index a8d9af0..328f1ab 100644
--- a/src/main/java/org/apache/commons/codec/language/DaitchMokotoffSoundex.java
+++ b/src/main/java/org/apache/commons/codec/language/DaitchMokotoffSoundex.java
@@ -16,7 +16,6 @@
  */
 package org.apache.commons.codec.language;
 
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -30,6 +29,7 @@ import java.util.Set;
 
 import org.apache.commons.codec.CharEncoding;
 import org.apache.commons.codec.EncoderException;
+import org.apache.commons.codec.Resources;
 import org.apache.commons.codec.StringEncoder;
 
 /**
@@ -226,12 +226,7 @@ public class DaitchMokotoffSoundex implements StringEncoder {
     private static final Map<Character, Character> FOLDINGS = new HashMap<>();
 
     static {
-        final InputStream rulesIS = DaitchMokotoffSoundex.class.getClassLoader().getResourceAsStream(RESOURCE_FILE);
-        if (rulesIS == null) {
-            throw new IllegalArgumentException("Unable to load resource: " + RESOURCE_FILE);
-        }
-
-        try (final Scanner scanner = new Scanner(rulesIS, CharEncoding.UTF_8)) {
+        try (final Scanner scanner = new Scanner(Resources.getInputStream(RESOURCE_FILE), CharEncoding.UTF_8)) {
             parseRules(scanner, RESOURCE_FILE, RULES, FOLDINGS);
         }
 
diff --git a/src/main/java/org/apache/commons/codec/language/bm/Lang.java b/src/main/java/org/apache/commons/codec/language/bm/Lang.java
index 7cabd5b..d9e35f0 100644
--- a/src/main/java/org/apache/commons/codec/language/bm/Lang.java
+++ b/src/main/java/org/apache/commons/codec/language/bm/Lang.java
@@ -17,7 +17,6 @@
 
 package org.apache.commons.codec.language.bm;
 
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -30,6 +29,8 @@ import java.util.Scanner;
 import java.util.Set;
 import java.util.regex.Pattern;
 
+import org.apache.commons.codec.Resources;
+
 /**
  * Language guessing utility.
  * <p>
@@ -128,13 +129,8 @@ public class Lang {
      */
     public static Lang loadFromResource(final String languageRulesResourceName, final Languages languages) {
         final List<LangRule> rules = new ArrayList<>();
-        final InputStream lRulesIS = Lang.class.getClassLoader().getResourceAsStream(languageRulesResourceName);
-
-        if (lRulesIS == null) {
-            throw new IllegalStateException("Unable to resolve required resource:" + LANGUAGE_RULES_RN);
-        }
-
-        try (final Scanner scanner = new Scanner(lRulesIS, ResourceConstants.ENCODING)) {
+        try (final Scanner scanner = new Scanner(Resources.getInputStream(languageRulesResourceName),
+                ResourceConstants.ENCODING)) {
             boolean inExtendedComment = false;
             while (scanner.hasNextLine()) {
                 final String rawLine = scanner.nextLine();
diff --git a/src/main/java/org/apache/commons/codec/language/bm/Languages.java b/src/main/java/org/apache/commons/codec/language/bm/Languages.java
index 64ad814..1f3f032 100644
--- a/src/main/java/org/apache/commons/codec/language/bm/Languages.java
+++ b/src/main/java/org/apache/commons/codec/language/bm/Languages.java
@@ -17,7 +17,6 @@
 
 package org.apache.commons.codec.language.bm;
 
-import java.io.InputStream;
 import java.util.Collections;
 import java.util.EnumMap;
 import java.util.HashSet;
@@ -26,20 +25,24 @@ import java.util.NoSuchElementException;
 import java.util.Scanner;
 import java.util.Set;
 
+import org.apache.commons.codec.Resources;
+
 /**
  * Language codes.
  * <p>
- * Language codes are typically loaded from resource files. These are UTF-8 encoded text files. They are
- * systematically named following the pattern:
- * <blockquote>org/apache/commons/codec/language/bm/${{@link NameType#getName()} languages.txt</blockquote>
+ * Language codes are typically loaded from resource files. These are UTF-8
+ * encoded text files. They are systematically named following the pattern:
+ * <blockquote>org/apache/commons/codec/language/bm/${{@link NameType#getName()}
+ * languages.txt</blockquote>
  * <p>
  * The format of these resources is the following:
  * <ul>
  * <li><b>Language:</b> a single string containing no whitespace</li>
- * <li><b>End-of-line comments:</b> Any occurrence of '//' will cause all text following on that line to be
- * discarded as a comment.</li>
- * <li><b>Multi-line comments:</b> Any line starting with '/*' will start multi-line commenting mode.
- * This will skip all content until a line ending in '*' and '/' is found.</li>
+ * <li><b>End-of-line comments:</b> Any occurrence of '//' will cause all text
+ * following on that line to be discarded as a comment.</li>
+ * <li><b>Multi-line comments:</b> Any line starting with '/*' will start
+ * multi-line commenting mode. This will skip all content until a line ending in
+ * '*' and '/' is found.</li>
  * <li><b>Blank lines:</b> All blank lines will be skipped.</li>
  * </ul>
  * <p>
@@ -51,9 +54,12 @@ import java.util.Set;
  * @version $Id$
  */
 public class Languages {
-    // Implementation note: This class is divided into two sections. The first part is a static factory interface that
-    // exposes org/apache/commons/codec/language/bm/%s_languages.txt for %s in NameType.* as a list of supported
-    // languages, and a second part that provides instance methods for accessing this set for supported languages.
+    // Implementation note: This class is divided into two sections. The first part
+    // is a static factory interface that
+    // exposes org/apache/commons/codec/language/bm/%s_languages.txt for %s in
+    // NameType.* as a list of supported
+    // languages, and a second part that provides instance methods for accessing
+    // this set for supported languages.
 
     /**
      * A set of languages.
@@ -139,7 +145,7 @@ public class Languages {
                 final SomeLanguages sl = (SomeLanguages) other;
                 final Set<String> ls = new HashSet<>(languages);
                 for (final String lang : sl.languages) {
-                  ls.add(lang);
+                    ls.add(lang);
                 }
                 return from(ls);
             }
@@ -169,13 +175,8 @@ public class Languages {
     public static Languages getInstance(final String languagesResourceName) {
         // read languages list
         final Set<String> ls = new HashSet<>();
-        final InputStream langIS = Languages.class.getClassLoader().getResourceAsStream(languagesResourceName);
-
-        if (langIS == null) {
-            throw new IllegalArgumentException("Unable to resolve required resource: " + languagesResourceName);
-        }
-
-        try (final Scanner lsScanner = new Scanner(langIS, ResourceConstants.ENCODING)) {
+        try (final Scanner lsScanner = new Scanner(Resources.getInputStream(languagesResourceName),
+                ResourceConstants.ENCODING)) {
             boolean inExtendedComment = false;
             while (lsScanner.hasNextLine()) {
                 final String line = lsScanner.nextLine().trim();
@@ -191,9 +192,8 @@ public class Languages {
                     }
                 }
             }
+            return new Languages(Collections.unmodifiableSet(ls));
         }
-
-        return new Languages(Collections.unmodifiableSet(ls));
     }
 
     private static String langResourceName(final NameType nameType) {
diff --git a/src/main/java/org/apache/commons/codec/language/bm/Rule.java b/src/main/java/org/apache/commons/codec/language/bm/Rule.java
index d6ab4cb..cfacaa7 100644
--- a/src/main/java/org/apache/commons/codec/language/bm/Rule.java
+++ b/src/main/java/org/apache/commons/codec/language/bm/Rule.java
@@ -17,7 +17,6 @@
 
 package org.apache.commons.codec.language.bm;
 
-import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
@@ -32,6 +31,7 @@ import java.util.Set;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import org.apache.commons.codec.Resources;
 import org.apache.commons.codec.language.bm.Languages.LanguageSet;
 
 /**
@@ -254,24 +254,12 @@ public class Rule {
 
     private static Scanner createScanner(final NameType nameType, final RuleType rt, final String lang) {
         final String resName = createResourceName(nameType, rt, lang);
-        final InputStream rulesIS = Languages.class.getClassLoader().getResourceAsStream(resName);
-
-        if (rulesIS == null) {
-            throw new IllegalArgumentException("Unable to load resource: " + resName);
-        }
-
-        return new Scanner(rulesIS, ResourceConstants.ENCODING);
+        return new Scanner(Resources.getInputStream(resName), ResourceConstants.ENCODING);
     }
 
     private static Scanner createScanner(final String lang) {
         final String resName = String.format("org/apache/commons/codec/language/bm/%s.txt", lang);
-        final InputStream rulesIS = Languages.class.getClassLoader().getResourceAsStream(resName);
-
-        if (rulesIS == null) {
-            throw new IllegalArgumentException("Unable to load resource: " + resName);
-        }
-
-        return new Scanner(rulesIS, ResourceConstants.ENCODING);
+        return new Scanner(Resources.getInputStream(resName), ResourceConstants.ENCODING);
     }
 
     private static boolean endsWith(final CharSequence input, final CharSequence suffix) {
diff --git a/src/test/java/org/apache/commons/codec/language/bm/BeiderMorseEncoderTest.java b/src/test/java/org/apache/commons/codec/language/bm/BeiderMorseEncoderTest.java
index 98be564..2134c5b 100644
--- a/src/test/java/org/apache/commons/codec/language/bm/BeiderMorseEncoderTest.java
+++ b/src/test/java/org/apache/commons/codec/language/bm/BeiderMorseEncoderTest.java
@@ -115,7 +115,7 @@ public class BeiderMorseEncoderTest extends StringEncoderAbstractTest<StringEnco
         Rule.getInstance(NameType.GENERIC, RuleType.APPROX, "noSuchLanguage");
     }
 
-    @Test(expected = IllegalStateException.class)
+    @Test(expected = IllegalArgumentException.class)
     public void testInvalidLangIllegalStateException() {
         Lang.loadFromResource("thisIsAMadeUpResourceName", Languages.getInstance(NameType.GENERIC));
     }