/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.gui.workflow.view.console;
import java.text.SimpleDateFormat;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ITableLabelProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.swt.graphics.Image;
import de.rcenvironment.core.component.execution.api.ConsoleRow;
import de.rcenvironment.core.component.execution.api.ConsoleRow.Type;
import de.rcenvironment.core.gui.resources.api.ImageManager;
import de.rcenvironment.core.gui.resources.api.StandardImages;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Provides the concrete label texts to display and images if required.
*
* @author Enrico Tappert
* @author Doreen Seider
* @author Sascha Zur
*/
public class ConsoleLabelProvider extends LabelProvider implements ITableLabelProvider {
private static final int MAXIMUM_LENGTH_OF_DISPLAYED_CONSOLEROW = 180;
private Image errImage = ImageManager.getInstance().getSharedImage(StandardImages.ERROR_16);
private Image warningImage = ImageManager.getInstance().getSharedImage(StandardImages.WARNING_16);
private Image infoImage = ImageManager.getInstance().getSharedImage(StandardImages.INFORMATION_16);
private Image outImage = ImageDescriptor.createFromURL(
ConsoleView.class.getResource("/resources/icons/stdout16.gif")).createImage();
private SimpleDateFormat timestampDateFormat;
/**
* Default constructor.
*/
public ConsoleLabelProvider() {
timestampDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss,SSS");
}
@Override
public Image getColumnImage(Object element, int columnIndex) {
Image result = null;
if (element instanceof ConsoleRow) {
ConsoleRow consoleRow = (ConsoleRow) element;
if (0 == columnIndex) {
// level column
if (ConsoleRow.Type.WORKFLOW_ERROR == consoleRow.getType()
|| ConsoleRow.Type.COMPONENT_ERROR == consoleRow.getType()
|| ConsoleRow.Type.TOOL_ERROR == consoleRow.getType()) {
result = errImage;
} else if (ConsoleRow.Type.COMPONENT_WARN == consoleRow.getType()) {
result = warningImage;
} else if (ConsoleRow.Type.TOOL_OUT == consoleRow.getType()
|| ConsoleRow.Type.COMPONENT_INFO == consoleRow.getType()
|| ConsoleRow.Type.LIFE_CYCLE_EVENT == consoleRow.getType()) {
result = outImage;
} else if (ConsoleRow.Type.LIFE_CYCLE_EVENT == consoleRow.getType()) {
result = infoImage;
}
}
}
return result;
}
@Override
public String getColumnText(Object element, int columnIndex) {
String returnValue = ""; //$NON-NLS-1$
if (element instanceof ConsoleRow) {
ConsoleRow row = (ConsoleRow) element;
switch (columnIndex) {
case 0:
if (row.getType() == Type.TOOL_OUT || row.getType() == Type.TOOL_ERROR) {
returnValue = "Tool";
} else if (row.getType() == Type.WORKFLOW_ERROR) {
returnValue = "Workflow";
} else {
returnValue = "Component";
}
break;
// date and time
case 1:
returnValue = timestampDateFormat.format(row.getTimestamp());
break;
// text
case 2:
if (row.getType() == ConsoleRow.Type.LIFE_CYCLE_EVENT
&& ConsoleRow.WorkflowLifecyleEventType
.valueOf(row.getPayload()) == ConsoleRow.WorkflowLifecyleEventType.COMPONENT_TERMINATED) {
returnValue = StringUtils.format("------ End of component '%s' ------", row.getComponentName());
} else {
returnValue = row.getPayload();
}
if (returnValue.length() > MAXIMUM_LENGTH_OF_DISPLAYED_CONSOLEROW) {
returnValue = returnValue.substring(0, MAXIMUM_LENGTH_OF_DISPLAYED_CONSOLEROW);
returnValue += " ... (line is cut, it is too long; copy and paste it to get it at full length)";
}
break;
// component
case 3:
returnValue = row.getComponentName();
break;
// workflow
case 4:
returnValue = String.valueOf(row.getWorkflowName());
break;
default:
// shouldn't happen
break;
}
}
return returnValue;
}
@Override
public void dispose() {
outImage.dispose();
}
}