001 package org.expasy.jpl.commons.collection.symbol;
002
003
004 import java.util.HashMap;
005 import java.util.Map;
006 import java.util.Set;
007 import org.expasy.jpl.commons.collection.symbol.Symbol.SymbolType;
008 import org.expasy.jpl.commons.collection.tree.TreeView;
009
010
011 /**
012 * Generic data symbol manager to include in jpl.
013 *
014 * @author nikitin
015 *
016 * @param <T>
017 *
018 * @version 1.0
019 *
020 */
021 public abstract class AbstractDataSymbolRegister<T> implements
022 DataSymbolRegister<T> {
023
024 private static final long serialVersionUID = -6039773204711212086L;
025
026 private Map<Character, T> letter2data;
027
028 protected Map<Symbol<T>, T> sym2data;
029
030 /** the symbol type */
031 private SymbolType<T> type;
032
033 /** data symbol alphabet */
034 private AlphabetImpl<T> alphabet;
035
036 protected AbstractDataSymbolRegister(SymbolType<T> type) {
037 this.type = type;
038
039 // Char -> T-data
040 letter2data = createDataMap();
041
042 // Symbol -> T-data
043 sym2data = new HashMap<Symbol<T>, T>();
044
045 alphabet = (AlphabetImpl<T>) type.getAlphabet();
046
047 for (Symbol<T> leaveSymbol : alphabet.getSymbolLeaves()) {
048
049 // get molecule from symbol name character
050 T data = letter2data.get(leaveSymbol.getName());
051
052 // link terminal symbols to amino-acids
053 link(leaveSymbol, data);
054 }
055 }
056
057 public T lookupData(Symbol<T> symbol) {
058 return sym2data.get(symbol);
059 }
060
061 public boolean hasSymbol(char symbol) {
062 return sym2data.containsKey(symbol);
063 }
064
065 public int getSymbolNumber() {
066 return sym2data.size();
067 }
068
069 public Symbol<T> lookupSymbol(char name) {
070 return type.getAlphabet().lookupSymbol(name);
071 }
072
073 public TreeView<? extends Symbol<T>> lookupSymbolNode(char name) {
074 return type.getAlphabet().lookupSymbolNode(name);
075 }
076
077 public Set<Character> getLetters() {
078 return letter2data.keySet();
079 }
080
081 public String getRegEx() {
082 return type.getAlphabet().getRegEx();
083 }
084
085 public String toString() {
086 return type.getAlphabet().toString();
087 }
088
089 public abstract T lookupData(char name);
090
091 public abstract void link(Symbol<T> symbol, T data);
092
093 public abstract Map<Character, T> createDataMap();
094
095 }