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 this.parameters = parameters;
86 this.groups = groups;
87 new SwingReportDialog();
88 }
89
90
91
92
93 private class SwingReportDialog extends JDialog {
94
95 private static final long serialVersionUID = 1L;
96
97 public SwingReportDialog() {
98 super(owner, "Test Report");
99 createGUI();
100 }
101
102 private void createGUI() {
103 setPreferredSize(new Dimension(width, height));
104 setMinimumSize(new Dimension(width, height));
105
106 setLayout(new BorderLayout());
107
108 DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");
109
110 for (CmisTestGroup group : groups) {
111 if (!group.isEnabled()) {
112 continue;
113 }
114
115 DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group);
116 rootNode.add(groupNode);
117 for (CmisTest test : group.getTests()) {
118 if (!test.isEnabled()) {
119 continue;
120 }
121
122 DefaultMutableTreeNode testNode = new DefaultMutableTreeNode(test);
123 groupNode.add(testNode);
124 populateResultBranch(testNode, test.getResults());
125 }
126 }
127
128 JTree groupTree = new JTree(rootNode);
129 groupTree.setRootVisible(false);
130 groupTree.setCellRenderer(new ReportTreeCellRenderer());
131
132 for (int i = 0; i < groupTree.getRowCount(); i++) {
133 groupTree.expandRow(i);
134 }
135
136 add(new JScrollPane(groupTree), BorderLayout.CENTER);
137
138 final JPanel reportPanel = new JPanel();
139 reportPanel.add(new JLabel("Open report as "));
140 final JComboBox reportType = new JComboBox(new Object[] { "HTML", "Text", "XML" });
141 reportPanel.add(reportType);
142 final JButton reportButton = new JButton("go");
143 reportPanel.add(reportButton);
144
145 reportButton.addActionListener(new ActionListener() {
146 public void actionPerformed(ActionEvent event) {
147 try {
148
149 File tempReportFile = null;
150 CmisTestReport report = null;
151
152 switch (reportType.getSelectedIndex()) {
153 case 1:
154 tempReportFile = File.createTempFile("cmistck", ".txt");
155 report = new TextReport();
156 break;
157 case 2:
158 tempReportFile = File.createTempFile("cmistck", ".xml");
159 report = new XmlReport();
160 break;
161 default:
162 tempReportFile = File.createTempFile("cmistck", ".html");
163 report = new HtmlReport();
164 break;
165 }
166
167 tempReportFile.deleteOnExit();
168 report.createReport(parameters, groups, tempReportFile);
169
170
171 Desktop desktop = Desktop.getDesktop();
172 if (!desktop.isSupported(Desktop.Action.OPEN)) {
173 JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(),
174 "Report", JOptionPane.INFORMATION_MESSAGE);
175 } else {
176 desktop.open(tempReportFile);
177 }
178 } catch (Exception e) {
179 JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
180 JOptionPane.ERROR_MESSAGE);
181 }
182 }
183 });
184
185 add(reportPanel, BorderLayout.PAGE_END);
186
187 ClientHelper.installEscapeBinding(this, getRootPane(), true);
188
189 setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
190 pack();
191 setLocationRelativeTo(null);
192 setVisible(true);
193 }
194
195 private void populateResultBranch(DefaultMutableTreeNode parent, List<CmisTestResult> results) {
196 if (results == null) {
197 return;
198 }
199
200 for (CmisTestResult result : results) {
201 DefaultMutableTreeNode resultNode = new DefaultMutableTreeNode(result);
202 parent.add(resultNode);
203 populateResultBranch(resultNode, result.getChildren());
204 }
205 }
206
207 private class ReportTreeCellRenderer extends DefaultTreeCellRenderer {
208
209 private static final long serialVersionUID = 1L;
210
211 public ReportTreeCellRenderer() {
212 }
213
214 public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
215 boolean leaf, int row, boolean hasFocus) {
216 super.getTreeCellRendererComponent(tree, "", sel, expanded, leaf, row, hasFocus);
217
218 DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;
219
220 if (node.getUserObject() instanceof CmisTestGroup) {
221 setText(((CmisTestGroup) node.getUserObject()).getName());
222 setIcon(GROUP_ICON);
223 } else if (node.getUserObject() instanceof CmisTest) {
224 setText(((CmisTest) node.getUserObject()).getName());
225 setIcon(TEST_ICON);
226 } else if (node.getUserObject() instanceof CmisTestResult) {
227 CmisTestResult result = (CmisTestResult) node.getUserObject();
228
229 String text = "<html><b>" + result.getStatus() + ": " + result.getMessage() + "</b>";
230 if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
231 text += " (" + result.getStackTrace()[0].getFileName() + ":"
232 + result.getStackTrace()[0].getLineNumber() + ")";
233 }
234 setText(text);
235
236 switch (result.getStatus()) {
237 case OK:
238 setIcon(STATUS_OK_ICON);
239 break;
240 case WARNING:
241 setIcon(STATUS_WARNING_ICON);
242 break;
243 case FAILURE:
244 case UNEXPECTED_EXCEPTION:
245 setIcon(STATUS_FAILURE_ICON);
246 break;
247 default:
248 setIcon(OTHER_ICON);
249 }
250 } else {
251 setText(value.toString());
252 setIcon(OTHER_ICON);
253 }
254
255 setVerticalTextPosition(SwingConstants.TOP);
256
257 return this;
258 }
259 }
260 }
261
262 private static class ColorIcon implements Icon {
263
264 private final Color color;
265
266 public ColorIcon(Color color) {
267 this.color = color;
268 }
269
270 public void paintIcon(Component c, Graphics g, int x, int y) {
271 g.setColor(color);
272 g.fillRect(0, 0, getIconWidth(), getIconHeight());
273 }
274
275 public int getIconWidth() {
276 return 8;
277 }
278
279 public int getIconHeight() {
280 return 18;
281 }
282 }
283 }