001 /*
002 * Sonar, open source software quality management tool.
003 * Copyright (C) 2009 SonarSource SA
004 * mailto:contact AT sonarsource DOT com
005 *
006 * Sonar is free software; you can redistribute it and/or
007 * modify it under the terms of the GNU Lesser General Public
008 * License as published by the Free Software Foundation; either
009 * version 3 of the License, or (at your option) any later version.
010 *
011 * Sonar is distributed in the hope that it will be useful,
012 * but WITHOUT ANY WARRANTY; without even the implied warranty of
013 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014 * Lesser General Public License for more details.
015 *
016 * You should have received a copy of the GNU Lesser General Public
017 * License along with Sonar; if not, write to the Free Software
018 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02
019 */
020 package org.sonar.squid.graph;
021
022 import java.util.HashSet;
023 import java.util.Set;
024
025 public class Edge {
026
027 private final Node from;
028 private final Node to;
029 private final Set<Edge> rootEdges = new HashSet<Edge>();
030 private final Set<Node> rootFromNodes = new HashSet<Node>();
031 private final Set<Node> rootToNodes = new HashSet<Node>();
032 private final EdgeUsage usage;
033
034 public Edge(Node from, Node to, EdgeUsage link) {
035 this(from, to, link, null);
036 }
037
038 public Edge(Node from, Node to, EdgeUsage usage, Edge rootEdge) {
039 this.from = from;
040 this.to = to;
041 this.usage = usage;
042 addRootEdge(rootEdge);
043 }
044
045 public Node getFrom() {
046 return from;
047 }
048
049 public Node getTo() {
050 return to;
051 }
052
053 public boolean hasAnEdgeFromRootNode(Node rootFromNode) {
054 return rootFromNodes.contains(rootFromNode);
055 }
056
057 public boolean hasAnEdgeToRootNode(Node rootToNode) {
058 return rootToNodes.contains(rootToNode);
059 }
060 public EdgeUsage getUsage() {
061 return usage;
062 }
063
064 public Set<Edge> getRootEdges() {
065 return rootEdges;
066 }
067
068 public int getNumberOfRootFromNodes() {
069 return rootFromNodes.size();
070 }
071
072 public void addRootEdge(Edge rootRelationShip) {
073 if (rootRelationShip != null) {
074 rootEdges.add(rootRelationShip);
075 rootFromNodes.add(rootRelationShip.from);
076 rootToNodes.add(rootRelationShip.to);
077 }
078 }
079
080 public int getWeight() {
081 return rootEdges.size();
082 }
083
084 @Override
085 public boolean equals(Object obj) {
086 if (!(obj instanceof Edge)) {
087 return false;
088 }
089 Edge edge = (Edge) obj;
090 return from.equals(edge.from) && to.equals(edge.to);
091 }
092
093 @Override
094 public int hashCode() {
095 return from.hashCode() + to.hashCode() + usage.hashCode();
096 }
097 }