Skip to content

Commit a1c349f

Browse files
8290063: IGV: Give the graphs a unique number in the outline
Reviewed-by: thartmann, chagedorn
1 parent b807470 commit a1c349f

File tree

11 files changed

+214
-69
lines changed

11 files changed

+214
-69
lines changed

Diff for: src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/FolderNode.java

+53-29
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,11 @@
2929
import com.sun.hotspot.igv.util.StringUtils;
3030
import java.awt.Image;
3131
import java.util.HashMap;
32-
import java.util.List;
3332
import java.util.Map;
34-
import org.openide.nodes.AbstractNode;
35-
import org.openide.nodes.Children;
36-
import org.openide.nodes.Node;
37-
import org.openide.nodes.Sheet;
33+
import javax.swing.Action;
34+
import org.openide.actions.PropertiesAction;
35+
import org.openide.actions.RenameAction;
36+
import org.openide.nodes.*;
3837
import org.openide.util.ImageUtilities;
3938
import org.openide.util.lookup.AbstractLookup;
4039
import org.openide.util.lookup.InstanceContent;
@@ -49,7 +48,7 @@ public class FolderNode extends AbstractNode {
4948
private final FolderChildren children;
5049
// NetBeans node corresponding to each opened graph. Used to highlight the
5150
// focused graph in the Outline window.
52-
private static final Map<InputGraph, GraphNode> graphNode = new HashMap<>();
51+
private static final Map<InputGraph, GraphNode> graphNodeMap = new HashMap<>();
5352
private boolean selected = false;
5453

5554
private static class FolderChildren extends Children.Keys<FolderElement> implements ChangedListener {
@@ -66,14 +65,14 @@ public Folder getFolder() {
6665
}
6766

6867
@Override
69-
protected Node[] createNodes(FolderElement e) {
70-
if (e instanceof InputGraph) {
71-
InputGraph g = (InputGraph) e;
72-
GraphNode n = new GraphNode(g);
73-
graphNode.put(g, n);
74-
return new Node[]{n};
75-
} else if (e instanceof Folder) {
76-
return new Node[]{new FolderNode((Folder) e)};
68+
protected Node[] createNodes(FolderElement folderElement) {
69+
if (folderElement instanceof InputGraph) {
70+
InputGraph inputGraph = (InputGraph) folderElement;
71+
GraphNode graphNode = new GraphNode(inputGraph);
72+
graphNodeMap.put(inputGraph, graphNode);
73+
return new Node[]{graphNode};
74+
} else if (folderElement instanceof Group) {
75+
return new Node[]{new FolderNode((Group) folderElement)};
7776
} else {
7877
return null;
7978
}
@@ -83,19 +82,23 @@ protected Node[] createNodes(FolderElement e) {
8382
protected void destroyNodes(Node[] nodes) {
8483
for (Node n : nodes) {
8584
// Each node is only present once in the graphNode map.
86-
graphNode.values().remove(n);
85+
graphNodeMap.values().remove(n);
86+
}
87+
for (Node node : getNodes()) {
88+
node.setDisplayName(node.getDisplayName());
8789
}
8890
}
8991

9092
@Override
9193
public void addNotify() {
92-
this.setKeys(folder.getElements());
94+
super.addNotify();
95+
setKeys(folder.getElements());
9396
}
9497

9598
@Override
9699
public void changed(Object source) {
97100
addNotify();
98-
}
101+
}
99102
}
100103

101104
@Override
@@ -128,7 +131,7 @@ private FolderNode(final Folder folder, FolderChildren children, InstanceContent
128131
if (folder instanceof FolderElement) {
129132
final FolderElement folderElement = (FolderElement) folder;
130133
this.setDisplayName(folderElement.getName());
131-
content.add((RemoveCookie) () -> {
134+
this.content.add((RemoveCookie) () -> {
132135
children.destroyNodes(children.getNodes());
133136
folderElement.getParent().removeElement(folderElement);
134137
});
@@ -141,6 +144,28 @@ public void setSelected(boolean selected) {
141144
fireIconChange();
142145
}
143146

147+
@Override
148+
public boolean canRename() {
149+
return true;
150+
}
151+
152+
@Override
153+
public void setName(String name) {
154+
children.getFolder().setName(name);
155+
fireDisplayNameChange(null, null);
156+
}
157+
158+
@Override
159+
public String getName() {
160+
return children.getFolder().getName();
161+
}
162+
163+
@Override
164+
public String getDisplayName() {
165+
return children.getFolder().getDisplayName();
166+
}
167+
168+
@Override
144169
public String getHtmlDisplayName() {
145170
String htmlDisplayName = StringUtils.escapeHTML(getDisplayName());
146171
if (selected) {
@@ -149,15 +174,6 @@ public String getHtmlDisplayName() {
149174
return htmlDisplayName;
150175
}
151176

152-
public void init(String name, List<Group> groups) {
153-
this.setDisplayName(name);
154-
children.addNotify();
155-
156-
for (Group g : groups) {
157-
content.add(g);
158-
}
159-
}
160-
161177
public boolean isRootNode() {
162178
Folder folder = getFolder();
163179
return (folder instanceof GraphDocument);
@@ -168,12 +184,20 @@ public Image getOpenedIcon(int i) {
168184
return getIcon(i);
169185
}
170186

187+
@Override
188+
public Action[] getActions(boolean b) {
189+
return new Action[]{
190+
RenameAction.findObject(RenameAction.class, true),
191+
PropertiesAction.findObject(PropertiesAction.class, true),
192+
};
193+
}
194+
171195
public static void clearGraphNodeMap() {
172-
graphNode.clear();
196+
graphNodeMap.clear();
173197
}
174198

175199
public static GraphNode getGraphNode(InputGraph graph) {
176-
return graphNode.get(graph);
200+
return graphNodeMap.get(graph);
177201
}
178202

179203
public Folder getFolder() {

Diff for: src/utils/IdealGraphVisualizer/Coordinator/src/main/java/com/sun/hotspot/igv/coordinator/GraphNode.java

+31-9
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
import java.awt.Image;
3333
import javax.swing.Action;
3434
import org.openide.actions.OpenAction;
35+
import org.openide.actions.RenameAction;
3536
import org.openide.nodes.*;
3637
import org.openide.util.ImageUtilities;
3738
import org.openide.util.Lookup;
@@ -44,27 +45,50 @@
4445
*/
4546
public class GraphNode extends AbstractNode {
4647

47-
private InputGraph graph;
48+
private final InputGraph graph;
4849
private boolean selected = false;
4950

5051
/** Creates a new instance of GraphNode */
5152
public GraphNode(InputGraph graph) {
5253
this(graph, new InstanceContent());
5354
}
5455

56+
@Override
57+
public boolean canRename() {
58+
return true;
59+
}
60+
61+
@Override
62+
public void setName(String name) {
63+
graph.setName(name);
64+
fireDisplayNameChange(null, null);
65+
}
66+
67+
@Override
68+
public String getName() {
69+
return graph.getName();
70+
}
71+
5572
public void setSelected(boolean selected) {
5673
this.selected = selected;
5774
fireDisplayNameChange(null, null);
5875
fireIconChange();
5976
}
6077

78+
@Override
6179
public String getHtmlDisplayName() {
6280
String htmlDisplayName = StringUtils.escapeHTML(getDisplayName());
6381
if (selected) {
6482
htmlDisplayName = "<b>" + htmlDisplayName + "</b>";
6583
}
6684
return htmlDisplayName;
6785
}
86+
87+
@Override
88+
public String getDisplayName() {
89+
return graph.getDisplayName();
90+
}
91+
6892
private GraphNode(InputGraph graph, InstanceContent content) {
6993
super(Children.LEAF, new AbstractLookup(content));
7094
this.graph = graph;
@@ -86,13 +110,6 @@ private GraphNode(InputGraph graph, InstanceContent content) {
86110

87111
// Action for cloning to the current graph
88112
content.add(new GraphCloneCookie(viewer, graph));
89-
90-
this.addNodeListener(new NodeAdapter() {
91-
@Override
92-
public void childrenRemoved(NodeMemberEvent ev) {
93-
GraphNode.this.graph = null;
94-
}
95-
});
96113
}
97114

98115
@Override
@@ -122,7 +139,12 @@ public Image getOpenedIcon(int i) {
122139

123140
@Override
124141
public Action[] getActions(boolean b) {
125-
return new Action[]{DiffGraphAction.findObject(DiffGraphAction.class, true), CloneGraphAction.findObject(CloneGraphAction.class, true), OpenAction.findObject(OpenAction.class, true)};
142+
return new Action[]{
143+
RenameAction.findObject(RenameAction.class, true),
144+
DiffGraphAction.findObject(DiffGraphAction.class, true),
145+
CloneGraphAction.findObject(CloneGraphAction.class, true),
146+
OpenAction.findObject(OpenAction.class, true)
147+
};
126148
}
127149

128150
@Override

Diff for: src/utils/IdealGraphVisualizer/Coordinator/src/main/resources/com/sun/hotspot/igv/coordinator/layer.xml

+17-6
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,9 @@
2020
<file name="DS-W.shadow">
2121
<attr name="originalFile" stringvalue="Actions/File/com-sun-hotspot-igv-coordinator-actions-RemoveAllAction.instance"/>
2222
</file>
23+
<file name="AD-R.shadow">
24+
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-RenameAction.instance"/>
25+
</file>
2326
</folder>
2427
<folder name="Actions">
2528
<folder name="File">
@@ -58,27 +61,35 @@
5861
</file>
5962
<file name="SeparatorSave.instance">
6063
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
61-
<attr name="position" intvalue="150"/>
64+
<attr name="position" intvalue="200"/>
65+
</file>
66+
<file name="org-openide-actions-RenameAction.shadow">
67+
<attr name="originalFile" stringvalue="Actions/System/org-openide-actions-RenameAction.instance"/>
68+
<attr name="position" intvalue="300"/>
69+
</file>
70+
<file name="SeparatorRename.instance">
71+
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
72+
<attr name="position" intvalue="400"/>
6273
</file>
6374
<file name="com-sun-hotspot-igv-coordinator-actions-SaveAsAction.shadow">
6475
<attr name="originalFile" stringvalue="Actions/File/com-sun-hotspot-igv-coordinator-actions-SaveAsAction.instance"/>
65-
<attr name="position" intvalue="200"/>
76+
<attr name="position" intvalue="500"/>
6677
</file>
6778
<file name="com-sun-hotspot-igv-coordinator-actions-SaveAllAction.shadow">
6879
<attr name="originalFile" stringvalue="Actions/File/com-sun-hotspot-igv-coordinator-actions-SaveAllAction.instance"/>
69-
<attr name="position" intvalue="300"/>
80+
<attr name="position" intvalue="600"/>
7081
</file>
7182
<file name="SeparatorRemove.instance">
7283
<attr name="instanceClass" stringvalue="javax.swing.JSeparator"/>
73-
<attr name="position" intvalue="350"/>
84+
<attr name="position" intvalue="700"/>
7485
</file>
7586
<file name="com-sun-hotspot-igv-coordinator-actions-RemoveAction.shadow">
7687
<attr name="originalFile" stringvalue="Actions/File/com-sun-hotspot-igv-coordinator-actions-RemoveAction.instance"/>
77-
<attr name="position" intvalue="400"/>
88+
<attr name="position" intvalue="800"/>
7889
</file>
7990
<file name="com-sun-hotspot-igv-coordinator-actions-RemoveAllAction.shadow">
8091
<attr name="originalFile" stringvalue="Actions/File/com-sun-hotspot-igv-coordinator-actions-RemoveAllAction.instance"/>
81-
<attr name="position" intvalue="500"/>
92+
<attr name="position" intvalue="900"/>
8293
</file>
8394
<!-- Hidden menu entries from other modules -->
8495
<file name="org-netbeans-modules-editor-ExportHtmlAction.shadow_hidden"/>

Diff for: src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/Folder.java

+3
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,9 @@
2626
import java.util.List;
2727

2828
public interface Folder {
29+
void setName(String name);
30+
String getName();
31+
String getDisplayName();
2932
List<? extends FolderElement> getElements();
3033
void removeElement(FolderElement element);
3134
void addElement(FolderElement group);

Diff for: src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/FolderElement.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,10 @@
2424
package com.sun.hotspot.igv.data;
2525

2626
public interface FolderElement {
27-
28-
Folder getParent();
27+
ChangedEvent<? extends FolderElement> getDisplayNameChangedEvent();
28+
void setName(String name);
2929
String getName();
30+
String getDisplayName();
3031
void setParent(Folder parent);
32+
Folder getParent();
3133
}

Diff for: src/utils/IdealGraphVisualizer/Data/src/main/java/com/sun/hotspot/igv/data/GraphDocument.java

+19-1
Original file line numberDiff line numberDiff line change
@@ -34,10 +34,12 @@ public class GraphDocument extends Properties.Entity implements ChangedEventProv
3434

3535
private final List<FolderElement> elements;
3636
private final ChangedEvent<GraphDocument> changedEvent;
37+
private String name;
3738

3839
public GraphDocument() {
3940
elements = new ArrayList<>();
4041
changedEvent = new ChangedEvent<>(this);
42+
setName("GraphDocument");
4143
}
4244

4345
public void clear() {
@@ -61,10 +63,23 @@ public void addGraphDocument(GraphDocument document) {
6163
getChangedEvent().fire();
6264
}
6365

66+
@Override
67+
public void setName(String name) {
68+
this.name = name;
69+
}
70+
71+
public String getName() {
72+
return name;
73+
}
74+
75+
@Override
76+
public String getDisplayName() {
77+
return getName();
78+
}
79+
6480
@Override
6581
public String toString() {
6682
StringBuilder sb = new StringBuilder();
67-
6883
sb.append("GraphDocument: ").append(getProperties().toString()).append(" \n\n");
6984
for (FolderElement g : getElements()) {
7085
sb.append(g.toString());
@@ -84,6 +99,9 @@ public void removeElement(FolderElement element) {
8499
if (elements.remove(element)) {
85100
getChangedEvent().fire();
86101
}
102+
for (FolderElement folderElement : elements) {
103+
folderElement.getDisplayNameChangedEvent().fire();
104+
}
87105
}
88106

89107
@Override

0 commit comments

Comments
 (0)