com.kdmanalytics.toif.report.internal.handlers.ExportSelectionHandler.java Source code

Java tutorial

Introduction

Here is the source code for com.kdmanalytics.toif.report.internal.handlers.ExportSelectionHandler.java

Source

/*******************************************************************************
 * Copyright (c) 2012 KDM Analytics, Inc. All rights reserved. This program and
 * the accompanying materials are made available under the terms of the Open
 * Source Initiative OSI - Open Software License v3.0 which accompanies this
 * distribution, and is available at
 * http://www.opensource.org/licenses/osl-3.0.php/
 ******************************************************************************/

package com.kdmanalytics.toif.report.internal.handlers;

import java.io.FileWriter;
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.commands.IHandler;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.handlers.HandlerUtil;

import com.kdmanalytics.toif.report.internal.items.FindingEntry;
import com.kdmanalytics.toif.report.internal.items.LocationGroup;
import com.kdmanalytics.toif.report.internal.items.ToolGroup;
import com.kdmanalytics.toif.report.internal.items.FindingEntry.Citing;
import com.kdmanalytics.toif.report.items.IToifReportEntry;

/**
 * 
 * Exports the selection to a csv file.
 * 
 * @author Adam Nunn <adam@kdmanalytics.com>
 * 
 */
public class ExportSelectionHandler extends AbstractHandler implements IHandler {

    /*
     * (non-Javadoc)
     * 
     * @see
     * org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands
     * .ExecutionEvent)
     */
    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {
        ISelection s = HandlerUtil.getCurrentSelection(event);
        if (!(s instanceof IStructuredSelection)) {
            return null;
        }

        // Display display = new Display();
        Shell shell = HandlerUtil.getActiveShell(event);
        shell.open();
        FileDialog dialog = new FileDialog(shell, SWT.SAVE);
        dialog.setFilterNames(new String[] { "TSV Files", "All Files (*.*)" });
        dialog.setFilterExtensions(new String[] { "*.tsv", "*.*" });
        dialog.setFilterPath(System.getProperty("user.dir"));
        dialog.setFileName("toif.tsv");
        String savePath = dialog.open();

        if (savePath == null) {
            return null;
        }

        try {
            FileWriter writer = new FileWriter(savePath);

            writeHeader(writer);
            writeFindings((IStructuredSelection) s, writer);

            writer.flush();
            writer.close();
        } catch (IOException e) {
            System.err.println("There was a problem reading or writing to the file.");
            e.printStackTrace();
        } catch (NullPointerException e) {
            System.err.println("There was a null pointer exception.");
            e.printStackTrace();
        }

        return null;
    }

    @Override
    public boolean isEnabled() {
        return true;
    }

    /**
     * write the findings to the csv file.
     * 
     * @param selection
     *            the selected element from the report
     * @param writer
     *            the file writer to use to output
     * @throws IOException
     */
    private void writeFindings(IStructuredSelection selection, FileWriter writer) throws IOException {
        Set<FindingEntry> entries = new HashSet<FindingEntry>();
        for (Object object : selection.toList()) {
            if (object instanceof IToifReportEntry) {
                IToifReportEntry reportItem = (IToifReportEntry) object;
                entries.add(reportItem.getFindingEntry());
            }
        }

        for (FindingEntry entry : entries) {
            ToolGroup tool = (ToolGroup) entry.getParent();
            LocationGroup location = (LocationGroup) tool.getParent();

            // sfp
            writer.append(entry.getSfp());
            writer.append('\t');

            // cwe
            writer.append(entry.getCwe());
            writer.append('\t');

            String valid = "";
            // valid
            if (Citing.UNKNOWN == entry.isOk()) {
                valid = "unknown";
            } else {
                valid = "" + (Citing.TRUE == entry.isOk());
            }
            writer.append(valid.toUpperCase());
            writer.append('\t');

            // trust
            writer.append(entry.getTrust() + "");
            writer.append('\t');

            // resource
            writer.append(location.getPath());
            writer.append('\t');

            // linenumber
            writer.append(location.getToifLineNumber());
            writer.append('\t');

            // kdmLineNumber
            if (location.getRealLineNumber() != null) {
                writer.append(location.getRealLineNumber());
            } else {
                writer.append("");
            }
            writer.append('\t');

            // tool
            writer.append(tool.toString());
            writer.append('\t');

            // description
            writer.append(entry.getDescription());
            writer.append('\n');
        }

    }

    /**
     * @param writer
     * @throws IOException
     */
    private void writeHeader(FileWriter writer) throws IOException {
        writer.append("SFP");
        writer.append('\t');
        writer.append("CWE");
        writer.append('\t');
        // writer.append("Cluster");
        // writer.append('\t');
        writer.append("Valid");
        writer.append('\t');
        writer.append("Trust");
        writer.append('\t');

        writer.append("Resource");
        writer.append('\t');
        writer.append("Line Number");
        writer.append('\t');
        writer.append("KDM Line Number");
        writer.append('\t');
        writer.append("Generator Tool");
        writer.append('\t');
        writer.append("Weakness Description");
        writer.append('\n');
    }

}