Author: ggregory
Date: Tue Aug  9 01:16:09 2011
New Revision: 1155182

URL: http://svn.apache.org/viewvc?rev=1155182&view=rev
Log:
[CODEC-125] Implement a Beider-Morse phonetic matching codec. Applied patch 
https://issues.apache.org/jira/secure/attachment/12489767/comparator.patch

Modified:
    
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
    
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java
    
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java

Modified: 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java?rev=1155182&r1=1155181&r2=1155182&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
 (original)
+++ 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/PhoneticEngine.java
 Tue Aug  9 01:16:09 2011
@@ -251,7 +251,7 @@ public class PhoneticEngine {
             return phonemeBuilder;
         }
 
-        Set<Rule.Phoneme> phonemes = new TreeSet<Rule.Phoneme>();
+        Set<Rule.Phoneme> phonemes = new 
TreeSet<Rule.Phoneme>(Rule.Phoneme.COMPARATOR);
 
         for (Rule.Phoneme phoneme : phonemeBuilder.getPhonemes()) {
             PhonemeBuilder subBuilder = 
PhonemeBuilder.empty(phoneme.getLanguages());

Modified: 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java?rev=1155182&r1=1155181&r2=1155182&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java
 (original)
+++ 
commons/proper/codec/trunk/src/java/org/apache/commons/codec/language/bm/Rule.java
 Tue Aug  9 01:16:09 2011
@@ -21,6 +21,7 @@ import java.io.InputStream;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
+import java.util.Comparator;
 import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -80,7 +81,26 @@ import java.util.regex.Pattern;
  */
 public class Rule {
 
-    public static final class Phoneme implements PhonemeExpr, 
Comparable<Phoneme> {
+    public static final class Phoneme implements PhonemeExpr {
+        public static final Comparator<Phoneme> COMPARATOR = new 
Comparator<Phoneme>() {
+            public int compare(Phoneme o1, Phoneme o2) {
+                for (int i = 0; i < o1.phonemeText.length(); i++) {
+                    if (i >= o2.phonemeText.length()) {
+                        return +1;
+                    }
+                    int c = o1.phonemeText.charAt(i) - 
o2.phonemeText.charAt(i);
+                    if (c != 0) {
+                        return c;
+                    }
+                }
+
+                if (o1.phonemeText.length() < o2.phonemeText.length()) {
+                    return -1;
+                }
+
+                return 0;
+            }
+        };
 
         private final CharSequence phonemeText;
         private final Languages.LanguageSet languages;
@@ -94,24 +114,6 @@ public class Rule {
             return new Phoneme(this.phonemeText.toString() + str.toString(), 
this.languages);
         }
 
-        public int compareTo(Phoneme o) {
-            for (int i = 0; i < phonemeText.length(); i++) {
-                if (i >= o.phonemeText.length()) {
-                    return +1;
-                }
-                int c = phonemeText.charAt(i) - o.phonemeText.charAt(i);
-                if (c != 0) {
-                    return c;
-                }
-            }
-
-            if (phonemeText.length() < o.phonemeText.length()) {
-                return -1;
-            }
-
-            return 0;
-        }
-
         public Languages.LanguageSet getLanguages() {
             return this.languages;
         }

Modified: 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java
URL: 
http://svn.apache.org/viewvc/commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java?rev=1155182&r1=1155181&r2=1155182&view=diff
==============================================================================
--- 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java
 (original)
+++ 
commons/proper/codec/trunk/src/test/org/apache/commons/codec/language/bm/RuleTest.java
 Tue Aug  9 01:16:09 2011
@@ -63,7 +63,7 @@ public class RuleTest {
         for (Rule.Phoneme[] phs : makePhonemes()) {
             for (int i = 0; i < phs.length; i++) {
                 for (int j = i + 1; j < phs.length; j++) {
-                    int c = phs[i].compareTo(phs[j]);
+                    int c = Rule.Phoneme.COMPARATOR.compare(phs[i], phs[j]);
 
                     assertThat("Comparing " + phs[i].getPhonemeText() + " to " 
+ phs[j].getPhonemeText() + " should be negative", c,
                             new NegativeIntegerBaseMatcher());
@@ -76,7 +76,8 @@ public class RuleTest {
     public void phonemeComparedToSelfIsZero() {
         for (Rule.Phoneme[] phs : makePhonemes()) {
             for (Rule.Phoneme ph : phs) {
-                assertEquals("Phoneme compared to itself should be zero: " + 
ph.getPhonemeText(), 0, ph.compareTo(ph));
+                assertEquals("Phoneme compared to itself should be zero: " + 
ph.getPhonemeText(), 0,
+                        Rule.Phoneme.COMPARATOR.compare(ph, ph));
             }
         }
     }


Reply via email to