This project has retired. For details please refer to its
Attic page.
SwingReport xref
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.apache.chemistry.opencmis.workbench.checks;
20
21 import java.awt.BorderLayout;
22 import java.awt.Color;
23 import java.awt.Component;
24 import java.awt.Desktop;
25 import java.awt.Dimension;
26 import java.awt.Frame;
27 import java.awt.Graphics;
28 import java.awt.event.ActionEvent;
29 import java.awt.event.ActionListener;
30 import java.io.File;
31 import java.io.Writer;
32 import java.util.List;
33 import java.util.Map;
34
35 import javax.swing.Icon;
36 import javax.swing.JButton;
37 import javax.swing.JComboBox;
38 import javax.swing.JDialog;
39 import javax.swing.JFrame;
40 import javax.swing.JLabel;
41 import javax.swing.JOptionPane;
42 import javax.swing.JPanel;
43 import javax.swing.JScrollPane;
44 import javax.swing.JTree;
45 import javax.swing.SwingConstants;
46 import javax.swing.tree.DefaultMutableTreeNode;
47 import javax.swing.tree.DefaultTreeCellRenderer;
48
49 import org.apache.chemistry.opencmis.tck.CmisTest;
50 import org.apache.chemistry.opencmis.tck.CmisTestGroup;
51 import org.apache.chemistry.opencmis.tck.CmisTestReport;
52 import org.apache.chemistry.opencmis.tck.CmisTestResult;
53 import org.apache.chemistry.opencmis.tck.report.AbstractCmisTestReport;
54 import org.apache.chemistry.opencmis.tck.report.HtmlReport;
55 import org.apache.chemistry.opencmis.tck.report.TextReport;
56 import org.apache.chemistry.opencmis.tck.report.XmlReport;
57 import org.apache.chemistry.opencmis.workbench.ClientHelper;
58
59
60
61
62 public class SwingReport extends AbstractCmisTestReport {
63
64 private static final Icon GROUP_ICON = new ColorIcon(Color.GRAY);
65 private static final Icon TEST_ICON = new ColorIcon(Color.BLUE);
66 private static final Icon STATUS_OK_ICON = new ColorIcon(Color.GREEN);
67 private static final Icon STATUS_WARNING_ICON = new ColorIcon(Color.YELLOW);
68 private static final Icon STATUS_FAILURE_ICON = new ColorIcon(Color.RED);
69 private static final Icon OTHER_ICON = new ColorIcon(Color.LIGHT_GRAY);
70
71 private final Frame owner;
72 private final int width;
73 private final int height;
74 private Map<String, String> parameters;
75 private List<CmisTestGroup> groups;
76
77 public SwingReport(Frame owner, int width, int height) {
78 this.owner = owner;
79 this.width = width;
80 this.height = height;
81 }
82
83 @Override
84 public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
85 throws Exception {
86 this.parameters = parameters;
87 this.groups = groups;
88 new SwingReportDialog();
89 }
90
91
92
93
94 private class SwingReportDialog extends JDialog {
95
96 private static final long serialVersionUID = 1L;
97
98 public SwingReportDialog() {
99 super(owner, "Test Report");
100 createGUI();
101 }
102
103 private void createGUI() {
104 setPreferredSize(new Dimension(width, height));
105 setMinimumSize(new Dimension(width, height));
106
107 setLayout(new BorderLayout());
108
109 DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");
110
111 for (CmisTestGroup group : groups) {
112 if (!group.isEnabled()) {
113 continue;
114 }
115
116 DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group);
117 rootNode.add(groupNode);
118 for (CmisTest test : group.getTests()) {
119 if (!test.isEnabled()) {
120 continue;
121 }
122
123 DefaultMutableTreeNode testNode = new DefaultMutableTreeNode(test);
124 groupNode.add(testNode);
125 populateResultBranch(testNode, test.getResults());
126 }
127 }
128
129 JTree groupTree = new JTree(rootNode);
130 groupTree.setRootVisible(false);
131 groupTree.setCellRenderer(new ReportTreeCellRenderer());
132
133 for (int i = 0; i < groupTree.getRowCount(); i++) {
134 groupTree.expandRow(i);
135 }
136
137 add(new JScrollPane(groupTree), BorderLayout.CENTER);
138
139 final JPanel reportPanel = new JPanel();
140 reportPanel.add(new JLabel("Open report as "));
141 final JComboBox reportType = new JComboBox(new Object[] { "HTML", "Text", "XML" });
142 reportPanel.add(reportType);
143 final JButton reportButton = new JButton("go");
144 reportPanel.add(reportButton);
145
146 reportButton.addActionListener(new ActionListener() {
147 public void actionPerformed(ActionEvent event) {
148 try {
149
150 File tempReportFile = null;
151 CmisTestReport report = null;
152
153 switch (reportType.getSelectedIndex()) {
154 case 0:
155 tempReportFile = File.createTempFile("cmistck", ".html");
156 report = new HtmlReport();
157 break;
158 case 1:
159 tempReportFile = File.createTempFile("cmistck", ".txt");
160 report = new TextReport();
161 break;
162 case 2:
163 tempReportFile = File.createTempFile("cmistck", ".xml");
164 report = new XmlReport();
165 break;
166 }
167
168 tempReportFile.deleteOnExit();
169 report.createReport(parameters, groups, tempReportFile);
170
171
172 Desktop desktop = Desktop.getDesktop();
173 if (!desktop.isSupported(Desktop.Action.OPEN)) {
174 JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(),
175 "Report", JOptionPane.INFORMATION_MESSAGE);
176 } else {
177 desktop.open(tempReportFile);
178 }
179 } catch (Exception e) {
180 JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
181 JOptionPane.ERROR_MESSAGE);
182 }
183 }
184 });
185
186 add(reportPanel, BorderLayout.PAGE_END);
187
188 ClientHelper.installEscapeBinding(this, getRootPane(), true);
189
190 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
191 pack();
192 setLocationRelativeTo(null);
193 setVisible(true);
194 }
195
196 private void populateResultBranch(DefaultMutableTreeNode parent, List<CmisTestResult> results) {
197 if (results == null) {
198 return;
199 }
200
201 for (CmisTestResult result : results) {
202 DefaultMutableTreeNode resultNode = new DefaultMutableTreeNode(result);
203 parent.add(resultNode);
204 populateResultBranch(resultNode, result.getChildren());
205 }
206 }
207
208 private class ReportTreeCellRenderer extends DefaultTreeCellRenderer {
209
210 private static final long serialVersionUID = 1L;
211
212 public ReportTreeCellRenderer() {
213 }
214
215 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
216 boolean leaf, int row, boolean hasFocus) {
217 super.getTreeCellRendererComponent(tree, "", sel, expanded, leaf, row, hasFocus);
218
219 DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
220
221 if (node.getUserObject() instanceof CmisTestGroup) {
222 setText(((CmisTestGroup) node.getUserObject()).getName());
223 setIcon(GROUP_ICON);
224 } else if (node.getUserObject() instanceof CmisTest) {
225 setText(((CmisTest) node.getUserObject()).getName());
226 setIcon(TEST_ICON);
227 } else if (node.getUserObject() instanceof CmisTestResult) {
228 CmisTestResult result = (CmisTestResult) node.getUserObject();
229
230 String text = "<html><b>" + result.getStatus() + ": " + result.getMessage() + "</b>";
231 if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
232 text += " (" + result.getStackTrace()[0].getFileName() + ":"
233 + result.getStackTrace()[0].getLineNumber() + ")";
234 }
235 setText(text);
236
237 switch (result.getStatus()) {
238 case OK:
239 setIcon(STATUS_OK_ICON);
240 break;
241 case WARNING:
242 setIcon(STATUS_WARNING_ICON);
243 break;
244 case FAILURE:
245 case UNEXPECTED_EXCEPTION:
246 setIcon(STATUS_FAILURE_ICON);
247 break;
248 default:
249 setIcon(OTHER_ICON);
250 }
251 } else {
252 setText(value.toString());
253 setIcon(OTHER_ICON);
254 }
255
256 setVerticalTextPosition(SwingConstants.TOP);
257
258 return this;
259 }
260 }
261 }
262
263 private static class ColorIcon implements Icon {
264
265 private final Color color;
266
267 public ColorIcon(Color color) {
268 this.color = color;
269 }
270
271 public void paintIcon(Component c, Graphics g, int x, int y) {
272 g.setColor(color);
273 g.fillRect(0, 0, getIconWidth(), getIconHeight());
274 }
275
276 public int getIconWidth() {
277 return 8;
278 }
279
280 public int getIconHeight() {
281 return 18;
282 }
283 }
284 }