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));
}