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    }