1 /*
2  * Copyright (c) 2008, 2015, Oracle and/or its affiliates. All rights reserved.
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * This code is free software; you can redistribute it and/or modify it
6  * under the terms of the GNU General Public License version 2 only, as
7  * published by the Free Software Foundation.
8  *
9  * This code is distributed in the hope that it will be useful, but WITHOUT
10  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12  * version 2 for more details (a copy is included in the LICENSE file that
13  * accompanied this code).
14  *
15  * You should have received a copy of the GNU General Public License version
16  * 2 along with this work; if not, write to the Free Software Foundation,
17  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18  *
19  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20  * or visit www.oracle.com if you need additional information or have any
21  * questions.
22  *
23  */
24 package com.sun.hotspot.igv.graph;
25 
26 import com.sun.hotspot.igv.data.Source;
27 import com.sun.hotspot.igv.layout.Link;
28 import com.sun.hotspot.igv.layout.Port;
29 import java.awt.Color;
30 import java.awt.Point;
31 import java.util.ArrayList;
32 import java.util.List;
33 
34 /**
35  *
36  * @author Thomas Wuerthinger
37  */
38 public class Connection implements Source.Provider, Link {
39 
40     @Override
isVIP()41     public boolean isVIP() {
42         return style == ConnectionStyle.BOLD;
43     }
44 
45     public enum ConnectionStyle {
46 
47         NORMAL,
48         DASHED,
49         BOLD
50     }
51     private InputSlot inputSlot;
52     private OutputSlot outputSlot;
53     private Source source;
54     private Color color;
55     private ConnectionStyle style;
56     private List<Point> controlPoints;
57     private String label;
58     private String type;
59 
Connection(InputSlot inputSlot, OutputSlot outputSlot, String label, String type)60     protected Connection(InputSlot inputSlot, OutputSlot outputSlot, String label, String type) {
61         this.inputSlot = inputSlot;
62         this.outputSlot = outputSlot;
63         this.label = label;
64         this.type = type;
65         this.inputSlot.connections.add(this);
66         this.outputSlot.connections.add(this);
67         controlPoints = new ArrayList<>();
68         Figure sourceFigure = this.outputSlot.getFigure();
69         Figure destFigure = this.inputSlot.getFigure();
70         sourceFigure.addSuccessor(destFigure);
71         destFigure.addPredecessor(sourceFigure);
72         source = new Source();
73 
74         this.color = Color.BLACK;
75         this.style = ConnectionStyle.NORMAL;
76     }
77 
getInputSlot()78     public InputSlot getInputSlot() {
79         return inputSlot;
80     }
81 
getOutputSlot()82     public OutputSlot getOutputSlot() {
83         return outputSlot;
84     }
85 
getColor()86     public Color getColor() {
87         return color;
88     }
89 
getStyle()90     public ConnectionStyle getStyle() {
91         return style;
92     }
93 
setColor(Color c)94     public void setColor(Color c) {
95         color = c;
96     }
97 
setStyle(ConnectionStyle s)98     public void setStyle(ConnectionStyle s) {
99         style = s;
100     }
101 
102     @Override
getSource()103     public Source getSource() {
104         return source;
105     }
106 
getLabel()107     public String getLabel() {
108         return label;
109     }
110 
getType()111     public String getType() {
112         return type;
113     }
114 
remove()115     public void remove() {
116         inputSlot.getFigure().removePredecessor(outputSlot.getFigure());
117         inputSlot.connections.remove(this);
118         outputSlot.getFigure().removeSuccessor(inputSlot.getFigure());
119         outputSlot.connections.remove(this);
120     }
121 
getToolTipText()122     public String getToolTipText() {
123         StringBuilder builder = new StringBuilder();
124         if (label != null) {
125             builder.append(label).append(": ");
126         }
127         if (type != null) {
128             builder.append(type).append(" ");
129         }
130         builder.append("from ");
131         builder.append(getOutputSlot().getFigure().getSource().getSourceNodes().get(0).getId());
132         builder.append(" to ");
133         builder.append(getInputSlot().getFigure().getSource().getSourceNodes().get(0).getId());
134         return builder.toString();
135     }
136 
137     @Override
toString()138     public String toString() {
139         return "Connection('" + label + "', " + getFrom().getVertex() + " to " + getTo().getVertex() + ")";
140     }
141 
142     @Override
getFrom()143     public Port getFrom() {
144         return outputSlot;
145     }
146 
147     @Override
getTo()148     public Port getTo() {
149         return inputSlot;
150     }
151 
152     @Override
getControlPoints()153     public List<Point> getControlPoints() {
154         return controlPoints;
155     }
156 
157     @Override
setControlPoints(List<Point> list)158     public void setControlPoints(List<Point> list) {
159         controlPoints = list;
160     }
161 }
162 
163