Package org.apache.chemistry.opencmis.workbench.checks

Source Code of org.apache.chemistry.opencmis.workbench.checks.SwingReport

/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements.  See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership.  The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License.  You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied.  See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.chemistry.opencmis.workbench.checks;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Desktop;
import java.awt.Dimension;
import java.awt.Frame;
import java.awt.Graphics;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.Writer;
import java.util.List;
import java.util.Map;

import javax.swing.Icon;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JDialog;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTree;
import javax.swing.SwingConstants;
import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeCellRenderer;

import org.apache.chemistry.opencmis.tck.CmisTest;
import org.apache.chemistry.opencmis.tck.CmisTestGroup;
import org.apache.chemistry.opencmis.tck.CmisTestReport;
import org.apache.chemistry.opencmis.tck.CmisTestResult;
import org.apache.chemistry.opencmis.tck.report.AbstractCmisTestReport;
import org.apache.chemistry.opencmis.tck.report.HtmlReport;
import org.apache.chemistry.opencmis.tck.report.TextReport;
import org.apache.chemistry.opencmis.tck.report.XmlReport;
import org.apache.chemistry.opencmis.workbench.ClientHelper;

/**
* Swing Report.
*/
public class SwingReport extends AbstractCmisTestReport {

    private static final Icon GROUP_ICON = new ColorIcon(Color.GRAY);
    private static final Icon TEST_ICON = new ColorIcon(Color.BLUE);
    private static final Icon STATUS_OK_ICON = new ColorIcon(Color.GREEN);
    private static final Icon STATUS_WARNING_ICON = new ColorIcon(Color.YELLOW);
    private static final Icon STATUS_FAILURE_ICON = new ColorIcon(Color.RED);
    private static final Icon OTHER_ICON = new ColorIcon(Color.LIGHT_GRAY);

    private final Frame owner;
    private final int width;
    private final int height;
    private Map<String, String> parameters;
    private List<CmisTestGroup> groups;

    public SwingReport(Frame owner, int width, int height) {
        this.owner = owner;
        this.width = width;
        this.height = height;
    }

    @Override
    public void createReport(Map<String, String> parameters, List<CmisTestGroup> groups, Writer writer)
            throws Exception {
        this.parameters = parameters;
        this.groups = groups;
        new SwingReportDialog();
    }

    /**
     * Report dialog.
     */
    private class SwingReportDialog extends JDialog {

        private static final long serialVersionUID = 1L;

        public SwingReportDialog() {
            super(owner, "Test Report");
            createGUI();
        }

