/* * Contributions to FindBugs * Copyright (C) 2009, Andrei Loskutov * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 2.1 of the License, or (at your option) any later version. * * This library is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this library; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ package de.tobject.findbugs.view.properties; import java.util.Arrays; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeSet; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.views.properties.tabbed.AbstractPropertySection; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetPage; import de.tobject.findbugs.view.explorer.BugGroup; /** * @author Andrei */ public class BugGroupSection extends AbstractPropertySection { private Composite rootComposite; private Text text; private final PropPageTitleProvider provider; public BugGroupSection() { super(); provider = new PropPageTitleProvider(); } @Override public void createControls(Composite parent, final TabbedPropertySheetPage tabbedPropertySheetPage) { super.createControls(parent, tabbedPropertySheetPage); Color background = tabbedPropertySheetPage.getWidgetFactory().getColors().getBackground(); rootComposite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(1, true); layout.marginLeft = 5; layout.marginTop = 5; rootComposite.setLayout(layout); rootComposite.setSize(SWT.DEFAULT, SWT.DEFAULT); rootComposite.setBackground(background); text = new Text(rootComposite, SWT.READ_ONLY | SWT.WRAP); GridData data = new GridData(GridData.FILL_BOTH); data.horizontalIndent = 0; data.verticalIndent = 0; text.setLayoutData(data); text.setBackground(background); text.setFont(JFaceResources.getTextFont()); } @Override public void setInput(IWorkbenchPart part, ISelection selection) { super.setInput(part, selection); refreshText(selection); } @Override public void refresh() { super.refresh(); } @Override public void dispose() { if (rootComposite != null) { rootComposite.dispose(); } super.dispose(); } @Override public boolean shouldUseExtraSpace() { return true; } private void refreshText(ISelection selection) { text.setText(""); if (selection.isEmpty() || !(selection instanceof IStructuredSelection)) { return; } IStructuredSelection selection2 = (IStructuredSelection) selection; if (selection2.size() > 1) { String description = getSummary(selection2); text.setText(description); } else { Object element = selection2.getFirstElement(); if (!(element instanceof BugGroup)) { return; } BugGroup bugGroup = (BugGroup) element; String title = provider.getTitle(bugGroup); char[] separator = new char[title.length() + 1]; Arrays.fill(separator, '='); separator[0] = '\n'; text.setText(title + String.valueOf(separator) + "\nBugs count: " + bugGroup.getMarkersCount()); } } private String getSummary(IStructuredSelection selection) { Iterator<?> iter = selection.iterator(); Set<BugGroup> groups = new HashSet<BugGroup>(); Set<IMarker> markers = new HashSet<IMarker>(); while (iter.hasNext()) { Object object = iter.next(); if (!(object instanceof BugGroup)) { continue; } BugGroup group = (BugGroup) object; if (!groups.contains(group)) { markers.addAll(group.getAllMarkers()); groups.add(group); } } Set<String> names = new TreeSet<String>(); for (BugGroup bugGroup : groups) { String description = bugGroup.getShortDescription() + " (" + bugGroup.getMarkersCount() + ")"; names.add(description); } StringBuilder sb = new StringBuilder(); int maxLength = 0; for (String name : names) { sb.append(name).append("\n"); if (name.length() > maxLength) { maxLength = name.length(); } } char[] separator = new char[maxLength]; Arrays.fill(separator, '='); sb.append(separator); String description = sb.toString() + "\nOverall bugs count: " + markers.size(); return description; } }