/*******************************************************************************
* Copyright (c) 2004, 2010 BREDEX GmbH.
* 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:
* BREDEX GmbH - initial API and implementation and/or initial documentation
*******************************************************************************/
package org.eclipse.jubula.client.ui.provider.labelprovider;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.jubula.client.core.model.IAbstractContainerPO;
import org.eclipse.jubula.client.core.model.ICapPO;
import org.eclipse.jubula.client.core.model.ICommentPO;
import org.eclipse.jubula.client.core.model.IConditionalStatementPO;
import org.eclipse.jubula.client.core.model.IDoWhilePO;
import org.eclipse.jubula.client.core.model.IEventExecTestCasePO;
import org.eclipse.jubula.client.core.model.IExecTestCasePO;
import org.eclipse.jubula.client.core.model.IIteratePO;
import org.eclipse.jubula.client.core.model.INodePO;
import org.eclipse.jubula.client.core.model.ITestCasePO;
import org.eclipse.jubula.client.core.model.ITestSuitePO;
import org.eclipse.jubula.client.core.model.IWhileDoPO;
import org.eclipse.jubula.client.core.model.TestResultNode;
import org.eclipse.jubula.client.ui.constants.IconConstants;
import org.eclipse.jubula.client.ui.i18n.Messages;
import org.eclipse.jubula.tools.internal.constants.StringConstants;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.Point;
/**
* @author BREDEX GmbH
* @created 18.10.2004
*/
public class TestResultTreeViewLabelProvider extends CellLabelProvider
implements ILabelProvider {
/** ImageCache */
private static Map<ImageDescriptor, Image> imageCache =
new HashMap<ImageDescriptor, Image>();
/**
*
*/
public TestResultTreeViewLabelProvider() {
super();
}
/**
* dispose images
*/
public void dispose() {
for (Iterator i = imageCache.values().iterator(); i.hasNext();) {
((Image)i.next()).dispose();
}
imageCache.clear();
}
/**
*
* @param element
* Object
* @return Image
*/
public Image getImage(Object element) {
TestResultNode resultTest = (TestResultNode) element;
INodePO node = resultTest.getNode();
Image image = null;
if (node instanceof ITestSuitePO) {
image = IconConstants.TS_IMAGE;
} else if (node instanceof ITestCasePO) {
image = IconConstants.TC_IMAGE;
if (node instanceof IEventExecTestCasePO) {
image = IconConstants.RESULT_EH_IMAGE;
}
} else if (node instanceof ICapPO) {
TestResultNode parent = resultTest.getParent();
if (parent.getNode() instanceof IEventExecTestCasePO) {
image = IconConstants.EH_CAP_IMAGE;
} else {
image = IconConstants.CAP_IMAGE;
}
} else if (node instanceof ICommentPO) {
image = IconConstants.COMMENT_IMAGE;
} else if (node instanceof IConditionalStatementPO) {
image = IconConstants.CONDITION;
} else if (node instanceof IAbstractContainerPO) {
image = IconConstants.CAP_IMAGE;
} else if (node instanceof IDoWhilePO) {
image = IconConstants.DO_WHILE;
} else if (node instanceof IWhileDoPO) {
image = IconConstants.WHILE_DO;
} else if (node instanceof IIteratePO) {
image = IconConstants.ITERATE;
}
return image;
}
/**
* @param element
* Object
* @return name String
*/
public String getText(Object element) {
if (element instanceof TestResultNode) {
TestResultNode resultTest = (TestResultNode)element;
String name = resultTest.getName();
if (name != null) {
return name;
}
INodePO node = resultTest.getNode();
if (node instanceof ITestSuitePO) {
return "ResultTestSuite"; //$NON-NLS-1$
}
if (node instanceof IExecTestCasePO) {
return "ResultTestCase"; //$NON-NLS-1$
}
if (node instanceof ICapPO) {
return "ResultCap"; //$NON-NLS-1$
}
}
throw unknownElement(element);
}
/**
*
* @param element
* Object
* @return RuntimeException Unknown type
*/
public RuntimeException unknownElement(Object element) {
return new RuntimeException(Messages.UnknownTypeOfElementInTreeOfType
+ element.getClass().getName());
}
/**
* {@inheritDoc}
*/
public String getToolTipText(Object element) {
if (element instanceof TestResultNode) {
TestResultNode resultNode = (TestResultNode) element;
INodePO node = ((TestResultNode) element).getNode();
if (node instanceof ICommentPO) {
ICommentPO comment = (ICommentPO)node;
return comment.getName();
}
}
return super.getToolTipText(element);
}
/** {@inheritDoc} */
public Point getToolTipShift(Object object) {
return new Point(5, 5);
}
/** {@inheritDoc} */
public int getToolTipDisplayDelayTime(Object object) {
return 50;
}
/** {@inheritDoc} */
public int getToolTipTimeDisplayed(Object object) {
if (object instanceof ICommentPO) {
String comment = ((ICommentPO) object).getName();
int linebreaks = comment.split(System.lineSeparator() + "+").length; //$NON-NLS-1$
int spaces = comment.split(StringConstants.SPACE + "+").length; //$NON-NLS-1$
// estimate 500ms to read per word
return (linebreaks + spaces) * 500;
}
return 5000;
}
/** {@inheritDoc} */
public void update(ViewerCell cell) {
Object element = cell.getElement();
cell.setText(getText(element));
Image image = getImage(element);
cell.setImage(image);
}
}