/* Copyright (C) 2009 Mobile Sorcery AB
This program is free software; you can redistribute it and/or modify it
under the terms of the Eclipse Public License v1.0.
This program is distributed in the hope that it will be useful, but WITHOUT
ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
FITNESS FOR A PARTICULAR PURPOSE. See the Eclipse Public License v1.0 for
more details.
You should have received a copy of the Eclipse Public License v1.0 along
with this program. It is also available at http://www.eclipse.org/legal/epl-v10.html
*/
package com.mobilesorcery.sdk.testing.internal.ui;
import java.text.MessageFormat;
import java.text.NumberFormat;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.graphics.Image;
import com.mobilesorcery.sdk.testing.ITest;
import com.mobilesorcery.sdk.testing.ITestSession;
import com.mobilesorcery.sdk.testing.TestPlugin;
import com.mobilesorcery.sdk.testing.TestResult;
public class TestSessionLabelProvider extends StyledCellLabelProvider {
private ITestSession session;
private NumberFormat timeFormat;
public TestSessionLabelProvider() {
timeFormat = NumberFormat.getNumberInstance();
timeFormat.setGroupingUsed(true);
timeFormat.setMinimumFractionDigits(3);
timeFormat.setMaximumFractionDigits(3);
timeFormat.setMinimumIntegerDigits(1);
}
public void setTestSession(ITestSession session) {
this.session = session;
}
public void update(ViewerCell cell) {
Object element = cell.getElement();
String mainText = getText(element);
StyledString text = new StyledString(mainText);
String elapsedTimeText = getElapsedTimeText(element);
if (elapsedTimeText != null) {
text = StyledCellLabelProvider.styleDecoratedString(MessageFormat.format("{0} {1}", text, elapsedTimeText), StyledString.COUNTER_STYLER, text);
}
cell.setText(text.getString());
cell.setStyleRanges(text.getStyleRanges());
Image image = getImage(element);
cell.setImage(image);
}
private String getElapsedTimeText(Object element) {
if (element instanceof ITest && session != null) {
ITest test = (ITest) element;
if (session.getTestResult().hasFinished(test)) {
int elapsedTimeInMs = session.getTestResult().getElapsedTime((ITest) element);
if (elapsedTimeInMs != TestResult.TIME_UNDEFINED) {
return MessageFormat.format("{0} s", timeFormat.format(((float) elapsedTimeInMs) / 1000));
}
}
}
return null;
}
private String getText(Object element) {
if (element instanceof ITest) {
String name = ((ITest) element).getName();
return name == null ? "?" : name;
}
return element.toString(); //$NON-NLS-1$
}
private Image getImage(Object element) {
String imageKey = null;
if (element instanceof Exception) {
imageKey = TestPlugin.TEST_SUITE_ERROR_IMAGE;
} else if (element instanceof ITest) {
ITest test = (ITest) element;
if (session != null) {
boolean hasFinished = session.getTestResult().hasFinished(test);
boolean passed = session.getTestResult().passed(test, true);
boolean isRunning = session.getTestResult().isRunning(test);
boolean isSuite = test.isSuite();
if (isSuite) {
if (isRunning) {
imageKey = TestPlugin.TEST_SUITE_RUNNING_IMAGE;
} else if (hasFinished) {
if (passed) {
imageKey = TestPlugin.TEST_SUITE_OK_IMAGE;
} else {
imageKey = TestPlugin.TEST_SUITE_ERROR_IMAGE;
}
} else {
imageKey = TestPlugin.TEST_SUITE_IMAGE;
}
} else {
if (isRunning) {
imageKey = TestPlugin.TEST_SUITE_RUNNING_IMAGE;
} else if (hasFinished) {
if (passed) {
imageKey = TestPlugin.TEST_OK_IMAGE;
} else {
imageKey = TestPlugin.TEST_ERROR_IMAGE;
}
} else {
imageKey = TestPlugin.TEST_IMAGE;
}
}
}
}
if (imageKey != null) {
return TestPlugin.getDefault().getImageRegistry().get(imageKey);
} else {
return null;
}
}
}