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.lang.reflect.InvocationTargetException;
16402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.text.NumberFormat;
17402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.HashSet;
18402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Locale;
19402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport java.util.Set;
20402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
21402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.IProgressMonitor;
22402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.preferences.IEclipsePreferences;
23402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.preferences.InstanceScope;
24402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener;
25402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent;
26402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.Action;
27402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.IAction;
28402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.IMenuListener;
29402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.IMenuManager;
30402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.IToolBarManager;
31402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.action.MenuManager;
32402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.dialogs.MessageDialog;
33402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.dialogs.ProgressMonitorDialog;
34402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.operation.IRunnableWithProgress;
35402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.ISelectionChangedListener;
36402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.SelectionChangedEvent;
37402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.TreeViewer;
38402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.Viewer;
39402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.jface.viewers.ViewerFilter;
40402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.SWT;
41402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.graphics.Color;
42402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.Composite;
43402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.DirectoryDialog;
44402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.Display;
45402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.Menu;
46402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.swt.widgets.Shell;
47402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.db.DB_Results;
48402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.model.BuildResultsElement;
49402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.model.PerformanceResultsElement;
50402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.utils.IPerformancesConstants;
51402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.test.internal.performance.results.utils.Util;
52402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IActionBars;
53402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IMemento;
54402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IViewPart;
55402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IViewSite;
56402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IWorkbench;
57402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IWorkbenchPage;
58402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.IWorkbenchWindow;
59402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.PartInitException;
60402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.PlatformUI;
61402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.part.ViewPart;
62402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.views.properties.IPropertySheetPage;
63402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.eclipse.ui.views.properties.PropertySheetPage;
64402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollimport org.osgi.service.prefs.BackingStoreException;
65402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
66402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
67402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
68402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Abstract view for performance results.
69402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
70402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic abstract class PerformancesView extends ViewPart implements ISelectionChangedListener, IPreferenceChangeListener {
71402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
72402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Format
73402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final NumberFormat DOUBLE_FORMAT = NumberFormat.getNumberInstance(Locale.US);
74402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static {
75402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		DOUBLE_FORMAT.setMaximumFractionDigits(3);
76402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
77402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
78402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Graphic constants
79402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Display DEFAULT_DISPLAY = Display.getDefault();
80402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color BLACK= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLACK);
81402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color BLUE= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_BLUE);
82402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color GREEN= DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GREEN);
83402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color RED = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_RED);
84402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_GRAY);
85402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color DARK_GRAY = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_DARK_GRAY);
86402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color YELLOW = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_YELLOW);
87402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final Color WHITE = DEFAULT_DISPLAY.getSystemColor(SWT.COLOR_WHITE);
88402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
89402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Viewer filters
90402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static final ViewerFilter[] NO_FILTER = new ViewerFilter[0];
91402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	final static ViewerFilter FILTER_BASELINE_BUILDS = new ViewerFilter() {
92402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public boolean select(Viewer v, Object parentElement, Object element) {
93402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (element instanceof BuildResultsElement) {
94402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				BuildResultsElement buildElement = (BuildResultsElement) element;
95402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				return !buildElement.getName().startsWith(DB_Results.getDbBaselinePrefix());
96402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
97402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			return true;
98402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
99402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
100402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	public final static ViewerFilter FILTER_NIGHTLY_BUILDS = new ViewerFilter() {
101402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public boolean select(Viewer v, Object parentElement, Object element) {
102402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (element instanceof BuildResultsElement) {
103402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				BuildResultsElement buildElement = (BuildResultsElement) element;
104402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				return buildElement.getName().charAt(0) != 'N';
105402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
106402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			return true;
107402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
108402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
109402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	final static ViewerFilter FILTER_OLD_BUILDS = new ViewerFilter() {
110402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public boolean select(Viewer v, Object parentElement, Object element) {
111402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (element instanceof BuildResultsElement) {
112402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				BuildResultsElement buildElement = (BuildResultsElement) element;
113402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				return buildElement.isImportant();
114402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
115402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	        return true;
116402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
117402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
118402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	static String LAST_BUILD;
119402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	final static ViewerFilter FILTER_LAST_BUILDS = new ViewerFilter() {
120402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public boolean select(Viewer v, Object parentElement, Object element) {
121402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (LAST_BUILD != null && element instanceof BuildResultsElement) {
122402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				BuildResultsElement buildElement = (BuildResultsElement) element;
123402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				return buildElement.isBefore(LAST_BUILD);
124402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
125402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	        return true;
126402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
127402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
128402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Set viewFilters = new HashSet();
129402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
130402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// SWT resources
131402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Shell shell;
132402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Display display;
133402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	TreeViewer viewer;
134402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IPropertySheetPage propertyPage;
135402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
136402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Data info
137402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	File dataDir;
138402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
139402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Views
140402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IMemento viewState;
141402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
142402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Results model information
143402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	PerformanceResultsElement results;
144402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
145402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Actions
146402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Action changeDataDir;
147402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Action filterBaselineBuilds;
148402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Action filterNightlyBuilds;
149402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Action filterOldBuilds;
150402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Action filterLastBuilds;
151402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//	Action dbConnection;
152402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
153402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Eclipse preferences
154402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IEclipsePreferences preferences;
155402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
156402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
157402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get a view from its ID.
158402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
159402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @param viewId The ID of the view
160402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @return The found view or <code>null</null> if not found.
161402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
162402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollstatic IViewPart getWorkbenchView(String viewId) {
163402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IWorkbench workbench = PlatformUI.getWorkbench();
164402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IWorkbenchWindow[] windows = workbench.getWorkbenchWindows();
165402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	int length = windows.length;
166402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	for (int i=0; i<length; i++) {
167402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		IWorkbenchWindow window = windows[i];
168402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		IWorkbenchPage[] pages = window.getPages();
169402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		int pLength = pages.length;
170402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		for (int j=0; j<pLength; j++) {
171402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			IWorkbenchPage page = pages[i];
172402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			IViewPart view = page.findView(viewId);
173402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (view != null) {
174402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				return view;
175402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
176402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
177402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
178402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	return null;
179402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
180402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
181402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
182402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * The constructor.
183402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
184402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic PerformancesView() {
185402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
186402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Get preferences
187402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID);
188402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
189402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Init db constants
190402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
191402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
192402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
193402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
194402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences.addPreferenceChangeListener(this);
195402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
196402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Init tool tip
197402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	setTitleToolTip();
198402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
199402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Init milestones
200402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Util.initMilestones(this.preferences);
201402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
202402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Init last build
203402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null);
204402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	LAST_BUILD = lastBuild == null || lastBuild.length() == 0 ? null : lastBuild;
205402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
206402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
207402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollFile changeDataDir() {
208402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String localDataDir = this.preferences.get(IPerformancesConstants.PRE_LOCAL_DATA_DIR, "");
209402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String filter = (this.dataDir == null) ? localDataDir : this.dataDir.getPath();
210402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	File dir = this.dataDir;
211402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.dataDir = changeDir(filter, "Select directory for data local files");
212402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	boolean refresh = false;
213402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.dataDir != null) {
214402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.preferences.put(IPerformancesConstants.PRE_LOCAL_DATA_DIR, this.dataDir.getAbsolutePath());
215402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		if (dir != null && dir.getPath().equals(this.dataDir.getPath())) {
216402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			refresh = MessageDialog.openQuestion(this.shell, getTitleToolTip(), "Do you want to read local file again?");
217402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		} else {
218402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			refresh = true;
219402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
220402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		if (refresh) {
221402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			// Confirm the read when there's a last build set
222402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (LAST_BUILD != null) {
223402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				if (!MessageDialog.openConfirm(PerformancesView.this.shell, getTitleToolTip(), "Only builds before "+LAST_BUILD+" will be taken into account!\nDo you want to continue?")) {
224402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll					return null;
225402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				}
226402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
227402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
228402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			// Read local files
229402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			readLocalFiles();
230402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
231402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			// Refresh views
232402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			refreshInput();
233402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			PerformancesView resultsView = getSiblingView();
234402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			resultsView.refreshInput();
235402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			return resultsView.dataDir = this.dataDir;
236402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
237402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
238402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	return null;
239402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
240402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
241402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
242402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Select a directory.
243402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
244402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael MollFile changeDir(String filter, String msg) {
245402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    DirectoryDialog dialog = new DirectoryDialog(getSite().getShell(), SWT.OPEN);
246402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    dialog.setText(getTitleToolTip());
247402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    dialog.setMessage(msg);
248402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (filter != null) {
249402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    	dialog.setFilterPath(filter);
250402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
251402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    String path = dialog.open();
252402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (path != null) {
253402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	    File dir = new File(path);
254402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	    if (dir.exists() && dir.isDirectory()) {
255402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    		return dir;
256402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	    }
257402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
258402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return null;
259402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
260402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
261402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
262402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Contribute actions to bars.
263402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
264402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid contributeToActionBars() {
265402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IActionBars bars = getViewSite().getActionBars();
266402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	fillLocalPullDown(bars.getMenuManager());
267402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	fillLocalToolBar(bars.getToolBarManager());
268402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
269402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
270402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
271402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc)
272402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
273402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
274402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void createPartControl(Composite parent) {
275402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Cache the shell and display.
276402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.shell = parent.getShell ();
277402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.display = this.shell.getDisplay ();
278402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
279402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
280402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
281402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the context menu.
282402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
283402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillContextMenu(IMenuManager manager) {
284402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// no default contextual action
285402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
286402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
287402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
288402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the filters drop-down menu.
289402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
290402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillFiltersDropDown(IMenuManager manager) {
291402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	manager.add(this.filterBaselineBuilds);
292402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	manager.add(this.filterNightlyBuilds);
293402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
294402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
295402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
296402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the local data drop-down menu
297402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
298402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillLocalDataDropDown(IMenuManager manager) {
299402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	manager.add(this.changeDataDir);
300402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
301402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
302402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
303402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the local pull down menu.
304402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
305402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillLocalPullDown(IMenuManager manager) {
306402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
307402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filters menu
308402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	MenuManager filtersManager= new MenuManager("Filters");
309402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	fillFiltersDropDown(filtersManager);
310402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	manager.add(filtersManager);
311402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
312402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Local data menu
313402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	MenuManager localDataManager= new MenuManager("Local data");
314402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	fillLocalDataDropDown(localDataManager);
315402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	manager.add(localDataManager);
316402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
317402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
318402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
319402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Fill the local toolbar.
320402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
321402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid fillLocalToolBar(IToolBarManager manager) {
322402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// no default toolbar action
323402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
324402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
325402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
326402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Filter non fingerprints scenarios action run.
327402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
328402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid filterLastBuilds(boolean filter, boolean updatePreference) {
329402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (filter) {
330402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_LAST_BUILDS);
331402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} else {
332402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.remove(FILTER_LAST_BUILDS);
333402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
334402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_LAST_BUILDS, filter);
335402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	updateFilters();
336402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
337402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
338402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
339402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Filter non milestone builds action run.
340402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
341402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid filterNightlyBuilds(boolean filter, boolean updatePreference) {
342402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (filter) {
343402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_NIGHTLY_BUILDS);
344402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} else {
345402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.remove(FILTER_NIGHTLY_BUILDS);
346402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
347402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, filter);
348402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	updateFilters();
349402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
350402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
351402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
352402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Filter non milestone builds action run.
353402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
354402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid filterOldBuilds(boolean filter, boolean updatePreference) {
355402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (filter) {
356402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_OLD_BUILDS);
357402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} else {
358402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.remove(FILTER_OLD_BUILDS);
359402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
360402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences.putBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, filter);
361402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	updateFilters();
362402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
363402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
364402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
365402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Finalize the viewer creation
366402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
367402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid finalizeViewerCreation() {
368402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	makeActions();
369402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	hookContextMenu();
370402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	contributeToActionBars();
371402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	restoreState();
372402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	updateFilters();
373402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.setInput(getViewSite());
374402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.addSelectionChangedListener(this);
375402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
376402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
377402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* (non-Javadoc)
378402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Method declared on IAdaptable
379402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
380402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic Object getAdapter(Class adapter) {
381402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    if (adapter.equals(IPropertySheetPage.class)) {
382402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        return getPropertySheet();
383402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    }
384402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return super.getAdapter(adapter);
385402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
386402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
387402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
388402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Returns the property sheet.
389402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
390402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollprotected IPropertySheetPage getPropertySheet() {
391402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.propertyPage == null) {
392402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.propertyPage = new PropertySheetPage();
393402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
394402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll    return this.propertyPage;
395402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
396402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
397402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
398402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Get the sibling view (see subclasses).
399402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
400402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollabstract PerformancesView getSiblingView();
401402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
402402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
403402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Hook the context menu.
404402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
405402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid hookContextMenu() {
406402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	MenuManager menuMgr = new MenuManager("#PopupMenu");
407402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	menuMgr.setRemoveAllWhenShown(true);
408402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	menuMgr.addMenuListener(new IMenuListener() {
409402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void menuAboutToShow(IMenuManager manager) {
410402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			fillContextMenu(manager);
411402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
412402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	});
413402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	Menu menu = menuMgr.createContextMenu(this.viewer.getControl());
414402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.getControl().setMenu(menu);
415402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	getSite().registerContextMenu(menuMgr, this.viewer);
416402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
417402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
418402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
419402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc)
420402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.ui.part.ViewPart#init(org.eclipse.ui.IViewSite, org.eclipse.ui.IMemento)
421402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
422402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void init(IViewSite site, IMemento memento) throws PartInitException {
423402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	super.init(site, memento);
424402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewState = memento;
425402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
426402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
427402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
428402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Init results
429402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
430402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid initResults() {
431402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.results = PerformanceResultsElement.PERF_RESULTS_MODEL;
432402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.results.isInitialized()) {
433402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.dataDir = getSiblingView().dataDir;
434402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} else {
435402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		String localDataDir = this.preferences.get(IPerformancesConstants.PRE_LOCAL_DATA_DIR, null);
436402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		if (localDataDir != null) {
437402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			File dir = new File(localDataDir);
438402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (dir.exists() && dir.isDirectory()) {
439402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				this.dataDir = dir;
440402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				readLocalFiles();
441402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
442402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
443402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
444402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
445402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
446402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
447402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Make common actions to performance views.
448402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
449402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid makeActions() {
450402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
451402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Change data dir action
452402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.changeDataDir = new Action("&Read...") {
453402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run() {
454402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			changeDataDir();
455402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
456402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
457402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.changeDataDir.setToolTipText("Change the directory of the local data files");
458402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//	this.changeDataDir.setImageDescriptor(ResultsElement.FOLDER_IMAGE_DESCRIPTOR);
459402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
460402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter baselines action
461402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterBaselineBuilds = new Action("&Baselines", IAction.AS_CHECK_BOX) {
462402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run() {
463402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			if (isChecked()) {
464402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				PerformancesView.this.viewFilters.add(FILTER_BASELINE_BUILDS);
465402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			} else {
466402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				PerformancesView.this.viewFilters.remove(FILTER_BASELINE_BUILDS);
467402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
468402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			updateFilters();
469402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll        }
470402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
471402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterBaselineBuilds.setToolTipText("Filter baseline builds");
472402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
473402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter baselines action
474402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterNightlyBuilds = new Action("&Nightly", IAction.AS_CHECK_BOX) {
475402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run() {
476402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			filterNightlyBuilds(isChecked(), true/*update preference*/);
477402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
478402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
479402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterNightlyBuilds.setToolTipText("Filter nightly builds");
480402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
481402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter non-important builds action
482402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterOldBuilds = new Action("&Old Builds", IAction.AS_CHECK_BOX) {
483402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run() {
484402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			filterOldBuilds(isChecked(), true/*update preference*/);
485402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
486402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
487402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterOldBuilds.setChecked(false);
488402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterOldBuilds.setToolTipText("Filter old builds (i.e. before last milestone) but keep all previous milestones)");
489402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
490402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter non-important builds action
491402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterLastBuilds = new Action("&Last Builds", IAction.AS_CHECK_BOX) {
492402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run() {
493402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			filterLastBuilds(isChecked(), true/*update preference*/);
494402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
495402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
496402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	final String lastBuild = this.preferences.get(IPerformancesConstants.PRE_LAST_BUILD, null);
497402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterLastBuilds.setChecked(false);
498402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (lastBuild == null) {
499402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.filterLastBuilds.setEnabled(false);
500402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} else {
501402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.filterLastBuilds.setToolTipText("Filter last builds (i.e. after "+lastBuild+" build)");
502402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
503402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
504402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
505402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/* (non-Javadoc)
506402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.core.runtime.preferences.IEclipsePreferences.IPreferenceChangeListener#preferenceChange(org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent)
507402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
508402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void preferenceChange(PreferenceChangeEvent event) {
509402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String propertyName = event.getKey();
510402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//	String newValue = (String) event.getNewValue();
511402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
512402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Eclipse version change
513402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (propertyName.equals(IPerformancesConstants.PRE_ECLIPSE_VERSION)) {
514402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		int eclipseVersion = newValue == null ? IPerformancesConstants.DEFAULT_ECLIPSE_VERSION : Integer.parseInt(newValue);
515402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
516402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
517402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
518402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		setTitleToolTip();
519402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
520402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
521402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Database location change
522402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (propertyName.equals(IPerformancesConstants.PRE_DATABASE_LOCATION)) {
523402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		boolean connected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
524402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
525402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		DB_Results.updateDbConstants(connected, eclipseVersion, newValue);
526402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		setTitleToolTip();
527402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
528402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
529402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Database connection
530402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (propertyName.equals(IPerformancesConstants.PRE_DATABASE_CONNECTION)) {
531402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		boolean connected = newValue == null ? IPerformancesConstants.DEFAULT_DATABASE_CONNECTION : newValue.equals(Boolean.TRUE);
532402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		int eclipseVersion = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
533402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		String databaseLocation = this.preferences.get(IPerformancesConstants.PRE_DATABASE_LOCATION, IPerformancesConstants.NETWORK_DATABASE_LOCATION);
534402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		DB_Results.updateDbConstants(connected, eclipseVersion, databaseLocation);
535402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		setTitleToolTip();
536402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
537402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
538402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Last build
539402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (propertyName.equals(IPerformancesConstants.PRE_LAST_BUILD)) {
540402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		if (newValue == null || newValue.length() == 0) {
541402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//			this.filterLastBuilds.setEnabled(false);
542402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//			LAST_BUILD = null;
543402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		} else {
544402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//			this.filterLastBuilds.setEnabled(true);
545402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//			this.filterLastBuilds.setToolTipText("Filter last builds (i.e. after "+newValue+" build)");
546402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//			LAST_BUILD = newValue;
547402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll//		}
548402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
549402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
550402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
551402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
552402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Read local files
553402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
554402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid readLocalFiles() {
555402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
556402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Create runnable to read local files
557402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	IRunnableWithProgress runnable = new IRunnableWithProgress() {
558402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
559402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			try {
560402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				monitor.beginTask("Read local files", 1000);
561402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				PerformancesView.this.results.readLocal(PerformancesView.this.dataDir, monitor, LAST_BUILD);
562402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				monitor.done();
563402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			} catch (Exception e) {
564402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll				e.printStackTrace();
565402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			}
566402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
567402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	};
568402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
569402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Execute the runnable with progress
570402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	ProgressMonitorDialog readProgress = new ProgressMonitorDialog(getSite().getShell());
571402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	try {
572402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		readProgress.run(true, true, runnable);
573402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} catch (InvocationTargetException e) {
574402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		// skip
575402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} catch (InterruptedException e) {
576402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		// skip
577402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
578402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
579402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
580402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
581402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Refresh the entire view by resetting its input.
582402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
583402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid refreshInput() {
584402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.setInput(getViewSite());
585402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.refresh();
586402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
587402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
588402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
589402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Clear view content.
590402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
591402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid resetInput() {
592402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.results.reset(null);
593402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.setInput(getViewSite());
594402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.refresh();
595402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
596402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
597402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
598402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Restore the view state from the memento information.
599402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
600402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid restoreState() {
601402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
602402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter baselines action state
603402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.viewState != null) {
604402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		Boolean filterBaselinesState = this.viewState.getBoolean(IPerformancesConstants.PRE_FILTER_BASELINE_BUILDS);
605402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		boolean filterBaselinesValue = filterBaselinesState == null ? false : filterBaselinesState.booleanValue();
606402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.filterBaselineBuilds.setChecked(filterBaselinesValue);
607402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		if (filterBaselinesValue) {
608402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll			this.viewFilters.add(FILTER_BASELINE_BUILDS);
609402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		}
610402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
611402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
612402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter nightly builds action
613402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	boolean checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_NIGHTLY_BUILDS, IPerformancesConstants.DEFAULT_FILTER_NIGHTLY_BUILDS);
614402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterNightlyBuilds.setChecked(checked);
615402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (checked) {
616402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_NIGHTLY_BUILDS);
617402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
618402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
619402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter non important builds action state
620402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_OLD_BUILDS, IPerformancesConstants.DEFAULT_FILTER_OLD_BUILDS);
621402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterOldBuilds.setChecked(checked);
622402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (checked) {
623402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_OLD_BUILDS);
624402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
625402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
626402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Filter last builds action state
627402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	checked = this.preferences.getBoolean(IPerformancesConstants.PRE_FILTER_LAST_BUILDS, IPerformancesConstants.DEFAULT_FILTER_LAST_BUILDS);
628402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.filterLastBuilds.setChecked(checked);
629402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (checked) {
630402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.viewFilters.add(FILTER_LAST_BUILDS);
631402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
632402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
633402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
634402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void saveState(IMemento memento) {
635402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	super.saveState(memento);
636402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	memento.putBoolean(IPerformancesConstants.PRE_FILTER_BASELINE_BUILDS, this.filterBaselineBuilds.isChecked());
637402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	try {
638402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.preferences.flush();
639402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	} catch (BackingStoreException e) {
640402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		// ignore
641402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
642402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
643402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
644402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
645402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * (non-Javadoc)
646402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * @see org.eclipse.jface.viewers.ISelectionChangedListener#selectionChanged(org.eclipse.jface.viewers.SelectionChangedEvent)
647402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
648402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void selectionChanged(SelectionChangedEvent event) {
649402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.propertyPage != null) {
650402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		this.propertyPage.selectionChanged(this, event.getSelection());
651402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
652402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
653402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
654402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/**
655402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Passing the focus request to the viewer's control.
656402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
657402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollpublic void setFocus() {
658402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.getControl().setFocus();
659402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
660402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
661402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
662402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Set the view tooltip to reflect the DB connection kind.
663402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
664402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid setTitleToolTip() {
665402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	String title = DB_Results.getDbTitle();
666402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (title == null) {
667402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		// DB is not connected
668402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		int version = this.preferences.getInt(IPerformancesConstants.PRE_ECLIPSE_VERSION, IPerformancesConstants.DEFAULT_ECLIPSE_VERSION);
669402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		title = "Eclipse v" + version + " - DB not connected";
670402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
671402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	setTitleToolTip(title);
672402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
673402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
674402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
675402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Set/unset the database connection.
676402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll *
677402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollvoid toogleDbConnection() {
678402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
679402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Toogle DB connection and store new state
680402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	boolean dbConnected = this.preferences.getBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, IPerformancesConstants.DEFAULT_DATABASE_CONNECTION);
681402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	DB_Results.DB_CONNECTION = !dbConnected;
682402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	getSiblingView().dbConnection.setChecked(DB_Results.DB_CONNECTION);
683402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.preferences.putBoolean(IPerformancesConstants.PRE_DATABASE_CONNECTION, DB_Results.DB_CONNECTION);
684402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
685402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// First close DB connection
686402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (!DB_Results.DB_CONNECTION) {
687402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		DB_Results.shutdown();
688402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
689402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
690402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Read local files if any
691402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	if (this.dataDir != null) {
692402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll		readLocalFiles();
693402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	}
694402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
695402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	// Refresh views
696402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	refreshInput();
697402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	getSiblingView().refreshInput();
698402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
699402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll*/
700402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
701402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll/*
702402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll * Update the filters from the stored list and apply them to the view.
703402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll */
704402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Mollfinal void updateFilters() {
705402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	ViewerFilter[] filters = new ViewerFilter[this.viewFilters.size()];
706402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewFilters.toArray(filters);
707402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll	this.viewer.setFilters(filters);
708402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}
709402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll
710402794e73aed8611d62eb4b01cd155e2d76fcb87Raphael Moll}