001package gudusoft.gsqlparser.dlineage.graph.utils;
002
003import java.io.IOException;
004import java.io.Writer;
005import java.util.HashMap;
006import java.util.HashSet;
007
008
009public class LookupTranslator extends CharSequenceTranslator {
010    private final HashMap<String, String> lookupMap = new HashMap();
011    private final HashSet<Character> prefixSet = new HashSet();
012    private final int shortest;
013    private final int longest;
014
015    public LookupTranslator(CharSequence[]... lookup) {
016        int _shortest = 2147483647;
017        int _longest = 0;
018        if (lookup != null) {
019            CharSequence[][] var4 = lookup;
020            int var5 = lookup.length;
021
022            for(int var6 = 0; var6 < var5; ++var6) {
023                CharSequence[] seq = var4[var6];
024                this.lookupMap.put(seq[0].toString(), seq[1].toString());
025                this.prefixSet.add(seq[0].charAt(0));
026                int sz = seq[0].length();
027                if (sz < _shortest) {
028                    _shortest = sz;
029                }
030
031                if (sz > _longest) {
032                    _longest = sz;
033                }
034            }
035        }
036
037        this.shortest = _shortest;
038        this.longest = _longest;
039    }
040
041    public int translate(CharSequence input, int index, Writer out) throws IOException {
042        if (this.prefixSet.contains(input.charAt(index))) {
043            int max = this.longest;
044            if (index + this.longest > input.length()) {
045                max = input.length() - index;
046            }
047
048            for(int i = max; i >= this.shortest; --i) {
049                CharSequence subSeq = input.subSequence(index, index + i);
050                String result = (String)this.lookupMap.get(subSeq.toString());
051                if (result != null) {
052                    out.write(result);
053                    return i;
054                }
055            }
056        }
057
058        return 0;
059    }
060}