package CrowdBenchmark.parts; import java.util.ArrayList; import java.util.List; import javax.annotation.PostConstruct; import javax.inject.Inject; import org.eclipse.e4.core.di.annotations.Optional; import org.eclipse.e4.core.services.events.IEventBroker; import org.eclipse.e4.ui.di.Focus; import org.eclipse.e4.ui.di.UIEventTopic; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnLabelProvider; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import CrowdBenchmark.events.EventConstants; import CrowdBenchmark.models.BenchmarkModel; import CrowdBenchmark.models.Data; import CrowdBenchmark.tools.io.CSVReader; import CrowdBenchmark.tools.io.My_CsvWriter; import CrowdBenchmark.util.Constant; import experiments.Experiment_Evaluate; import feedback.FeedBackModel; public class ResultPart extends AbstractPart { private TableViewer tableViewer; private Button btnImport; private Button btnExport; private FeedBackModel model; @Inject IEventBroker chartBroker; @PostConstruct public void createComposite(Composite parent) { parent.setLayout(new GridLayout(2, false)); GridData gd = new GridData(); gd.horizontalSpan = 2; // Label searchLabel = new Label(parent, SWT.NONE); // searchLabel.setText("Search: "); // final Text searchText = new Text(parent, SWT.BORDER | SWT.SEARCH); // searchText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL // | GridData.HORIZONTAL_ALIGN_FILL)); new Label(parent, SWT.NONE); createViewer(parent); createButton(parent); new Label(parent, SWT.NONE); // importResult(Constant.RESULT_TEST_FILE); } private void createButton(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridData gd_composite = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1); gd_composite.widthHint = 116; composite.setLayoutData(gd_composite); composite.setLayout(new GridLayout(2, false)); /* * { btnImport = new Button(composite, SWT.NONE); * btnImport.setText("Import"); btnImport.addSelectionListener(new * SelectionListener() { * * @Override public void widgetDefaultSelected(SelectionEvent e) { } * * @Override public void widgetSelected(SelectionEvent e) { * importResult(); } }); } */ { btnExport = new Button(composite, SWT.NONE); btnExport.setText("Export"); btnExport.addSelectionListener(new SelectionListener() { @Override public void widgetSelected(SelectionEvent e) { exportResult(); } @Override public void widgetDefaultSelected(SelectionEvent arg0) { // TODO Auto-generated method stub } }); } } protected void importResult(String filename) { CSVReader reader = new CSVReader(); reader.readfile(filename); updateTable(reader.getContent()); } protected void updateResult(String filename, int evalID) { CSVReader reader = new CSVReader(); reader.readfile(filename); appendTable(reader.getContent(), evalID); } protected void appendTable(List<Data> data, int evalID) { List<Data> currentData = (List<Data>) tableViewer.getInput(); if (currentData == null) currentData = new ArrayList<Data>(); for (Data datum : data) { datum.setEvalID(evalID + ""); currentData.add(datum); } refreshTable(currentData); } private void refreshTable(List<Data> currentData) { tableViewer.setInput(currentData); tableViewer.refresh(); chartBroker.post(EventConstants.RESULT_UPDATE_UPDATED, currentData); } protected void importResult() { FileDialog dlg = new FileDialog(btnImport.getShell(), SWT.OPEN); String[] filterExt = { "*.csv" }; dlg.setFilterExtensions(filterExt); dlg.setText("Open"); String path = dlg.open(); if (path == null) return; // CSVReader reader = new CSVReader(); // reader.readfile(path); // // System.out.println(reader.getContent()); // updateTable(reader.getContent()); importResult(path); } protected void exportResult() { FileDialog dlg = new FileDialog(btnExport.getShell(), SWT.SAVE); String[] filterExt = { "*.csv" }; dlg.setFilterExtensions(filterExt); dlg.setText("Save"); String path = dlg.open(); if (path == null) return; List<Data> data = (List<Data>) tableViewer.getInput(); TableColumn[] columns = tableViewer.getTable().getColumns(); String title = columns[0].getText(); for (int i = 1; i < columns.length; i++) { title += "\t" + columns[i].getText(); } title += "\n"; // System.out.println(title); // MyCsvWriter.getInstance().WriteToFile(data, path); My_CsvWriter.getInstance().WriteToFile(data, path, title); } private void createViewer(Composite parent) { tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.BORDER); createColumns(parent, tableViewer); final Table table = tableViewer.getTable(); table.setHeaderVisible(true); table.setLinesVisible(true); tableViewer.setContentProvider(new ArrayContentProvider()); // Get the content for the viewer, setInput will call getElements in the // contentProvider // updateTable(ResultProvider.INSTANCE.getData()); // Make the selection available to other views // getSite().setSelectionProvider(tableViewer); // Set the sorter for the table // Layout the viewer GridData gridData = new GridData(); gridData.verticalAlignment = GridData.FILL; gridData.horizontalSpan = 2; gridData.grabExcessHorizontalSpace = true; gridData.grabExcessVerticalSpace = true; gridData.horizontalAlignment = GridData.FILL; tableViewer.getControl().setLayoutData(gridData); } private void updateTable(List<Data> data) { List<Data> currentData = (List<Data>) tableViewer.getInput(); if (currentData == null) currentData = new ArrayList<Data>(); for (Data datum : data) { currentData.add(datum); } refreshTable(currentData); } private void createColumns(Composite parent, TableViewer tableViewer) { String[] titles = { "EvalID", "Answer Per Question", "Algorithm", "Worker Estimation Error", "Accuracy", "Completion time", "Factor value" }; int[] bounds = { 100, 150, 100, 100, 100, 100, 100 }; TableViewerColumn col = createTableViewerColumn(titles[0], bounds[0], 0); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getEvalID(); } }); col = createTableViewerColumn(titles[1], bounds[1], 1); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getAnswerPerQuestion(); } }); col = createTableViewerColumn(titles[2], bounds[2], 2); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getAlgorithm(); } }); col = createTableViewerColumn(titles[3], bounds[3], 3); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getWorkerEstimation(); } }); col = createTableViewerColumn(titles[4], bounds[4], 4); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getAccuracy(); } }); col = createTableViewerColumn(titles[5], bounds[5], 5); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getCompletionTime(); } }); col = createTableViewerColumn(titles[6], bounds[6], 6); col.setLabelProvider(new ColumnLabelProvider() { @Override public String getText(Object element) { Data p = (Data) element; return p.getObserver(); } }); } private TableViewerColumn createTableViewerColumn(String title, int bound, int colNumber) { final TableViewerColumn viewerColumn = new TableViewerColumn( tableViewer, SWT.NONE); final TableColumn column = viewerColumn.getColumn(); column.setText(title); column.setWidth(bound); column.setResizable(true); column.setMoveable(true); return viewerColumn; } // @Inject // @Optional // void updateMetricHanlder( // @UIEventTopic(EventConstants.DATA_UPDATE_UPDATED) MetricModel metrics) { // this.metrics = metrics; // } @Inject @Optional void updateHandler( @UIEventTopic(EventConstants.DATA_UPDATE_UPDATED) BenchmarkModel model) { this.model = model.getModel(); // run algorithms; if (model != null) { Experiment_Evaluate eval = new Experiment_Evaluate(); eval.SetFileConfig(Constant.ALGO_CONFIG_FILE); eval.setModel(this.model); eval.run(); } else { System.out.println("No input data"); } updateResult(Constant.RESULT_FILE, model.getEvalID()); } @Inject @Optional void updateHandler(@UIEventTopic(EventConstants.DATA_UPDATE_CLEAR) int num) { tableViewer.setInput(new ArrayList<Data>()); tableViewer.refresh(); } @Focus public void setFocus() { tableViewer.getControl().setFocus(); } public TableViewer getTableViewer() { return tableViewer; } public void setTableViewer(TableViewer tableViewer) { this.tableViewer = tableViewer; } }