001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package org.apache.commons.codec.language;
019
020 import org.apache.commons.codec.EncoderException;
021 import org.apache.commons.codec.StringEncoder;
022
023 /**
024 * Encodes a string into a Caverphone value.
025 *
026 * This is an algorithm created by the Caversham Project at the University of Otago. It implements the Caverphone 2.0
027 * algorithm:
028 *
029 * @author Apache Software Foundation
030 * @version $Id: Caverphone.java 1075947 2011-03-01 17:56:14Z ggregory $
031 * @see <a href="http://en.wikipedia.org/wiki/Caverphone">Wikipedia - Caverphone</a>
032 * @since 1.5
033 */
034 public abstract class AbstractCaverphone implements StringEncoder {
035
036 /**
037 * Creates an instance of the Caverphone encoder
038 */
039 public AbstractCaverphone() {
040 super();
041 }
042
043 /**
044 * Encodes an Object using the caverphone algorithm. This method is provided in order to satisfy the requirements of
045 * the Encoder interface, and will throw an EncoderException if the supplied object is not of type java.lang.String.
046 *
047 * @param source
048 * Object to encode
049 * @return An object (or type java.lang.String) containing the caverphone code which corresponds to the String
050 * supplied.
051 * @throws EncoderException
052 * if the parameter supplied is not of type java.lang.String
053 */
054 public Object encode(Object source) throws EncoderException {
055 if (!(source instanceof String)) {
056 throw new EncoderException("Parameter supplied to Caverphone encode is not of type java.lang.String");
057 }
058 return this.encode((String) source);
059 }
060
061 /**
062 * Tests if the encodings of two strings are equal.
063 *
064 * This method might be promoted to a new AbstractStringEncoder superclass.
065 *
066 * @param str1
067 * First of two strings to compare
068 * @param str2
069 * Second of two strings to compare
070 * @return <code>true</code> if the encodings of these strings are identical, <code>false</code> otherwise.
071 * @throws EncoderException
072 */
073 public boolean isEncodeEqual(String str1, String str2) throws EncoderException {
074 return this.encode(str1).equals(this.encode(str2));
075 }
076
077 }