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    
012            public OutputNullValues(String nullValueStrategy, SymbolTable table) {
013                    super(table);
014    
015                    setNullValueEncoding(nullValueStrategy);
016                    makeNullValues();
017            }
018            
019            protected void setNullValueEncoding(String nullValueStrategy) {
020                    setNullValueStrategy(nullValueStrategy);
021                    if (nullValueStrategy.equalsIgnoreCase("none")) {
022                            nullValueEncoding = NullValueDegree.NONE;
023                    } else if (nullValueStrategy.equalsIgnoreCase("rootnode")) {
024                            nullValueEncoding = NullValueDegree.ROOTNODE;
025                    } else if (nullValueStrategy.equalsIgnoreCase("novalue")) {
026                            nullValueEncoding = NullValueDegree.NOVALUE;
027                    } else {
028                            nullValueEncoding = NullValueDegree.ONE;
029                    }
030            }
031            
032            protected void makeNullValues() {
033                    if (nullValueEncoding == NullValueDegree.NONE || nullValueEncoding == NullValueDegree.ONE) {
034                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
035                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#null#");
036                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#null#");
037                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
038                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 0);
039                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 0);
040                            symbol2CodeMap.put("#null#", 0);
041                            code2SymbolMap.put(0, "#null#");
042                            setNextCode(1);
043                    } else if (nullValueEncoding == NullValueDegree.ROOTNODE) {
044                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
045                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
046                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#rootnode#"); // maybe #null#
047                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
048                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
049                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 1); // maybe 0
050                            symbol2CodeMap.put("#null#", 0);
051                            symbol2CodeMap.put("#rootnode#", 1);
052                            code2SymbolMap.put(0, "#null#");
053                            code2SymbolMap.put(1, "#rootnode#");
054                            setNextCode(2);
055                    } else if (nullValueEncoding == NullValueDegree.NOVALUE) {
056                            nullValue2SymbolMap.put(NullValueId.NO_NODE, "#null#");
057                            nullValue2SymbolMap.put(NullValueId.ROOT_NODE, "#rootnode#");
058                            nullValue2SymbolMap.put(NullValueId.NO_VALUE, "#novalue#"); 
059                            nullValue2CodeMap.put(NullValueId.NO_NODE, 0);
060                            nullValue2CodeMap.put(NullValueId.ROOT_NODE, 1);
061                            nullValue2CodeMap.put(NullValueId.NO_VALUE, 2); 
062                            symbol2CodeMap.put("#null#", 0);
063                            symbol2CodeMap.put("#rootnode#", 1);
064                            symbol2CodeMap.put("#novalue#", 2);
065                            code2SymbolMap.put(0, "#null#");
066                            code2SymbolMap.put(1, "#rootnode#");
067                            code2SymbolMap.put(1, "#novalue#");
068                            setNextCode(3);
069                    }
070            }
071            
072            public String toString() {
073                    StringBuilder sb = new StringBuilder();
074                    
075                    return sb.toString();
076            }
077    }