blob: c1bdc8cd39cc65a06ce94f7176d4b2b807801ba0 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2000, 2009 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.test.internal.performance.data;
import org.eclipse.test.internal.performance.InternalDimensions;
import org.eclipse.test.internal.performance.PerformanceTestPlugin;
import org.eclipse.test.performance.Dimension;
/**
* @since 3.1
*/
public class Dim implements Dimension {
private static final long serialVersionUID = 1L;
private static Dim[] fgRegisteredDimensions = new Dim[100];
private final int fId;
private final Unit fUnit;
private final int fMultiplier;
private String shortName;
public static Dim getDimension(int id) {
InternalDimensions.COMITTED.getId(); // trigger loading class InternalDimensions
if (id >= 0 && id < fgRegisteredDimensions.length)
return fgRegisteredDimensions[id];
return null;
}
public Dim(int id) {
this(id, Unit.CARDINAL, 1);
}
public Dim(int id, Unit unit) {
this(id, unit, 1);
}
public Dim(int id, Unit unit, int multiplier) {
if (id >= 0 && id < fgRegisteredDimensions.length) {
if (fgRegisteredDimensions[id] == null) {
fgRegisteredDimensions[id] = this;
} else
PerformanceTestPlugin.logError("dimension with id '" + id + "' already registered"); //$NON-NLS-1$ //$NON-NLS-2$
}
this.fId = id;
this.fUnit = unit;
this.fMultiplier = multiplier;
}
public int getId() {
return this.fId;
}
public Unit getUnit() {
return this.fUnit;
}
public int getMultiplier() {
return this.fMultiplier;
}
public String getName() {
return DimensionMessages.getString(this.fId);
}
/**
* Returns the label for the current dimension. This label is done keeping only uppercase characters from the name. It's
* typically used for anchor references based on dimension.
*
* @return The short name of the dimension
*/
public String getLabel() {
if (this.shortName == null) {
String name = getName();
StringBuilder buffer = new StringBuilder();
int length = name.length();
for (int i = 0; i < length; i++) {
if (Character.isUpperCase(name.charAt(i))) {
buffer.append(name.charAt(i));
}
}
this.shortName = buffer.toString();
}
return this.shortName;
}
public String getDescription() {
return DimensionMessages.getString(this.fId);
}
@Override
public String toString() {
return "Dimension [name=" + getName() + ", " + this.fUnit + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
}
public String getDisplayValue(Scalar scalar) {
return this.fUnit.getDisplayValue1(scalar.getMagnitude(), this.fMultiplier);
}
public String getDisplayValue(double scalar) {
return this.fUnit.getDisplayValue1(scalar / this.fMultiplier);
}
}