        private void createGUI() {
            setPreferredSize(new Dimension(width, height));
            setMinimumSize(new Dimension(width, height));

            setLayout(new BorderLayout());

            DefaultMutableTreeNode rootNode = new DefaultMutableTreeNode("Groups");

            for (CmisTestGroup group : groups) {
                if (!group.isEnabled()) {
                    continue;
                }

                DefaultMutableTreeNode groupNode = new DefaultMutableTreeNode(group);
                rootNode.add(groupNode);
                for (CmisTest test : group.getTests()) {
                    if (!test.isEnabled()) {
                        continue;
                    }

                    DefaultMutableTreeNode testNode = new DefaultMutableTreeNode(test);
                    groupNode.add(testNode);
                    populateResultBranch(testNode, test.getResults());
                }
            }

            JTree groupTree = new JTree(rootNode);
            groupTree.setRootVisible(false);
            groupTree.setCellRenderer(new ReportTreeCellRenderer());

            for (int i = 0; i < groupTree.getRowCount(); i++) {
                groupTree.expandRow(i);
            }

            add(new JScrollPane(groupTree), BorderLayout.CENTER);

            final JPanel reportPanel = new JPanel();
            reportPanel.add(new JLabel("Open report as "));
            final JComboBox reportType = new JComboBox(new Object[] { "HTML", "Text", "XML" });
            reportPanel.add(reportType);
            final JButton reportButton = new JButton("go");
            reportPanel.add(reportButton);

            reportButton.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent event) {
                    try {
                        // create report
                        File tempReportFile = null;
                        CmisTestReport report = null;

                        switch (reportType.getSelectedIndex()) {
                        case 0:
                            tempReportFile = File.createTempFile("cmistck", ".html");
                            report = new HtmlReport();
                            break;
                        case 1:
                            tempReportFile = File.createTempFile("cmistck", ".txt");
                            report = new TextReport();
                            break;
                        case 2:
                            tempReportFile = File.createTempFile("cmistck", ".xml");
                            report = new XmlReport();
                            break;
                        }

                        tempReportFile.deleteOnExit();
                        report.createReport(parameters, groups, tempReportFile);

                        // show report
                        Desktop desktop = Desktop.getDesktop();
                        if (!desktop.isSupported(Desktop.Action.OPEN)) {
                            JOptionPane.showMessageDialog(owner, "Report: " + tempReportFile.getAbsolutePath(),
                                    "Report", JOptionPane.INFORMATION_MESSAGE);
                        } else {
                            desktop.open(tempReportFile);
                        }
                    } catch (Exception e) {
                        JOptionPane.showMessageDialog(owner, "Error: " + e.getMessage(), "Report Error",
                                JOptionPane.ERROR_MESSAGE);
                    }
                }
            });

            add(reportPanel, BorderLayout.PAGE_END);

            ClientHelper.installEscapeBinding(this, getRootPane(), true);

            setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
            pack();
            setLocationRelativeTo(null);
            setVisible(true);
        }

        private void populateResultBranch(DefaultMutableTreeNode parent, List<CmisTestResult> results) {
            if (results == null) {
                return;
            }

            for (CmisTestResult result : results) {
                DefaultMutableTreeNode resultNode = new DefaultMutableTreeNode(result);
                parent.add(resultNode);
                populateResultBranch(resultNode, result.getChildren());
            }
        }

        private class ReportTreeCellRenderer extends DefaultTreeCellRenderer {

            private static final long serialVersionUID = 1L;

            public ReportTreeCellRenderer() {
            }

            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean sel, boolean expanded,
                    boolean leaf, int row, boolean hasFocus) {
                super.getTreeCellRendererComponent(tree, "", sel, expanded, leaf, row, hasFocus);

                DefaultMutableTreeNode node = (DefaultMutableTreeNode) value;

                if (node.getUserObject() instanceof CmisTestGroup) {
                    setText(((CmisTestGroup) node.getUserObject()).getName());
                    setIcon(GROUP_ICON);
                } else if (node.getUserObject() instanceof CmisTest) {
                    setText(((CmisTest) node.getUserObject()).getName());
                    setIcon(TEST_ICON);
                } else if (node.getUserObject() instanceof CmisTestResult) {
                    CmisTestResult result = (CmisTestResult) node.getUserObject();

                    String text = "<html><b>" + result.getStatus() + ": " + result.getMessage() + "</b>";
                    if ((result.getStackTrace() != null) && (result.getStackTrace().length > 0)) {
                        text += " (" + result.getStackTrace()[0].getFileName() + ":"
                                + result.getStackTrace()[0].getLineNumber() + ")";
                    }
                    setText(text);

                    switch (result.getStatus()) {
                    case OK:
                        setIcon(STATUS_OK_ICON);
                        break;
                    case WARNING:
                        setIcon(STATUS_WARNING_ICON);
                        break;
                    case FAILURE:
                    case UNEXPECTED_EXCEPTION:
                        setIcon(STATUS_FAILURE_ICON);
                        break;
                    default:
                        setIcon(OTHER_ICON);
                    }
                } else {
                    setText(value.toString());
                    setIcon(OTHER_ICON);
                }

                setVerticalTextPosition(SwingConstants.TOP);

                return this;
            }
        }
    }

    private static class ColorIcon implements Icon {

        private final Color color;

        public ColorIcon(Color color) {
            this.color = color;
        }

        public void paintIcon(Component c, Graphics g, int x, int y) {
            g.setColor(color);
            g.fillRect(0, 0, getIconWidth(), getIconHeight());
        }

        public int getIconWidth() {
            return 8;
        }

        public int getIconHeight() {
            return 18;
        }
    }
}
TOP

Related Classes of org.apache.chemistry.opencmis.workbench.checks.SwingReport

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.