/******************************************************************************* * Copyright (c) 2009, 2010 Dejan Spasic * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.phpsrc.eclipse.pti.tools.phpmd.views; import java.util.Comparator; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IMemento; import org.eclipse.ui.IViewSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.ViewPart; import org.phpsrc.eclipse.pti.tools.phpmd.model.IViolation; import org.phpsrc.eclipse.pti.tools.phpmd.model.ViolationManager; import org.phpsrc.eclipse.pti.tools.phpmd.util.EditorUtil; public class PhpmdView extends ViewPart { public static final String ID = "org.phpsrc.eclipse.pti.tools.phpmd.views.PhpmdView"; private TableViewer tableViewer; private TableColumn filenaColumn; private TableColumn priorityColumn; private TableColumn categoryColumn; private TableColumn ruleColumn; private PhpmdViewSorter sorter; private IMemento memento; @Override public void createPartControl(Composite parent) { createTableViewer(parent); final Table table = createTable(); createFileNameColumn(table); createPriorityColumn(table); createRuleColumn(table); createCategoryColumn(table); createTableSorter(); hookMouse(); } private void createTableViewer(Composite parent) { tableViewer = new TableViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); tableViewer.setContentProvider(new PhpmdViewContentProvider()); tableViewer.setLabelProvider(new PhpmdViewLableProvider()); tableViewer.setInput(ViolationManager.getManager()); } private Table createTable() { final Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); return table; } private TableColumn createFileNameColumn(Table table) { if (null == filenaColumn) { filenaColumn = new TableColumn(table, SWT.LEFT); filenaColumn.setText("Filename"); filenaColumn.setWidth(200); } return filenaColumn; } private TableColumn createPriorityColumn(Table table) { if (null == priorityColumn) { priorityColumn = new TableColumn(table, SWT.LEFT); priorityColumn.setText("Priority"); priorityColumn.setWidth(180); } return priorityColumn; } private TableColumn createRuleColumn(Table table) { if (null == ruleColumn) { ruleColumn = new TableColumn(table, SWT.LEFT); ruleColumn.setText("Rule"); ruleColumn.setWidth(180); } return ruleColumn; } private TableColumn createCategoryColumn(Table table) { if (null == categoryColumn) { categoryColumn = new TableColumn(table, SWT.LEFT); categoryColumn.setText("Category"); categoryColumn.setWidth(180); } return categoryColumn; } private void createTableSorter() { Comparator<IViolation> filenameComparator = new Comparator<IViolation>() { public int compare(IViolation v1, IViolation v2) { return v1.getFileName().compareTo(v2.getFileName()); } }; Comparator<IViolation> priorityComparator = new Comparator<IViolation>() { public int compare(IViolation v1, IViolation v2) { if (v1.getPriority() == v2.getPriority()) return 0; return v1.getPriority() > v2.getPriority() ? 1 : -1; } }; Comparator<IViolation> categoryComparator = new Comparator<IViolation>() { public int compare(IViolation v1, IViolation v2) { return v1.getRuleSet().compareTo(v2.getRuleSet()); } }; Comparator<IViolation> ruleComparator = new Comparator<IViolation>() { public int compare(IViolation v1, IViolation v2) { return v1.getRule().compareTo(v2.getRule()); } }; final TableColumn[] tableColumns = new TableColumn[] { filenaColumn, priorityColumn, ruleColumn, categoryColumn, }; final Comparator[] columnComparators = new Comparator[] { filenameComparator, priorityComparator, ruleComparator, categoryComparator, }; sorter = new PhpmdViewSorter(tableViewer, tableColumns, columnComparators); if (null != memento) sorter.init(memento); tableViewer.setSorter(sorter); } private void hookMouse() { tableViewer.getTable().addMouseListener(new MouseAdapter() { @Override public void mouseDoubleClick(MouseEvent e) { EditorUtil.openEditor(getSite().getPage(), tableViewer.getSelection()); } }); } public void saveState(IMemento memento) { super.saveState(memento); sorter.saveState(memento); } public void init(IViewSite site, IMemento memento) throws PartInitException { super.init(site, memento); this.memento = memento; } @Override public void setFocus() { } }