    001    package org.maltparser.core.symbol.nullvalue;
    002
    003    import org.maltparser.core.symbol.SymbolTable;
    004    /**
    005
    006
    007    @author Johan Hall
    008    @since 1.0
    009     */
    010    public class OutputNullValues extends NullValues {
    011            private String rootLabel;
    012
    013            public OutputNullValues(String nullValueStrategy, SymbolTable table, String rootLabel) {
    014                    super(table);
    015                    setRootLabel(rootLabel);
    016                    setNullValueEncoding(nullValueStrategy);
    017                    makeNullValues();
    018            }
    019
    020            private void setRootLabel(String rootLabel) {
    021                    if (rootLabel == null) {
    022                            this.rootLabel = "ROOT";
    023                    }
    024                    this.rootLabel = rootLabel;
    025            }
    026
    027            public String getRootLabel() {
    028                    return rootLabel;
    029            }
    030
    031            protected void setNullValueEncoding(String nullValueStrategy) {
    032                    setNullValueStrategy(nullValueStrategy);
    033                    if (nullValueStrategy.equalsIgnoreCase("none")) {
    034                            nullValueEncoding = NullValueDegree.NONE;
    035                    } else if (nullValueStrategy.equalsIgnoreCase("rootlabel")) {
    036                            nullValueEncoding = NullValueDegree.ROOTLABEL;
    037                    } else if (nullValueStrategy.equalsIgnoreCase("rootnode")) {
    038                            nullValueEncoding = NullValueDegree.ROOTNODE;
    039                    } else if (nullValueStrategy.equalsIgnoreCase("novalue")) {
    040                            nullValueEncoding = NullValueDegree.NOVALUE;
    041                    } else {
    042                            nullValueEncoding = NullValueDegree.ONE;
    043                    }
    044            }
    045
    046            protected void makeNullValues() {
    047                    if (nullValueEncoding == NullValueDegree.NONE || nullValueEncoding == NullValueDegree.ONE) {
    048                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
    049                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#null#");
    050                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#null#");
    051                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
    052                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 0);
    053                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 0);
    054                            symbol2CodeMap.put("#null#", 0);
    055                            code2SymbolMap.put(0, "#null#");
    056                            setNextCode(1);
    057                    } else if (nullValueEncoding == NullValueDegree.ROOTLABEL) {
    058                            nullValue2SymbolMap.put(NullValueId.NO_NODE, rootLabel);
    059                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, rootLabel);
    060                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, rootLabel);
    061                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
    062                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 0);
    063                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 0);
    064                            symbol2CodeMap.put(rootLabel, 0);
    065                            code2SymbolMap.put(0, rootLabel);
    066                            setNextCode(1);
    067                    } else if (nullValueEncoding == NullValueDegree.ROOTNODE) {
    068                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
    069                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
    070                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#rootnode#"); // maybe #null#
    071                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
    072                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
    073                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 1); // maybe 0
    074                            symbol2CodeMap.put("#null#", 0);
    075                            symbol2CodeMap.put("#rootnode#", 1);
    076                            code2SymbolMap.put(0, "#null#");
    077                            code2SymbolMap.put(1, "#rootnode#");
    078                            setNextCode(2);
    079                    } else if (nullValueEncoding == NullValueDegree.NOVALUE) {
    080                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
    081                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
    082                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#novalue#");
    083                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
    084                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
    085                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 2);
    086                            symbol2CodeMap.put("#null#", 0);
    087                            symbol2CodeMap.put("#rootnode#", 1);
    088                            symbol2CodeMap.put("#novalue#", 2);
    089                            code2SymbolMap.put(0, "#null#");
    090                            code2SymbolMap.put(1, "#rootnode#");
    091                            code2SymbolMap.put(1, "#novalue#");
    092                            setNextCode(3);
    093                    }
    094            }
    095
    096            public String toString() {
    097                    StringBuilder sb = new StringBuilder();
    098
    099                    return sb.toString();
    100            }
    101    }