/* * #%~ * Combinatorial Testing * %% * Copyright (C) 2008 - 2014 Overture * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program 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 General Public License for more details. * * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #~% */ package org.overture.ide.plugins.combinatorialtesting.views; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.views.IViewDescriptor; import org.overture.ct.utils.TraceTestResult; import org.overture.ide.plugins.combinatorialtesting.ITracesConstants; import org.overture.ide.plugins.combinatorialtesting.OvertureTracesPlugin; import org.overture.ide.plugins.combinatorialtesting.views.treeView.NotYetReadyTreeNode; import org.overture.ide.plugins.combinatorialtesting.views.treeView.TraceTestGroup; import org.overture.ide.plugins.combinatorialtesting.views.treeView.TraceTestTreeNode; import org.overture.interpreter.traces.Verdict; /** * This sample class demonstrates how to plug-in a new workbench view. The view shows data obtained from the model. The * sample creates a dummy model on the fly, but a real implementation would connect to the model available either in * this or another plug-in (e.g. the workspace). The view is connected to the model using a content provider. * <p> * The view uses a label provider to define how model objects should be presented in the view. Each view can present the * same model objects using different labels and icons, if needed. Alternatively, a single label provider can be shared * between views in order to ensure that objects of the same type are presented in the same way everywhere. * <p> */ public class TraceTest extends ViewPart implements ISelectionListener { private TableViewer viewer; private Action action1; private Action action2; private Action doubleClickAction; final Display display = Display.getCurrent(); private class Data { String traceDef; String description; Verdict status; private Data(String traceDef, String Description, Verdict status) { this.description = Description; this.traceDef = traceDef; this.status = status; } public String GetDescription() { return this.description; } } /* * The content provider class is responsible for providing objects to the view. It can wrap existing objects in * adapters or simply return objects as-is. These objects may be sensitive to the current input of the view, or * ignore it and always show the same content (like Task List, for example). */ class ViewContentProvider implements IStructuredContentProvider { public void inputChanged(Viewer v, Object oldInput, Object newInput) { } public void dispose() { } public Object[] getElements(Object inputElement) { if (inputElement instanceof List) { @SuppressWarnings("rawtypes") List list = (List) inputElement; return list.toArray(); } return new Object[0]; } } class ViewLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) { Data data = (Data) element; String columnText; switch (columnIndex) { case 0: columnText = data.traceDef; break; case 1: columnText = data.description; // StringConverter.asString(data.number); break; case 2: columnText = ""; // StringConverter.asString(data.number); break; default: columnText = "not set"; } return columnText; } public Image getColumnImage(Object obj, int index) { if (index == 2) { return getImage(obj); } return null; } @Override public Image getImage(Object obj) { Data data = (Data) obj; String imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_UNKNOWN; if (data.status == Verdict.PASSED) { imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_SUCCES; } else if (data.status == null) { imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_UNKNOWN; } else if (data.status == Verdict.INCONCLUSIVE) { imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_UNDETERMINED; } else if (data.status == Verdict.FAILED) { imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_FAIL; } else if (data.status == Verdict.SKIPPED) { imgPath = OvertureTracesPlugin.IMG_TRACE_TEST_CASE_SKIPPED; } return OvertureTracesPlugin.getImageDescriptor(imgPath).createImage(); // return // PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJ_ELEMENT); } } class NameSorter extends ViewerSorter { } /** * The constructor. */ public TraceTest() { } /** * This is a callback that will allow us to create the viewer and initialize it. */ @Override public void createPartControl(Composite parent) { viewer = new TableViewer(parent, SWT.FULL_SELECTION | SWT.H_SCROLL | SWT.V_SCROLL); // test setup columns... TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(50, 100, true)); layout.addColumnData(new ColumnWeightData(50, 100, true)); // layout.addColumnData(new ColumnWeightData(50, 100, true)); viewer.getTable().setLayout(layout); viewer.getTable().setLinesVisible(true); viewer.getTable().setHeaderVisible(true); viewer.getTable().setSortDirection(SWT.NONE); viewer.setSorter(null); TableColumn column = new TableColumn(viewer.getTable(), SWT.LEFT); column.setText("Trace Test case"); column.setToolTipText("Trace Name"); TableColumn column2 = new TableColumn(viewer.getTable(), SWT.LEFT); column2.setText("Result"); column2.setToolTipText("Show Description"); viewer.setContentProvider(new ViewContentProvider()); viewer.setLabelProvider(new ViewLabelProvider()); // viewer.setSorter(new NameSorter()); // input makeActions(); hookDoubleClickAction(); } private void makeActions() { action1 = new Action() { @Override public void run() { showMessage("Action 1 executed"); for (IViewDescriptor v : getViewSite().getWorkbenchWindow().getWorkbench().getViewRegistry().getViews()) { if (v.getId().equals(ITracesConstants.TRACES_VIEW_ID)) { this.addListenerObject(v); } } } }; action1.setText("Action 1"); action1.setToolTipText("Action 1 tooltip"); action1.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); action2 = new Action() { @Override public void run() { showMessage("Action 2 executed"); } }; action2.setText("Action 2"); action2.setToolTipText("Action 2 tooltip"); action2.setImageDescriptor(PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJS_INFO_TSK)); doubleClickAction = new Action() { @Override public void run() { ISelection selection = viewer.getSelection(); Object obj = ((IStructuredSelection) selection).getFirstElement(); if (obj instanceof Data) { showMessage(((Data) obj).GetDescription().toString()); } } }; } private void hookDoubleClickAction() { viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { doubleClickAction.run(); } }); } private void showMessage(String message) { MessageDialog.openInformation(viewer.getControl().getShell(), "Trace Test", message); } /** * Passing the focus request to the viewer's control. */ @Override public void setFocus() { viewer.getControl().setFocus(); } public void selectionChanged(IWorkbenchPart part, ISelection selection) { if (selection instanceof IStructuredSelection && part instanceof TracesTreeView) { Object first = ((IStructuredSelection) selection).getFirstElement(); // System.out.println(first); if (first instanceof TraceTestTreeNode && part instanceof TracesTreeView && !(first instanceof NotYetReadyTreeNode) && !(first instanceof TraceTestGroup)) { TraceTestTreeNode traceTestCaseNode = (TraceTestTreeNode) first; TraceTestResult res = traceTestCaseNode.getResult(); List<Data> list = new ArrayList<Data>(); for (int i = 0; res != null && i < res.getArguments().size(); i++) { if (res.getResults().size() > i) { list.add(new Data(res.getArguments().get(i), res.getResults().get(i), res.getStatus())); } else if (res.getResults().size() <= i) { list.add(new Data(res.getArguments().get(i), "N / A", res.getStatus())); } } viewer.setInput(list); } else { viewer.setInput(null); } refreshList(); } } private void refreshList() { display.asyncExec(new Runnable() { public void run() { viewer.refresh(); } }); } }