1402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/******************************************************************************* 2402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Copyright (c) 2000, 2009 IBM Corporation and others. 3402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * All rights reserved. This program and the accompanying materials 4402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * are made available under the terms of the Eclipse Public License v1.0 5402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * which accompanies this distribution, and is available at 6402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * http://www.eclipse.org/legal/epl-v10.html 7402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 8402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contributors: 9402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * IBM Corporation - initial API and implementation 10402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *******************************************************************************/ 11402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpackage org.eclipse.test.internal.performance.results.ui; 12402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 13402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 14402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.File; 15402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.PrintWriter; 16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.io.StringWriter; 17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.lang.reflect.InvocationTargetException; 18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Comparator; 19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.IProgressMonitor; 21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.IStatus; 22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.preferences.InstanceScope; 23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.Action; 24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.IMenuManager; 25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.Separator; 26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.dialogs.MessageDialog; 27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.dialogs.ProgressMonitorDialog; 28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.operation.IRunnableWithProgress; 29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.resource.JFaceResources; 30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.IStructuredSelection; 31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.LabelProvider; 32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.SelectionChangedEvent; 33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.TreeViewer; 34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.Viewer; 35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.ViewerSorter; 36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.SWT; 37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.graphics.Color; 38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.graphics.Font; 39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.graphics.FontData; 40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.Composite; 41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.db.DB_Results; 42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.model.BuildResultsElement; 43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.model.ResultsElement; 44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.utils.IPerformancesConstants; 45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.utils.Util; 46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.performance.ui.GenerateResults; 47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.PlatformUI; 48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.dialogs.ElementListSelectionDialog; 49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.model.WorkbenchContentProvider; 50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.model.WorkbenchLabelProvider; 51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * View to see all the builds which have performance results stored in the database. 55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * <p> 56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Typical actions from this view are update local data files with builds results 57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * and generated the HTML pages. 58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * </p> 59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic class BuildsView extends PerformancesView { 61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Action to generate results. 64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final class GenerateAction extends Action { 66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll IStatus status; 67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void run() { 69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Ask for output directory 71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String resultGenerationDir = BuildsView.this.preferences.get(IPerformancesConstants.PRE_RESULTS_GENERATION_DIR, ""); 72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String pathFilter = (BuildsView.this.outputDir == null) ? resultGenerationDir : BuildsView.this.outputDir.getPath(); 73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll File dir = changeDir(pathFilter, "Select directory to write comparison files"); 74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (dir == null) { 75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.outputDir = dir; 78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.preferences.put(IPerformancesConstants.PRE_RESULTS_GENERATION_DIR, dir.getAbsolutePath()); 79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Select the reference 81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String[] baselines = BuildsView.this.results.getBaselines(); 82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int bLength = baselines.length; 83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String selectedBaseline; 84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll switch (bLength) { 85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll case 0: 86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // no baseline, nothing to do... 87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll selectedBaseline = BuildsView.this.results.getPerformanceResults().getBaselineName(); 88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll case 1: 90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // only one baseline, no selection to do 91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll selectedBaseline = baselines[0]; 92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll default: 94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // select the baseline from list 95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ElementListSelectionDialog dialog = new ElementListSelectionDialog(getSite().getShell(), new LabelProvider()); 96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll dialog.setTitle(getTitleToolTip()); 97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll dialog.setMessage("Select the baseline to use while generating results:"); 98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String[] defaultBaseline = new String[] { baselines[baselines.length - 1] }; 99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll dialog.setInitialSelections(defaultBaseline); 100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll dialog.setElements(baselines); 101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll dialog.open(); 102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Object[] selected = dialog.getResult(); 103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (selected == null) 104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll selectedBaseline = (String) selected[0]; 106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final String baselineName = selectedBaseline; 109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.results.getPerformanceResults().setBaselineName(baselineName); 110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Ask for fingerprints 112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final boolean fingerprints = MessageDialog.openQuestion(BuildsView.this.shell, getTitleToolTip(), "Generate only fingerprints?"); 113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Generate all selected builds 115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = BuildsView.this.buildsResults.length; 116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < length; i++) { 117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll generate(i, baselineName, fingerprints); 118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /* 122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Generate the HTML pages. 123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll private void generate(int i, final String baselineName, final boolean fingerprints) { 125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Create output directory 126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final String buildName = BuildsView.this.buildsResults[i].getName(); 127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final File genDir = new File(BuildsView.this.outputDir, buildName); 128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!genDir.exists() && !genDir.mkdir()) { 129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll MessageDialog.openError(BuildsView.this.shell, getTitleToolTip(), "Cannot create " + genDir.getPath() + " to generate results!"); 130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Create runnable 134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll IRunnableWithProgress runnable = new IRunnableWithProgress() { 135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { 137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll monitor.beginTask("Generate performance results", 10000); 139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll GenerateResults generation = new GenerateResults(BuildsView.this.results.getPerformanceResults(), 140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buildName, 141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll baselineName, 142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll fingerprints, 143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.dataDir, 144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll genDir); 145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll GenerateAction.this.status = generation.run(monitor); 146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll monitor.done(); 147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (Exception e) { 148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll }; 152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Run with progress monitor 154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell()); 155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll readProgress.run(true, true, runnable); 157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (InvocationTargetException e) { 158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // skip 159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (InterruptedException e) { 160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // skip 161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Results 164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!this.status.isOK()) { 165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll StringWriter swriter = new StringWriter(); 166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll PrintWriter pwriter = new PrintWriter(swriter); 167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll swriter.write(this.status.getMessage()); 168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Throwable ex = this.status.getException(); 169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (ex != null) { 170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll swriter.write(": "); 171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll swriter.write(ex.getMessage()); 172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll swriter.write('\n'); 173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ex.printStackTrace(pwriter); 174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll MessageDialog.open(this.status.getSeverity(), 176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.shell, 177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll getTitleToolTip(), 178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll swriter.toString(), 179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll SWT.NONE); 180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Action to update local data files with the performance results of a build. 186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * This may be done lazily (i.e. not done if the local data already knows 188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * the build) or forced (i.e. done whatever the local data files contain). 189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll class UpdateBuildAction extends Action { 191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean force; 193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll UpdateBuildAction(boolean force) { 195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super(); 196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.force = force; 197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void run() { 200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Verify that directories are set 202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (BuildsView.this.dataDir == null) { 203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (changeDataDir() == null) { 204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!MessageDialog.openConfirm(BuildsView.this.shell, getTitleToolTip(), "No local files directory is set, hence the update could not be written! OK to continue?")) { 205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Progress dialog 211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll IRunnableWithProgress runnable = new IRunnableWithProgress() { 212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { 214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll updateBuilds(monitor); 216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (Exception e) { 217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll e.printStackTrace(); 218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll }; 221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell()); 222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll try { 223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll readProgress.run(true, true, runnable); 224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (InvocationTargetException e) { 225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } catch (InterruptedException e) { 227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Reset Components and Builds views input 231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll refreshInput(); 232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll getSiblingView().refreshInput(); 233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll void updateBuilds(IProgressMonitor monitor) { 236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.updateBuilds(monitor, this.force); 237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Action to update local data files with the performance results of all builds. 242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * This may be done lazily (i.e. not done if the local data already knows 244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * the build) or forced (i.e. done whatever the local data files contain). 245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll class UpdateAllBuildsAction extends UpdateBuildAction { 247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll UpdateAllBuildsAction(boolean force) { 249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super(force); 250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// 252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// public boolean isEnabled() { 253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// String[] elements = buildsToUpdate(); 254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// return elements != null; 255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// } 256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll void updateBuilds(IProgressMonitor monitor) { 258402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.updateAllBuilds(monitor, this.force); 259402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 260402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 261402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 262402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll /** 263402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Class to compare builds regarding their date instead of their name. 264402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * 265402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see Util#getBuildDate(String) 266402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 267402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll class BuildDateComparator implements Comparator { 268402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public int compare(Object o1, Object o2) { 269402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String s1 = (String) o1; 270402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String s2 = (String) o2; 271402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return Util.getBuildDate(s1).compareTo(Util.getBuildDate(s2)); 272402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 273402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 274402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 275402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Views 276402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll PerformancesView componentsView; 277402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 278402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Results model 279402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildResultsElement[] buildsResults; 280402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 281402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Generation info 282402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll File outputDir; 283402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 284402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Actions 285402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Action generate; 286402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll UpdateBuildAction updateBuild, updateAllBuilds; 287402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// UpdateBuildAction forceUpdateBuild, forceUpdateAllBuilds; 288402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 289402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // SWT resources 290402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Font italicFont; 291402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 292402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 293402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Default constructor. 294402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 295402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic BuildsView() { 296402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID); 297402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.preferences.addPreferenceChangeListener(this); 298402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 299402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 300402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 301402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Compute the list of builds to update based on their status. 302402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 303402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollString[] buildsToUpdate() { 304402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Object[] elements = this.results.getBuilds(); 305402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = elements.length; 306402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String[] buildsToUpdate = new String[length]; 307402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int count = 0; 308402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=0; i<length; i++) { 309402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildResultsElement element = (BuildResultsElement) elements[i]; 310402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (element.getStatus() == 0) { 311402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll buildsToUpdate[count++] = element.getName(); 312402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 313402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 314402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (count == 0) return null; 315402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (count < length) { 316402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.arraycopy(buildsToUpdate, 0, buildsToUpdate = new String[count], 0, count); 317402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 318402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return buildsToUpdate; 319402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 320402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 321402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* (non-Javadoc) 322402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#createPartControl(org.eclipse.swt.widgets.Composite) 323402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 324402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void createPartControl(Composite parent) { 325402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.createPartControl(parent); 326402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 327402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Create the viewer 328402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); 329402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 330402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set the content provider: first level is builds list 331402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll WorkbenchContentProvider contentProvider = new WorkbenchContentProvider() { 332402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public Object[] getElements(Object o) { 333402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return getBuilds(); 334402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 335402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll }; 336402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.viewer.setContentProvider(contentProvider); 337402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 338402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set the label provider 339402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll WorkbenchLabelProvider labelProvider = new WorkbenchLabelProvider() { 340402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 341402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set an italic font when no local data have been read 342402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public Font getFont(Object element) { 343402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Font font = super.getFont(element); 344402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (element instanceof BuildResultsElement) { 345402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (((BuildResultsElement) element).isUnknown()) { 346402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (BuildsView.this.italicFont == null) { 347402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll FontData[] defaultFont = JFaceResources.getDefaultFont().getFontData(); 348402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll FontData italicFontData = new FontData(defaultFont[0].getName(), defaultFont[0].getHeight(), SWT.ITALIC); 349402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll BuildsView.this.italicFont = new Font(DEFAULT_DISPLAY, italicFontData); 350402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 351402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return BuildsView.this.italicFont; 352402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 353402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 354402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return font; 355402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 356402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 357402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set font in gray when no local data is available (i.e. local data needs to be updated) 358402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public Color getForeground(Object element) { 359402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Color color = super.getForeground(element); 360402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (element instanceof BuildResultsElement) { 361402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!((BuildResultsElement) element).isRead()) { 362402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll color = DARK_GRAY; 363402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 364402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 365402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return color; 366402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 367402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll }; 368402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.viewer.setLabelProvider(labelProvider); 369402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 370402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set the children sorter 371402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll ViewerSorter nameSorter = new ViewerSorter() { 372402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 373402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Sort children using specific comparison (see the implementation 374402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // of the #compareTo(Object) in the ResultsElement hierarchy 375402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll public int compare(Viewer view, Object e1, Object e2) { 376402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (e2 instanceof ResultsElement) { 377402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return ((ResultsElement) e2).compareTo(e1); 378402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 379402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return super.compare(view, e1, e2); 380402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 381402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll }; 382402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.viewer.setSorter(nameSorter); 383402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 384402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Finalize viewer initialization 385402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll PlatformUI.getWorkbench().getHelpSystem().setHelp(this.viewer.getControl(), "org.eclipse.test.performance.ui.builds"); 386402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll finalizeViewerCreation(); 387402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 388402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 389402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* (non-Javadoc) 390402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.ui.part.WorkbenchPart#dispose() 391402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 392402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void dispose() { 393402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.italicFont != null) { 394402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.italicFont.dispose(); 395402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 396402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.dispose(); 397402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 398402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 399402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 400402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc) 401402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#fillContextMenu(org.eclipse.jface.action.IMenuManager) 402402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 403402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillContextMenu(IMenuManager manager) { 404402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.fillContextMenu(manager); 405402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll manager.add(this.generate); 406402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll manager.add(this.updateBuild); 407402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// manager.add(this.forceUpdateBuild); 408402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 409402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 410402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 411402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc) 412402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#fillLocalPullDown(org.eclipse.jface.action.IMenuManager) 413402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 414402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillFiltersDropDown(IMenuManager manager) { 415402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.fillFiltersDropDown(manager); 416402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll manager.add(this.filterLastBuilds); 417402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 418402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 419402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 420402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the local data drop-down menu 421402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 422402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillLocalDataDropDown(IMenuManager manager) { 423402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.fillLocalDataDropDown(manager); 424402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll manager.add(new Separator()); 425402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll manager.add(this.updateAllBuilds); 426402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// manager.add(this.forceUpdateAllBuilds); 427402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 428402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 429402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 430402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get all builds from the model. 431402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 432402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollObject[] getBuilds() { 433402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.results == null) { 434402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll initResults(); 435402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 436402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.results.getBuilds(); 437402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 438402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 439402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 440402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Return the components view. 441402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 442402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollPerformancesView getSiblingView() { 443402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.componentsView == null) { 444402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.componentsView = (PerformancesView) getWorkbenchView("org.eclipse.test.internal.performance.results.ui.ComponentsView"); 445402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 446402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return this.componentsView; 447402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 448402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 449402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 450402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc) 451402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#makeActions() 452402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 453402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid makeActions() { 454402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 455402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.makeActions(); 456402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 457402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Generate action 458402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.generate = new GenerateAction(); 459402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.generate.setText("&Generate"); 460402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 461402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update build actions 462402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION); 463402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateBuild = new UpdateBuildAction(false); 464402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateBuild.setText("&Update from DB"); 465402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateBuild.setEnabled(connected); 466402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.forceUpdateBuild = new UpdateBuildAction(true); 467402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.forceUpdateBuild.setText("Force Update"); 468402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 469402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update build action 470402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds = new UpdateAllBuildsAction(false); 471402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.setText("&Update from DB (all)"); 472402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.setEnabled(connected); 473402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.forceUpdateAllBuilds = new UpdateAllBuildsAction(true); 474402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.forceUpdateAllBuilds.setText("Force Update all"); 475402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 476402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set filters default 477402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.filterBaselineBuilds.setChecked(false); 478402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.filterNightlyBuilds.setChecked(false); 479402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 480402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 481402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/** 482402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Reset the views. 483402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 484402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void resetView() { 485402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 486402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean debug = true; 487402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 488402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Look whether database constants has changed or not 489402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION); 490402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION); 491402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION); 492402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null); 493402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean noLastBuild = lastBuild.length() == 0; 494402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug) { 495402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println("Reset View:"); 496402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - eclispe version = "+eclipseVersion); 497402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - connected = "+connected); 498402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - db location = "+databaseLocation); 499402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - last build = "+(noLastBuild?"<none>":lastBuild)); 500402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 501402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final boolean sameVersion = DB_Results.getDbVersion().endsWith(Integer.toString(eclipseVersion)); 502402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final boolean sameConnection = connected == DB_Results.DB_CONNECTION; 503402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final boolean sameDB = sameVersion && databaseLocation.equals(DB_Results.getDbLocation()); 504402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean sameLastBuild = (noLastBuild && LAST_BUILD == null) || lastBuild.equals(LAST_BUILD); 505402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug) { 506402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - same version: "+sameVersion); 507402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - same connection: "+sameConnection); 508402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - same DB: "+sameDB); 509402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - same last build: "+sameLastBuild); 510402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 511402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final PerformancesView siblingView = getSiblingView(); 512402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (sameConnection && sameDB) { 513402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!sameLastBuild) { 514402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Set last build 515402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll LAST_BUILD = noLastBuild ? null : lastBuild; 516402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.results.setLastBuildName(LAST_BUILD); 517402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.results.setLastBuildName(LAST_BUILD); 518402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 519402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Reset views content 520402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll resetInput(); 521402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.resetInput(); 522402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 523402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // May be read local data now 524402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll File newDataDir = changeDataDir(); 525402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (newDataDir == null) { 526402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.dataDir = null; 527402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.dataDir = null; 528402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 529402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 530402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // No database preferences has changed do nothing 531402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 532402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 533402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 534402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update database constants 535402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean updated = DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation); 536402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (debug) { 537402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll System.out.println(" - updated: "+updated); 538402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 539402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!connected) { 540402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (!updated) { 541402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll MessageDialog.openError(this.shell, getTitleToolTip(), "Error while updating database results constants!\nOpen error log to see more details on this error"); 542402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 543402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else if (updated) { 544402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll StringBuffer message = new StringBuffer("Database connection has been correctly "); 545402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll message.append( connected ? "opened." : "closed."); 546402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll MessageDialog.openInformation(this.shell, getTitleToolTip(), message.toString()); 547402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 548402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll MessageDialog.openError(this.shell, getTitleToolTip(), "The database connection cannot be established!\nOpen error log to see more details on this error"); 549402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll DB_Results.updateDbConstants(false, eclipseVersion, databaseLocation); 550402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 551402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll setTitleToolTip(); 552402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.setTitleToolTip(); 553402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 554402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Refresh view 555402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (sameVersion && sameLastBuild) { 556402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Refresh only builds view as the sibling view (Components) contents is based on local data files contents 557402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.results.resetBuildNames(); 558402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll refreshInput(); 559402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 560402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Reset views content 561402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll resetInput(); 562402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.resetInput(); 563402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 564402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // May be read local data now 565402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (MessageDialog.openQuestion(this.shell, getTitleToolTip(), "Do you want to read local data right now?")) { 566402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll changeDataDir(); 567402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 568402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.dataDir = null; 569402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll siblingView.dataDir = null; 570402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 571402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 572402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 573402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update actions 574402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateBuild.setEnabled(connected); 575402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.setEnabled(connected); 576402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 577402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 578402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* 579402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc) 580402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.test.internal.performance.results.ui.PerformancesView#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent) 581402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */ 582402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void selectionChanged(SelectionChangedEvent event) { 583402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll super.selectionChanged(event); 584402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 585402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update selected element 586402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Object selection = this.viewer.getSelection(); 587402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = 0; 588402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (selection instanceof IStructuredSelection) { 589402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll Object[] elements = ((IStructuredSelection)selection).toArray(); 590402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll length = elements == null ? 0 : elements.length; 591402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.buildsResults = new BuildResultsElement[length]; 592402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (length == 0) { 593402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.setText("&Update from DB (all)"); 594402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 595402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 596402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=0; i<length; i++) { 597402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.buildsResults[i] = (BuildResultsElement) elements[i]; 598402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 599402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 600402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll return; 601402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 602402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 603402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update update build action 604402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// boolean enableUpdateBuild = true; 605402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// boolean enableGenerate = true; 606402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int readBuilds = 0; 607402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=0; i<length; i++) { 608402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.buildsResults[i].isRead()) { 609402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// enableUpdateBuild = false; 610402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll readBuilds++; 611402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 612402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// enableGenerate = false; 613402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 614402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 615402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.updateBuild.setEnabled(enableUpdateBuild); 616402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll// this.forceUpdateBuild.setEnabled(!enableUpdateBuild); 617402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll final boolean force = readBuilds < length; 618402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateBuild.force = force; 619402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.force = force; 620402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.updateAllBuilds.setText("&Update from DB"); 621402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 622402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll // Update generate action 623402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll boolean enableGenerate = true; 624402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (enableGenerate) { 625402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i=0; i<length; i++) { 626402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.buildsResults[i].getName().startsWith(DB_Results.getDbBaselinePrefix())) { 627402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll enableGenerate = false; 628402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll break; 629402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 630402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 631402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 632402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.generate.setEnabled(enableGenerate); 633402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 634402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 635402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid updateAllBuilds(IProgressMonitor monitor, boolean force) { 636402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.dataDir == null) { 637402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll changeDataDir(); 638402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 639402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String[] builds = buildsToUpdate(); 640402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (builds == null) { 641402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.results.updateBuild(null, true, this.dataDir, monitor); 642402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } else { 643402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.results.updateBuilds(builds, force, this.dataDir, monitor); 644402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 645402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 646402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 647402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid updateBuilds(IProgressMonitor monitor, boolean force) { 648402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll if (this.dataDir == null) { 649402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll changeDataDir(); 650402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 651402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll int length = this.buildsResults.length; 652402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll String[] builds = new String[length]; 653402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll for (int i = 0; i < length; i++) { 654402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll builds[i] = this.buildsResults[i].getName(); 655402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll } 656402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll this.results.updateBuilds(builds, force, this.dataDir, monitor); 657402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll} 658402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll 659402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}