1
14 package demo.io.graphml;
15
16 import y.io.GraphMLIOHandler;
17 import y.io.graphml.graph2d.PostprocessorOutputHandler;
18 import y.module.YModule;
19 import y.util.D;
20 import y.util.DataProviderAdapter;
21
22 import javax.swing.AbstractAction;
23 import javax.swing.Action;
24 import javax.swing.JComboBox;
25 import javax.swing.JToolBar;
26 import java.awt.EventQueue;
27 import java.awt.event.ActionEvent;
28 import java.awt.event.ActionListener;
29 import java.util.Locale;
30
31
48 public class PostprocessorDemo extends GraphMLDemo {
49
50 private YModule processorModule;
51
52 protected void loadInitialGraph() {
53 view.getGraph2D().addDataProvider(PostprocessorOutputHandler.PROCESSORS_DPKEY,
58 new DataProviderAdapter() {
59 public Object get(Object graph) {
60 return processorModule;
61 }
62 });
63
64 loadGraph("resources/postprocessors/ant-build.graphml");
65 }
66
67 protected JToolBar createToolBar() {
68 final JComboBox combo = new JComboBox(new String[]{
71 "y.module.IncrementalHierarchicLayoutModule",
72 "y.module.SmartOrganicLayoutModule",
73 "demo.io.graphml.NodeSizeAdapter"
74 }
75 );
76 combo.setMaximumSize(combo.getPreferredSize());
77 combo.setEditable(true);
78 combo.addActionListener(new ActionListener() {
79 public void actionPerformed(ActionEvent e) {
80 String className = combo.getSelectedItem().toString();
81 try {
82 processorModule = (YModule) Class.forName(className).newInstance();
83 } catch (Exception ex) {
84 D.showError("Can't create instance of class " + className);
85 }
86 }
87 });
88 combo.setSelectedIndex(0);
89
90 JToolBar jtb = super.createToolBar();
91 jtb.addSeparator();
92 jtb.add(createActionControl(new ApplyProcessorAction()));
93 jtb.addSeparator(TOOLBAR_SMALL_SEPARATOR);
94 jtb.add(combo);
95 jtb.addSeparator(TOOLBAR_SMALL_SEPARATOR);
96 jtb.add(createActionControl(new ConfigureProcessorAction()));
97
98 return jtb;
99 }
100
101 protected String[] getExampleResources() {
102 return new String[]{
103 "resources/postprocessors/ant-build.graphml",
104 "resources/postprocessors/food-owl.graphml",
105 };
106 }
107
108
115 protected GraphMLIOHandler createGraphMLIOHandler() {
116 GraphMLIOHandler ioh = super.createGraphMLIOHandler();
117 ioh.getGraphMLHandler().addOutputHandlerProvider(new PostprocessorOutputHandler());
118 return ioh;
119 }
120
121
124 class ConfigureProcessorAction extends AbstractAction {
125 ConfigureProcessorAction() {
126 super("Settings...", getIconResource("resource/properties.png"));
127 }
128
129 public void actionPerformed(ActionEvent e) {
130 if (processorModule != null) {
131 OptionSupport.showDialog(processorModule, view.getGraph2D(), false, view.getFrame());
132 }
133 }
134 }
135
136
139 class ApplyProcessorAction extends AbstractAction {
140 ApplyProcessorAction() {
141 super("Postprocessor", SHARED_LAYOUT_ICON);
142 putValue(Action.SHORT_DESCRIPTION, "Run the current postprocessor");
143 }
144
145 public void actionPerformed(ActionEvent e) {
146 if (processorModule != null) {
147 processorModule.start(view.getGraph2D());
148 view.updateView();
149 }
150 }
151 }
152
153
156 public static void main(String[] args) {
157 EventQueue.invokeLater(new Runnable() {
158 public void run() {
159 Locale.setDefault(Locale.ENGLISH);
160 initLnF();
161 new PostprocessorDemo().start();
162 }
163 });
164 }
165 }
166