com.blackducksoftware.integration.eclipseplugin.views.ui.VulnerabilityView.java Source code

Java tutorial

Introduction

Here is the source code for com.blackducksoftware.integration.eclipseplugin.views.ui.VulnerabilityView.java

Source

/**
 * hub-eclipse-plugin
 *
 * Copyright (C) 2017 Black Duck Software, Inc.
 * http://www.blackducksoftware.com/
 *
 * 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 com.blackducksoftware.integration.eclipseplugin.views.ui;

import org.eclipse.core.resources.IResourceChangeEvent;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CLabel;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;

import com.blackducksoftware.integration.eclipseplugin.common.constants.InspectionStatus;
import com.blackducksoftware.integration.eclipseplugin.common.constants.PathsToIconFiles;
import com.blackducksoftware.integration.eclipseplugin.common.services.DependencyInformationService;
import com.blackducksoftware.integration.eclipseplugin.common.services.ProjectInformationService;
import com.blackducksoftware.integration.eclipseplugin.common.services.WorkspaceInformationService;
import com.blackducksoftware.integration.eclipseplugin.startup.Activator;
import com.blackducksoftware.integration.eclipseplugin.views.listeners.PreferenceChangeDisplayUpdateListener;
import com.blackducksoftware.integration.eclipseplugin.views.listeners.ProjectDeletedListener;
import com.blackducksoftware.integration.eclipseplugin.views.listeners.ProjectSelectionListener;
import com.blackducksoftware.integration.eclipseplugin.views.listeners.TableDoubleClickListener;
import com.blackducksoftware.integration.eclipseplugin.views.providers.DependencyComponentColumnLabelProvider;
import com.blackducksoftware.integration.eclipseplugin.views.providers.DependencyLicenseColumnLabelProvider;
import com.blackducksoftware.integration.eclipseplugin.views.providers.DependencyNumVulnColumnLabelProvider;
import com.blackducksoftware.integration.eclipseplugin.views.providers.DependencyTableViewContentProvider;
import com.blackducksoftware.integration.hub.buildtool.FilePathGavExtractor;

public class VulnerabilityView extends ViewPart {

    private String lastSelectedProjectName = "";

    private Display display;

    private WorkspaceInformationService workspaceInformationService;

    private PreferenceChangeDisplayUpdateListener preferenceChangeDisplayUpdateListener;

    private ProjectDeletedListener projectDeletedListener;

    private ProjectSelectionListener projectSelectionListener;

    private DependencyTableViewContentProvider contentProvider;

    private Text filterBox;

    private CLabel tableStatus;

    // private ComponentSelectionListener componentSelectionListener;

    private TableViewer dependencyTableViewer;

    @Override
    public void createPartControl(Composite parent) {
        GridLayout parentLayout = new GridLayout(1, false);
        parentLayout.marginWidth = 0;
        parentLayout.marginHeight = 0;
        parent.setLayout(parentLayout);
        workspaceInformationService = new WorkspaceInformationService(
                new ProjectInformationService(new DependencyInformationService(), new FilePathGavExtractor()));
        display = PlatformUI.getWorkbench().getDisplay();
        Activator.getPlugin().getProjectInformation().setComponentView(this);
        lastSelectedProjectName = workspaceInformationService.getSelectedProject();
        setUpHeaderComposite(parent);
        // ComponentFilter componentFilter = new ComponentFilter(filterBox);
        dependencyTableViewer = new TableViewer(parent,
                (SWT.VIRTUAL | SWT.SINGLE | SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL));
        dependencyTableViewer.setUseHashlookup(true);
        dependencyTableViewer.getTable().setHeaderVisible(true);
        dependencyTableViewer.getTable().setLinesVisible(true);
        dependencyTableViewer.getTable().setLayoutData(new GridData(GridData.FILL_BOTH));
        dependencyTableViewer.addDoubleClickListener(new TableDoubleClickListener(this));
        contentProvider = new DependencyTableViewContentProvider(this, dependencyTableViewer);
        // contentProvider.addFilter(componentFilter);
        dependencyTableViewer.setContentProvider(contentProvider);
        projectSelectionListener = new ProjectSelectionListener(this);
        getSite().getPage().addSelectionListener(projectSelectionListener);
        this.createColumns();
        this.resetInput();
        tableStatus = new CLabel(parent, SWT.LEFT);
        tableStatus.setText(InspectionStatus.INITIALIZING);
        tableStatus.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        preferenceChangeDisplayUpdateListener = new PreferenceChangeDisplayUpdateListener(this);
        projectDeletedListener = new ProjectDeletedListener(this);
        Activator.getPlugin().getPreferenceStore().addPropertyChangeListener(preferenceChangeDisplayUpdateListener);
        ResourcesPlugin.getWorkspace().addResourceChangeListener(projectDeletedListener,
                IResourceChangeEvent.PRE_DELETE);
    }

    private void createColumns() {
        DependencyComponentColumnLabelProvider dependencyComponentColumnLp = new DependencyComponentColumnLabelProvider();
        dependencyComponentColumnLp.addColumnTo(dependencyTableViewer);
        DependencyLicenseColumnLabelProvider dependencyLicenseColumnLp = new DependencyLicenseColumnLabelProvider(
                300, SWT.LEFT);
        dependencyLicenseColumnLp.addColumnTo(dependencyTableViewer);
        DependencyNumVulnColumnLabelProvider dependencyNumVulnColumnLp = new DependencyNumVulnColumnLabelProvider(
                150, SWT.CENTER, contentProvider);
        dependencyNumVulnColumnLp.addColumnTo(dependencyTableViewer);
    }

    private Composite setUpHeaderComposite(Composite parent) {
        Composite headerComposite = new Composite(parent, SWT.NONE);
        GridLayout headerLayout = new GridLayout(1, false);
        headerLayout.marginWidth = 0;
        headerLayout.marginHeight = 0;
        headerLayout.horizontalSpacing = 0;
        headerLayout.verticalSpacing = 0;
        headerComposite.setLayout(headerLayout);
        headerComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        Label headerLabel = new Label(headerComposite, SWT.HORIZONTAL);
        headerLabel.setText("Project Components");
        Label separator = new Label(headerComposite, SWT.HORIZONTAL | SWT.SEPARATOR);
        separator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        setUpFilterComposite(headerComposite);
        return headerComposite;
    }

    private Composite setUpFilterComposite(Composite parent) {
        Composite filterComposite = new Composite(parent, SWT.NONE);
        GridLayout filterLayout = new GridLayout(1, false);
        filterLayout.marginWidth = 1;
        filterLayout.marginHeight = 2;
        filterComposite.setLayout(filterLayout);
        filterComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        filterBox = new Text(filterComposite, SWT.SEARCH);
        filterBox.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        filterBox.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent event) {
                resetInput();
            }
        });
        filterBox.setMessage("type filter text");
        return filterComposite;
    }

    public void resetInput() {
        display.syncExec(new Runnable() {
            @Override
            public void run() {
                if (!dependencyTableViewer.getTable().isDisposed()) {
                    setTableInput(lastSelectedProjectName);
                    dependencyTableViewer.refresh();
                }
            }
        });
    }

    public void setStatusMessage(String message) {
        display.asyncExec(new Runnable() {
            @Override
            public void run() {
                if (!tableStatus.isDisposed()) {
                    if (message.equals(tableStatus.getText())) {
                        return;
                    }
                    ImageDescriptor newImageDescriptor = null;
                    switch (message) {
                    case InspectionStatus.PROJECT_INSPECTION_ACTIVE:
                        newImageDescriptor = Activator.getImageDescriptor(PathsToIconFiles.WAITING);
                        break;
                    case InspectionStatus.PROJECT_INSPECTION_SCHEDULED:
                        newImageDescriptor = Activator.getImageDescriptor(PathsToIconFiles.WAITING);
                        break;
                    case InspectionStatus.CONNECTION_DISCONNECTED:
                        newImageDescriptor = Activator.getImageDescriptor(PathsToIconFiles.DISCONNECT);
                        break;
                    case InspectionStatus.PROJECT_NEEDS_INSPECTION:
                        newImageDescriptor = Activator.getImageDescriptor(PathsToIconFiles.WARNING);
                        break;
                    default:
                        break;
                    }
                    Image newImage = null;
                    if (newImageDescriptor != null) {
                        newImage = newImageDescriptor.createImage();
                    }
                    tableStatus.setImage(newImage);
                    tableStatus.setText(message);
                }
            }
        });
    }

    public void setLastSelectedProjectName(final String name) {
        this.lastSelectedProjectName = name;
    }

    public void setTableInput(final String input) {
        Object[] parsedInput = contentProvider.parseElements(input);
        dependencyTableViewer.setInput(parsedInput);
        dependencyTableViewer.setItemCount(parsedInput.length);
    }

    public String getLastSelectedProjectName() {
        return this.lastSelectedProjectName;
    }

    public TableViewer getDependencyTableViewer() {
        return this.dependencyTableViewer;
    }

    @Override
    public Image getTitleImage() {
        ImageDescriptor descriptor = Activator.getImageDescriptor(PathsToIconFiles.DUCKY);
        return descriptor == null ? null : descriptor.createImage();
    }

    @Override
    public void dispose() {
        super.dispose();

        // remove all listeners when view is closed
        getSite().getPage().removeSelectionListener(projectSelectionListener);
        Activator.getPlugin().getPreferenceStore()
                .removePropertyChangeListener(preferenceChangeDisplayUpdateListener);
        ResourcesPlugin.getWorkspace().removeResourceChangeListener(projectDeletedListener);
        Activator.getPlugin().getProjectInformation().removeComponentView();
    }

    @Override
    public void setFocus() {
        dependencyTableViewer.getControl().setFocus();
    }

    public void openError(String dialogTitle, String message, Throwable e) {
        ErrorDialog.openError(this.getSite().getShell(), dialogTitle, message,
                new Status(IStatus.ERROR, Activator.PLUGIN_ID, e.getMessage(), e));
    }

}