001// Copyright 2004, 2005 The Apache Software Foundation
002//
003// Licensed under the Apache License, Version 2.0 (the "License");
004// you may not use this file except in compliance with the License.
005// You may obtain a copy of the License at
006//
007//     http://www.apache.org/licenses/LICENSE-2.0
008//
009// Unless required by applicable law or agreed to in writing, software
010// distributed under the License is distributed on an "AS IS" BASIS,
011// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
012// See the License for the specific language governing permissions and
013// limitations under the License.
014
015package org.apache.tapestry.util.text;
016
017/**
018 * An object that translates selected ASCII characters into equivalent strings.
019 * 
020 * @author mb
021 * @since 4.0
022 */
023public class AsciiCharacterTranslator implements ICharacterTranslator
024{
025        private String[] _charMap;
026        
027        /**
028         * Creates and initializes a new translator that translates the provided 
029         * ASCII characters into strings. All other characters will be translated to null.
030         * 
031         * @param characterMap an array of pairs of strings. 
032         *        Each pair consists of a key that must be a single ASCII character, 
033         *        and a value that is its equivalent string. 
034         */
035        public AsciiCharacterTranslator(String[][] characterMap)
036        {
037                _charMap = new String[128];
038                
039                int pairCount = characterMap.length;
040                for (int i = 0; i < pairCount; i++) {
041                        String[] pair = characterMap[i];
042                        if (pair.length != 2)
043                                continue;
044                        String key = pair[0];
045                        String value = pair[1];
046                        if (key.length() != 1)
047                                continue;
048                        char ch = key.charAt(0);
049                        if (ch >= 128)
050                                continue;
051                        
052                        _charMap[ch] = value;
053                }
054        }
055        
056        /**
057         * @see org.apache.tapestry.util.text.ICharacterTranslator#translate(char)
058         */
059        public String translate(char ch) {
060                if (ch >= 128)
061                        return null;
062                return _charMap[ch];
063        }
064}