/******************************************************************************* * Copyright (c) 2016 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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 * * Contributors: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.windup.ui.internal.explorer; import java.io.File; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.jface.layout.GridDataFactory; import org.eclipse.jface.layout.GridLayoutFactory; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.jboss.tools.windup.ui.internal.Messages; import org.jboss.tools.windup.windup.Hint; import org.jboss.tools.windup.windup.QuickFix; /** * Diff dialog for previewing Windup quick fixes. */ public class QuickFixDiffDialog extends DiffDialog { private TableViewer table; private Hint hint; private QuickFix quickfix; private QuickfixService quickfixService; private IResource left; private IMarker marker; public QuickFixDiffDialog(Shell shell, Hint hint, QuickfixService quickfixService) { super(shell); this.quickfix = hint.getQuickFixes().get(0); this.hint = hint; this.quickfixService = quickfixService; } @Override protected IResource computeLeft() { marker = (IMarker)quickfix.getMarker(); if (marker != null && marker.exists()) { left = marker.getResource(); return left; } return null; } @Override protected IResource computeRight() { if (left != null) { return quickfixService.getQuickFixedResource(quickfix, marker); } return null; } @Override protected Control createDialogArea(Composite parent) { if (hint.getQuickFixes().size() == 1) { return super.createDialogArea(parent); } Composite container = new Composite(parent, SWT.NONE); GridLayoutFactory.fillDefaults().margins(0, 0).applyTo(container); GridDataFactory.fillDefaults().grab(true, true).applyTo(container); table = new TableViewer(container, SWT.BORDER|SWT.FULL_SELECTION|SWT.SINGLE|SWT.H_SCROLL|SWT.V_SCROLL); buildColumns(); table.getTable().setHeaderVisible(true); table.getTable().setLinesVisible(true); table.setContentProvider(ArrayContentProvider.getInstance()); table.setInput(hint.getQuickFixes()); GridDataFactory.fillDefaults().grab(true, false).hint(SWT.DEFAULT, 100).applyTo(table.getTable()); table.addSelectionChangedListener(new ISelectionChangedListener() { @Override public void selectionChanged(SelectionChangedEvent event) { if (!event.getSelection().isEmpty()) { QuickFixDiffDialog.this.quickfix = (QuickFix)((StructuredSelection)event.getSelection()).getFirstElement(); QuickFixDiffDialog.this.loadPreview(); } } }); Control control = super.doCreateDialogArea(container); table.setSelection(new StructuredSelection(hint.getQuickFixes().get(0))); return control; } public List<QuickFix> getQuickfixes() { return hint.getQuickFixes(); } private void buildColumns() { // Type Column TableViewerColumn column = new TableViewerColumn(table, SWT.NONE); column.getColumn().setWidth(200); column.getColumn().setText(Messages.ComparePreviewer_quickFixFile); column.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { QuickFix fix = (QuickFix)element; int start = fix.getFile().lastIndexOf(File.separator); return fix.getFile().substring(start+1, fix.getFile().length()); } }); // Text Column column = new TableViewerColumn(table, SWT.NONE); column.getColumn().setWidth(500); column.getColumn().setText(Messages.ComparePreviewer_quickFixText); column.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { QuickFix fix = (QuickFix)element; return fix.getName(); } }); } }