    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     * <p>This class is immutable and thread-safe.</p>
    030     *
    031     * @version $Id: Caverphone.java 1075947 2011-03-01 17:56:14Z ggregory $
    032     * @see <a href="http://en.wikipedia.org/wiki/Caverphone">Wikipedia - Caverphone</a>
    033     * @since 1.5
    034     */
    035    public abstract class AbstractCaverphone implements StringEncoder {
    036
    037        /**
    038         * Creates an instance of the Caverphone encoder
    039         */
    040        public AbstractCaverphone() {
    041            super();
    042        }
    043
    044        /**
    045         * Encodes an Object using the caverphone algorithm. This method is provided in order to satisfy the requirements of
    046         * the Encoder interface, and will throw an EncoderException if the supplied object is not of type java.lang.String.
    047         *
    048         * @param source
    049         *            Object to encode
    050         * @return An object (or type java.lang.String) containing the caverphone code which corresponds to the String
    051         *         supplied.
    052         * @throws EncoderException
    053         *             if the parameter supplied is not of type java.lang.String
    054         */
    055        @Override
    056        public Object encode(final Object source) throws EncoderException {
    057            if (!(source instanceof String)) {
    058                throw new EncoderException("Parameter supplied to Caverphone encode is not of type java.lang.String");
    059            }
    060            return this.encode((String) source);
    061        }
    062
    063        /**
    064         * Tests if the encodings of two strings are equal.
    065         *
    066         * This method might be promoted to a new AbstractStringEncoder superclass.
    067         *
    068         * @param str1
    069         *            First of two strings to compare
    070         * @param str2
    071         *            Second of two strings to compare
    072         * @return {@code true} if the encodings of these strings are identical, {@code false} otherwise.
    073         * @throws EncoderException
    074         */
    075        public boolean isEncodeEqual(final String str1, final String str2) throws EncoderException {
    076            return this.encode(str1).equals(this.encode(str2));
    077        }
    078
    079    }