001package org.maltparser.core.syntaxgraph.headrules;
002
003import org.maltparser.core.exception.MaltChainedException;
004import org.maltparser.core.io.dataformat.ColumnDescription;
005import org.maltparser.core.symbol.SymbolTable;
006/**
007*
008*
009* @author Johan Hall
010*/
011public class PrioSetMember {
012        protected enum RelationToPrevMember {
013                START, DISJUNCTION, CONJUNCTION
014        };
015        protected PrioSet prioSet;
016        protected SymbolTable table;
017        protected ColumnDescription column;
018        protected int symbolCode;
019        protected RelationToPrevMember relationToPrevMember;
020    
021        public PrioSetMember(PrioSet prioSet, SymbolTable table, ColumnDescription column, int symbolCode, RelationToPrevMember relationToPrevMember) {
022                setPrioSet(prioSet);
023                setTable(table);
024                setColumn(column);
025                setSymbolCode(symbolCode);
026                setRelationToPrevMember(relationToPrevMember);
027        }
028
029        public PrioSetMember(PrioSet prioSet, SymbolTable table, ColumnDescription column, String symbolString, RelationToPrevMember relationToPrevMember) throws MaltChainedException {
030                setPrioSet(prioSet);
031                setTable(table);
032                setColumn(column);
033                if (table != null) {
034                        setSymbolCode(table.getSymbolStringToCode(symbolString));
035                } else {
036                        setSymbolCode(-1);
037                }
038                setRelationToPrevMember(relationToPrevMember);
039        }
040        
041        public PrioSet getPrioSet() {
042                return prioSet;
043        }
044
045        public void setPrioSet(PrioSet prioSet) {
046                this.prioSet = prioSet;
047        }
048
049        
050        public ColumnDescription getColumn() {
051                return column;
052        }
053
054        public void setColumn(ColumnDescription column) {
055                this.column = column;
056        }
057
058        public SymbolTable getTable() {
059                return table;
060        }
061
062        public void setTable(SymbolTable table) {
063                this.table = table;
064        }
065
066        public int getSymbolCode() {
067                return symbolCode;
068        }
069
070        public String getSymbolString() throws MaltChainedException {
071                if (table != null && symbolCode >= 0) {
072                        return table.getSymbolCodeToString(symbolCode);
073                } else {
074                        return null;
075                }
076        }
077        
078        public void setSymbolCode(int symbolCode) {
079                this.symbolCode = symbolCode;
080        }
081        
082        public RelationToPrevMember getRelationToPrevMember() {
083                return relationToPrevMember;
084        }
085
086        public void setRelationToPrevMember(RelationToPrevMember relationToPrevMember) {
087                this.relationToPrevMember = relationToPrevMember;
088        }
089        
090        public int hashCode() {
091                final int prime = 31;
092                int result = 1;
093                result = prime * result + symbolCode;
094                result = prime
095                                * result
096                                + ((relationToPrevMember == null) ? 0 : relationToPrevMember
097                                                .hashCode());
098                return result;
099        }
100
101
102        public boolean equals(Object obj) {
103                if (this == obj)
104                        return true;
105                if (obj == null)
106                        return false;
107                if (getClass() != obj.getClass())
108                        return false;
109                PrioSetMember other = (PrioSetMember) obj;
110                if (symbolCode != other.symbolCode)
111                        return false;
112                if (relationToPrevMember == null) {
113                        if (other.relationToPrevMember != null)
114                                return false;
115                } else if (!relationToPrevMember.equals(other.relationToPrevMember))
116                        return false;
117
118                return true;
119        }
120
121        public String toString() {
122                final StringBuilder sb = new StringBuilder();
123                sb.append(table.getName());
124                sb.append(':');
125                try {
126                        sb.append(getSymbolString());
127                } catch (MaltChainedException e) {
128                        if (prioSet.getLogger().isDebugEnabled()) {
129                                prioSet.getLogger().debug("",e);
130                        } else {
131                                prioSet.getLogger().error(e.getMessageChain());
132                        }
133                }
134                return sb.toString();
135        }
136}