1 /******************************************************************************* 2 * Copyright (c) 2000, 2009 IBM Corporation and others. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * IBM Corporation - initial API and implementation 10 *******************************************************************************/ 11 package org.eclipse.test.internal.performance.results.model; 12 13 import java.util.ArrayList; 14 import java.util.Arrays; 15 import java.util.Iterator; 16 import java.util.List; 17 import java.util.Vector; 18 19 import org.eclipse.core.runtime.preferences.IEclipsePreferences; 20 import org.eclipse.core.runtime.preferences.InstanceScope; 21 import org.eclipse.test.internal.performance.results.db.AbstractResults; 22 import org.eclipse.test.internal.performance.results.db.ComponentResults; 23 import org.eclipse.test.internal.performance.results.db.PerformanceResults; 24 import org.eclipse.test.internal.performance.results.db.ScenarioResults; 25 import org.eclipse.test.internal.performance.results.utils.IPerformancesConstants; 26 import org.eclipse.test.internal.performance.results.utils.Util; 27 import org.eclipse.ui.views.properties.IPropertyDescriptor; 28 import org.eclipse.ui.views.properties.PropertyDescriptor; 29 import org.eclipse.ui.views.properties.TextPropertyDescriptor; 30 31 public class ComponentResultsElement extends ResultsElement { 32 33 // Property descriptors 34 static final String P_ID_NAME = "ComponentResultsElement.name"; //$NON-NLS-1$ 35 static final String P_ID_CURRENT_BUILD = "ComponentResultsElement.currentbuild"; //$NON-NLS-1$ 36 static final String P_ID_BASELINE_BUILD = "ComponentResultsElement.baselinebuild"; //$NON-NLS-1$ 37 38 static final String P_STR_NAME = "name"; //$NON-NLS-1$ 39 static final String P_STR_CURRENT_BUILD = "current build"; //$NON-NLS-1$ 40 static final String P_STR_BASELINE_BUILD = "baseline build"; //$NON-NLS-1$ 41 42 private static final TextPropertyDescriptor NAME_DESCRIPTOR = new TextPropertyDescriptor(P_ID_NAME, P_STR_NAME); 43 private static final PropertyDescriptor CURRENT_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_CURRENT_BUILD, P_STR_CURRENT_BUILD); 44 private static final PropertyDescriptor BASELINE_BUILD_DESCRIPTOR = new PropertyDescriptor(P_ID_BASELINE_BUILD, P_STR_BASELINE_BUILD); 45 46 private static Vector DESCRIPTORS; 47 static Vector initDescriptors(int status) { 48 DESCRIPTORS = new Vector(); 49 // Status category 50 DESCRIPTORS.add(getInfosDescriptor(status)); 51 DESCRIPTORS.add(getWarningsDescriptor(status)); 52 DESCRIPTORS.add(ERROR_DESCRIPTOR); 53 ERROR_DESCRIPTOR.setCategory("Status"); 54 // Results category 55 DESCRIPTORS.addElement(NAME_DESCRIPTOR); 56 NAME_DESCRIPTOR.setCategory("Results"); 57 DESCRIPTORS.addElement(CURRENT_BUILD_DESCRIPTOR); 58 CURRENT_BUILD_DESCRIPTOR.setCategory("Results"); 59 DESCRIPTORS.addElement(BASELINE_BUILD_DESCRIPTOR); 60 BASELINE_BUILD_DESCRIPTOR.setCategory("Results"); 61 // Survey category 62 DESCRIPTORS.add(COMMENT_DESCRIPTOR); 63 COMMENT_DESCRIPTOR.setCategory("Survey"); 64 return DESCRIPTORS; 65 } 66 static Vector getDescriptors() { 67 return DESCRIPTORS; 68 } 69 70 public ComponentResultsElement(String name, ResultsElement parent) { 71 super(name, parent); 72 } 73 74 public ComponentResultsElement(AbstractResults results, ResultsElement parent) { 75 super(results, parent); 76 } 77 78 /* 79 * Do not create non-fingerprint child when only fingerprint is specified. 80 * 81 * @see org.eclipse.test.internal.performance.results.model.ResultsElement#createChild(org.eclipse.test.internal.performance.results.db.AbstractResults) 82 */ 83 ResultsElement createChild(AbstractResults testResults) { 84 // if (onlyFingerprints()) { 85 // ScenarioResults scenarioResults = (ScenarioResults) testResults; 86 // if (!scenarioResults.hasSummary()) { 87 // return null; 88 // } 89 // } 90 return new ScenarioResultsElement(testResults, this); 91 } 92 93 /** 94 * Get all results numbers for a given machine of the current component. 95 * 96 * @param configName The name of the configuration to get numbers 97 * @param fingerprints Set whether only fingerprints scenario should be taken into account 98 * @return A list of lines. Each line represent a build and is a list of either strings or values. 99 */ 100 public List getConfigNumbers(String configName, boolean fingerprints) { 101 if (this.results == null) return null; 102 return ((ComponentResults)this.results).getConfigNumbers(configName, fingerprints, new ArrayList()); 103 } 104 105 /* (non-Javadoc) 106 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyDescriptors() 107 */ 108 public IPropertyDescriptor[] getPropertyDescriptors() { 109 Vector descriptors = getDescriptors(); 110 if (descriptors == null) { 111 descriptors = initDescriptors(getStatus()); 112 } 113 int size = descriptors.size(); 114 IPropertyDescriptor[] descriptorsArray = new IPropertyDescriptor[size]; 115 descriptorsArray[0] = getInfosDescriptor(getStatus()); 116 descriptorsArray[1] = getWarningsDescriptor(getStatus()); 117 for (int i=2; i<size; i++) { 118 descriptorsArray[i] = (IPropertyDescriptor) descriptors.get(i); 119 } 120 return descriptorsArray; 121 } 122 123 /* (non-Javadoc) 124 * @see org.eclipse.ui.views.properties.IPropertySource#getPropertyValue(java.lang.Object) 125 */ 126 public Object getPropertyValue(Object propKey) { 127 if (propKey.equals(P_ID_NAME)) { 128 return getName(); 129 } 130 if (propKey.equals(P_ID_CURRENT_BUILD)) { 131 if (this.results == null) { 132 PerformanceResultsElement performanceResultsElement = (PerformanceResultsElement) getParent(null); 133 return performanceResultsElement.getName(); 134 } 135 PerformanceResults performanceResults = (PerformanceResults) this.results.getParent(); 136 return performanceResults.getName(); 137 } 138 if (propKey.equals(P_ID_BASELINE_BUILD)) { 139 if (this.results == null) { 140 return "?"; 141 } 142 PerformanceResults performanceResults = (PerformanceResults) this.results.getParent(); 143 return performanceResults.getBaselineName(); 144 } 145 return super.getPropertyValue(propKey); 146 } 147 148 /** 149 * Get the list of the scenarios results from the model. Put only fingerprint ones if specified. 150 * 151 * @param fingerprint Tell whether only fingerprint scenarios are expected or not. 152 * @return A list of {@link ScenarioResults}. 153 */ 154 public List getScenarios(boolean fingerprint) { 155 if (!fingerprint) { 156 return Arrays.asList(this.results.getChildren()); 157 } 158 List scenarios = new ArrayList(); 159 if (this.results != null) { 160 Iterator iterator = this.results.getResults(); 161 while (iterator.hasNext()) { 162 ScenarioResults scenarioResults = (ScenarioResults) iterator.next(); 163 if (scenarioResults.hasSummary()) { 164 scenarios.add(scenarioResults); 165 } 166 } 167 } 168 return scenarios; 169 } 170 171 /** 172 * Get the list of the scenarios names. Put only fingerprint ones if specified. 173 * 174 * @param fingerprint Tell whether only fingerprint scenarios are expected or not. 175 * @return A list of {@link String}. 176 */ 177 public List getScenariosLabels(boolean fingerprint) { 178 List labels = new ArrayList(); 179 if (this.results != null) { 180 AbstractResults[] scenarios = this.results.getChildren(); 181 int length = scenarios.length; 182 for (int i=0; i<length; i++) { 183 ScenarioResults scenarioResults = (ScenarioResults) scenarios[i]; 184 if (!fingerprint || scenarioResults.hasSummary()) { 185 labels.add(scenarioResults.getLabel()); 186 } 187 } 188 } 189 return labels; 190 } 191 192 /* 193 * (non-Javadoc) 194 * @see org.eclipse.test.internal.performance.results.model.ResultsElement#initStatus() 195 */ 196 void initStatus() { 197 if (this.results == null) { 198 this.status = UNREAD; 199 } else { 200 super.initStatus(); 201 } 202 } 203 204 StringBuffer writableStatus(StringBuffer buffer, int kind, StringBuffer excluded) { 205 // Write status for scenarios having error 206 if ((getStatus() & ERROR_MASK) != 0) { 207 208 // Get children status 209 StringBuffer childrenBuffer = super.writableStatus(new StringBuffer(), kind, excluded); 210 211 // Write status on file if not excluded 212 if (childrenBuffer.length() > 0) { 213 buffer.append(getName()); 214 IEclipsePreferences preferences = new InstanceScope().getNode(IPerformancesConstants.PLUGIN_ID); 215 String comment = preferences.get(getId(), null); 216 if (comment != null) { 217 if ((kind & IPerformancesConstants.STATUS_VALUES) != 0) { 218 buffer.append(" "); 219 } else { 220 buffer.append(" "); 221 } 222 buffer.append(comment); 223 } 224 buffer.append(Util.LINE_SEPARATOR); 225 buffer.append(childrenBuffer); 226 buffer.append(Util.LINE_SEPARATOR); 227 } 228 } 229 return buffer; 230 } 231 232 } 233