    001    package org.maltparser.parser.transition;
    002
    003    import java.util.SortedMap;
    004    import java.util.TreeMap;
    005
    006    import org.maltparser.core.exception.MaltChainedException;
    007    import org.maltparser.core.helper.HashMap;
    008    import org.maltparser.core.symbol.Table;
    009    import org.maltparser.parser.history.container.DecisionPropertyTable;
    010    /**
    011    *
    012    * @author Johan Hall
    013    * @since 1.1
    014    **/
    015    public class TransitionTable implements Table, DecisionPropertyTable {
    016            private String name;
    017            private final SortedMap<Integer,Transition> code2transitionMap;
    018            private final HashMap<String,Transition> symbol2transitionMap;
    019            private final HashMap<Transition,TransitionTable> childrenTables;
    020
    021            public TransitionTable(String tableName) {
    022                    setName(name);
    023                    code2transitionMap = new TreeMap<Integer,Transition>();
    024                    symbol2transitionMap = new HashMap<String,Transition>();
    025                    childrenTables = new HashMap<Transition,TransitionTable>();
    026            }
    027
    028            public void addTransition(int code, String symbol, boolean labeled, TransitionTable childrenTable) {
    029                    final Transition transition = new Transition(code, symbol, labeled);
    030                    code2transitionMap.put(code,transition);
    031                    symbol2transitionMap.put(symbol, transition);
    032                    if (childrenTable != null) {
    033                            childrenTables.put(transition, childrenTable);
    034                    }
    035            }
    036
    037            public boolean continueWithNextDecision(int code) throws MaltChainedException {
    038                    if (code2transitionMap.containsKey(code)) {
    039                            return code2transitionMap.get(code).isLabeled();
    040                    }
    041                    return true;
    042            }
    043
    044            public boolean continueWithNextDecision(String symbol) throws MaltChainedException {
    045                    if (symbol2transitionMap.containsKey(symbol)) {
    046                            return symbol2transitionMap.get(symbol).isLabeled();
    047                    }
    048                    return true;
    049            }
    050
    051            public Table getTableForNextDecision(int code) throws MaltChainedException {
    052                    if (code2transitionMap.containsKey(code)) {
    053                            return childrenTables.get(code2transitionMap.get(code));
    054                    }
    055                    return null;
    056            }
    057
    058            public Table getTableForNextDecision(String symbol) throws MaltChainedException {
    059                    if (symbol2transitionMap.containsKey(symbol)) {
    060                            return childrenTables.get(symbol2transitionMap.get(symbol));
    061                    }
    062                    return null;
    063            }
    064
    065            public Transition getTransition(String symbol) {
    066                    return symbol2transitionMap.get(symbol);
    067            }
    068
    069            public Transition getTransition(int code) {
    070                    return code2transitionMap.get(code);
    071            }
    072
    073            public int addSymbol(String symbol) throws MaltChainedException {
    074                    return -1;
    075            }
    076
    077            public String getName() {
    078                    return name;
    079            }
    080
    081
    082            public String getSymbolCodeToString(int code) throws MaltChainedException {
    083                    if (code < 0) {
    084                            return null;
    085                    }
    086                    return code2transitionMap.get(code).getSymbol();
    087            }
    088
    089            public int getSymbolStringToCode(String symbol) throws MaltChainedException {
    090                    if (symbol == null) {
    091                            return -1;
    092                    }
    093                    return symbol2transitionMap.get(symbol).getCode();
    094            }
    095
    096            protected void setName(String name) {
    097                    this.name = name;
    098            }
    099
    100            public int size() {
    101                    return code2transitionMap.size();
    102            }
    103
    104    }