Java tutorial
/** * 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)); } }