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}