1
14 package demo.io.graphml;
15
16
17 import y.base.DataMap;
18 import y.base.Edge;
19 import y.base.EdgeMap;
20 import y.base.Node;
21 import y.base.NodeMap;
22 import y.io.GraphMLIOHandler;
23 import y.io.graphml.KeyScope;
24 import y.io.graphml.KeyType;
25 import y.option.OptionHandler;
26 import y.view.EditMode;
27 import y.view.PopupMode;
28 import y.view.TooltipMode;
29
30 import javax.swing.AbstractAction;
31 import javax.swing.JPopupMenu;
32 import java.awt.EventQueue;
33 import java.awt.event.ActionEvent;
34 import java.util.Locale;
35
36
45 public class SimpleAttributesDemo extends GraphMLDemo {
46
47
48 private NodeMap node2BoolMap;
49
50
51 private EdgeMap edge2IntMap;
52
53
54 protected void loadInitialGraph() {
55 loadGraph("resources/custom/simple-attributes.graphml");
56 }
57
58 protected TooltipMode createTooltipMode() {
59 TooltipMode tooltipMode = new TooltipMode() {
60
65 protected String getNodeTip(Node node) {
66 return "Node:BooleanValue=" + node2BoolMap.getBool(node);
67 }
68
69
74 protected String getEdgeTip(Edge edge) {
75 return "Edge:IntValue=" + edge2IntMap.getInt(edge);
76 }
77 };
78 return tooltipMode;
79 }
80
81
85 protected GraphMLIOHandler createGraphMLIOHandler() {
86 if (node2BoolMap == null) {
88 node2BoolMap = view.getGraph2D().createNodeMap();
89 }
90 if (edge2IntMap == null) {
91 edge2IntMap = view.getGraph2D().createEdgeMap();
92 }
93
94 GraphMLIOHandler ioHandler = super.createGraphMLIOHandler();
95
96 ioHandler.getGraphMLHandler().addInputDataAcceptor("BooleanValue", node2BoolMap, KeyScope.NODE, KeyType.BOOLEAN);
98 ioHandler.getGraphMLHandler().addOutputDataProvider("BooleanValue", node2BoolMap, KeyScope.NODE, KeyType.BOOLEAN);
99
100 ioHandler.getGraphMLHandler().addInputDataAcceptor("IntValue", edge2IntMap, KeyScope.EDGE, KeyType.INT);
102 ioHandler.getGraphMLHandler().addOutputDataProvider("IntValue", edge2IntMap, KeyScope.EDGE, KeyType.INT);
103 return ioHandler;
104 }
105
106
107 protected String[] getExampleResources() {
108 return null;
109 }
110
111
115 protected EditMode createEditMode() {
116 EditMode mode = super.createEditMode();
117
118 mode.setPopupMode(new PopupMode() {
119 public JPopupMenu getNodePopup(Node v) {
120 JPopupMenu pm = new JPopupMenu();
121 pm.add(new EditAttributeAction("Edit Node Attribute...", v, node2BoolMap, KeyType.BOOLEAN));
122 return pm;
123 }
124
125 public JPopupMenu getEdgePopup(Edge e) {
126 JPopupMenu pm = new JPopupMenu();
127 pm.add(new EditAttributeAction("Edit Edge Attribute...", e, edge2IntMap, KeyType.INT));
128 return pm;
129 }
130 });
131
132 return mode;
133 }
134
135
136
139 class EditAttributeAction extends AbstractAction {
140 private Object object;
141 private DataMap dataMap;
142 private KeyType dataType;
143
144 private OptionHandler op;
145
146 EditAttributeAction(String name, Object object, DataMap dataMap, KeyType dataType) {
147 super(name);
148 this.object = object;
149 this.dataMap = dataMap;
150 this.dataType = dataType;
151 op = new OptionHandler(name);
152 if (dataType == KeyType.BOOLEAN) {
153 op.addBool("Boolean Value", dataMap.getBool(object));
154 } else if (dataType == KeyType.INT) {
155 op.addInt("Integer Value", dataMap.getInt(object));
156 }
157 }
158
159 public void actionPerformed(ActionEvent actionEvent) {
160 if (op.showEditor()) {
161 if (dataType == KeyType.BOOLEAN) {
162 dataMap.setBool(object, op.getBool("Boolean Value"));
163 } else if (dataType == KeyType.INT) {
164 dataMap.setInt(object, op.getInt("Integer Value"));
165 }
166 graphMLPane.updateGraphMLText(view.getGraph2D());
167 }
168 }
169 }
170
171
174 public static void main(String[] args) {
175 EventQueue.invokeLater(new Runnable() {
176 public void run() {
177 Locale.setDefault(Locale.ENGLISH);
178 initLnF();
179 (new SimpleAttributesDemo()).start();
180 }
181 });
182 }
183 }
184