| /******************************************************************************* |
| * Copyright (c) 2000, 2009 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| package org.eclipse.test.internal.performance.results.model; |
| |
| import java.io.File; |
| import java.util.Arrays; |
| import org.eclipse.core.runtime.IProgressMonitor; |
| import org.eclipse.test.internal.performance.results.db.*; |
| import org.eclipse.test.internal.performance.results.utils.Util; |
| |
| public class PerformanceResultsElement extends ResultsElement { |
| |
| // Singleton pattern |
| public static PerformanceResultsElement PERF_RESULTS_MODEL = new PerformanceResultsElement(); |
| |
| String[] buildNames; |
| boolean fingerprints = true; |
| |
| public PerformanceResultsElement() { |
| super(); |
| } |
| |
| ResultsElement createChild(AbstractResults testResults) { |
| return new ComponentResultsElement(testResults, this); |
| } |
| |
| public String[] getBaselines() { |
| getBuildNames(); |
| if (this.buildNames == null) { |
| return new String[0]; |
| } |
| int length = this.buildNames.length; |
| String[] baselines = new String[length]; |
| int count = 0; |
| for (int i=0; i<length; i++) { |
| if (this.buildNames[i].startsWith("R-")) { |
| baselines[count++] = this.buildNames[i]; |
| } |
| } |
| if (count < length) { |
| System.arraycopy(baselines, 0, baselines = new String [count], 0, count); |
| } |
| return baselines; |
| } |
| |
| String[] getBuildNames() { |
| if (this.buildNames == null) { |
| this.buildNames = DB_Results.DB_CONNECTION |
| ? DB_Results.getBuilds() |
| : this.results == null |
| ? new String[0] |
| : getPerformanceResults().getAllBuildNames(); |
| } |
| return this.buildNames; |
| } |
| |
| public Object[] getBuilds() { |
| getBuildNames(); |
| int length = this.buildNames == null ? 0 : this.buildNames.length; |
| BuildResultsElement[] elements = new BuildResultsElement[length]; |
| for (int i=0; i<length; i++) { |
| elements[i] = new BuildResultsElement(this.buildNames[i], this); |
| } |
| return elements; |
| } |
| |
| public String[] getComponents() { |
| if (!isInitialized()) { |
| String[] components = DB_Results.getComponents(); |
| int length = components.length; |
| if (length == 0) { |
| DB_Results.queryAllScenarios(); |
| components = DB_Results.getComponents(); |
| } |
| return components; |
| } |
| return getPerformanceResults().getComponents(); |
| } |
| |
| /** |
| * Returns the names of the configurations. |
| * |
| * @return An array of String |
| */ |
| public String[] getConfigs() { |
| if (!isInitialized()) { |
| String[] configs = DB_Results.getConfigs(); |
| int length = configs.length; |
| if (length == 0) { |
| DB_Results.queryAllScenarios(); |
| configs = DB_Results.getConfigs(); |
| } |
| return configs; |
| } |
| return getPerformanceResults().getConfigNames(false); |
| } |
| |
| /** |
| * Returns the descriptions of the configurations. |
| * |
| * @return An array of String |
| */ |
| public String[] getConfigDescriptions() { |
| if (!isInitialized()) { |
| String[] descriptions = DB_Results.getConfigDescriptions(); |
| int length = descriptions.length; |
| if (length == 0) { |
| DB_Results.queryAllScenarios(); |
| descriptions = DB_Results.getConfigDescriptions(); |
| } |
| return descriptions; |
| } |
| return getPerformanceResults().getConfigBoxes(false); |
| } |
| |
| public Object[] getElements() { |
| if (!isInitialized()) { |
| String[] components = getComponents(); |
| int length = components.length; |
| ComponentResultsElement[] elements = new ComponentResultsElement[length]; |
| for (int i=0; i<length; i++) { |
| elements[i] = new ComponentResultsElement(components[i], this); |
| } |
| return elements; |
| } |
| return getChildren(null); |
| } |
| |
| public PerformanceResults getPerformanceResults() { |
| return (PerformanceResults) this.results; |
| } |
| |
| boolean hasRead(BuildResultsElement buildResultsElement) { |
| String[] builds = this.results == null ? getBuildNames() : getPerformanceResults().getAllBuildNames(); |
| if (Arrays.binarySearch(builds, buildResultsElement.getName(), Util.BUILD_DATE_COMPARATOR) < 0) { |
| return false; |
| } |
| return true; |
| } |
| |
| public boolean isInitialized() { |
| return super.isInitialized() && this.results.size() > 0; |
| } |
| |
| public void readLocal(File dataDir, IProgressMonitor monitor) { |
| reset(null); |
| getPerformanceResults().readLocal(dataDir, monitor); |
| } |
| |
| public void reset(String buildName) { |
| if (buildName == null) { |
| this.results = new PerformanceResults(System.out); |
| } else { |
| this.results = new PerformanceResults(buildName, null, null, System.out); |
| } |
| this.children = null; |
| this.buildNames = null; |
| } |
| |
| public void resetBuildNames() { |
| this.buildNames = null; |
| } |
| |
| public void updateBuild(String buildName, boolean force, File dataDir, IProgressMonitor monitor) { |
| if (this.results == null) { |
| reset(buildName); |
| } |
| getPerformanceResults().updateBuild(buildName, force, dataDir, monitor); |
| } |
| |
| public void updateBuilds(String[] builds, boolean force, File dataDir, IProgressMonitor monitor) { |
| if (this.results == null) { |
| reset(null); |
| } |
| getPerformanceResults().updateBuilds(builds, force, dataDir, monitor); |
| } |
| |
| /** |
| * Set whether only fingerprints should be taken into account or not. |
| * |
| * @param fingerprints |
| */ |
| public void setFingerprints(boolean fingerprints) { |
| this.fingerprints = fingerprints; |
| resetStatus(); |
| } |
| |
| } |