001    package org.maltparser.core.syntaxgraph.edge;
002    
003    import org.maltparser.core.exception.MaltChainedException;
004    import org.maltparser.core.syntaxgraph.Weightable;
005    import org.maltparser.core.syntaxgraph.node.Node;
006    /**
007    *
008    *
009    * @author Johan Hall
010    */
011    public class WeightedEdge extends GraphEdge implements Weightable {
012            private Double weight = Double.NaN;
013            
014            public WeightedEdge() { }
015            
016            public WeightedEdge(Node source, Node target, int type) throws MaltChainedException {
017                    super(source, target, type);
018            }
019    
020            public WeightedEdge(Node source, Node target, int type, Double weight) throws MaltChainedException {
021                    super(source, target, type);
022                    setWeight(weight);
023            }
024            
025            public void clear() throws MaltChainedException {
026                    super.clear();
027                    weight = Double.NaN;
028            }
029            
030            public double getWeight() {
031                    return weight.doubleValue();
032            }
033    
034            public void setWeight(double weight) {
035                    this.weight = weight;
036            }
037            
038            public int compareTo(WeightedEdge that) {
039                if (this == that) return 0;
040                int comparison = this.weight.compareTo(that.getWeight());
041                if ( comparison != 0 ) return comparison;
042                
043                return super.compareTo(that);
044            }
045            
046            public boolean equals(Object obj) {
047                    WeightedEdge e = (WeightedEdge)obj;
048                    return weight.equals(e.getWeight()) && super.equals(obj); 
049            }
050            
051            public int hashCode() {
052                    int hash = 7;
053                    hash = 31 * hash + (null == weight ? 0 : weight.hashCode());
054                    return 31 * hash + super.hashCode();
055            }
056            
057            public String toString() {
058                    final StringBuilder sb = new StringBuilder();
059                    sb.append(getWeight());
060                    sb.append(' ');
061                    sb.append(getSource().getIndex());
062                    sb.append("->");
063                    sb.append(getTarget().getIndex());
064                    sb.append(' ');
065                    sb.append(super.toString());
066                    return sb.toString();
067            }
068    }