    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    }