/* * Copyright (C) 2006-2016 DLR, Germany * * All rights reserved * * http://www.rcenvironment.de/ */ package de.rcenvironment.core.component.execution.api; import java.io.Serializable; import de.rcenvironment.core.utils.common.StringUtils; /** * Event type produced by components and workflows. * * @author Doreen Seider * @author Robert Mischke (tweaked notification setup) */ public interface ConsoleRow extends Comparable<ConsoleRow>, Serializable { /** Suffix used for publishing console notifications. */ String NOTIFICATION_ID_PREFIX_CONSOLE_EVENT = "rce.component.console:"; /** Type of the row. */ enum Type { /** Tool standard out. */ TOOL_OUT("TOOL OUT"), /** Tool standard error. */ TOOL_ERROR("TOOL ERROR"), /** Component log output on info level. */ COMPONENT_INFO("COMPONENT INFO"), /** Component log output on warn level. */ COMPONENT_WARN("COMPONENT WARN"), /** Component log output on error level. */ COMPONENT_ERROR("COMPONENT ERROR"), /** Workflow log output on error level. */ WORKFLOW_ERROR("WORKFLOW ERROR"), /** * Lifecycle events of workflows and components. Semantically, they are related to ComponentState and WorkflowState. it is required * to deal with lifecycle events here as well, to reliably recognize very first and very last console row. In general, they are * generated by the workflow engine. Note: Actually, this type is not a console row as it was intended as ConsoleRow as a class are * introduced. In the future, we'll improve this probably by introducing a super type. ConsoleRow will be a child of it next to at * least one other for lifecycle events. */ LIFE_CYCLE_EVENT("Life cycle event"); private String displayName; Type(String displayName) { this.displayName = displayName; } public String getDisplayName() { return displayName; } } /** Type of the workflow lifecylce event. */ enum WorkflowLifecyleEventType { /** * Sent if component is started. */ COMPONENT_STARTING, /** * Sent if component is finished. */ COMPONENT_TERMINATED, /** * Sent if component is paused. */ COMPONENT_PAUSED, /** * Sent if component is resumed. */ COMPONENT_RESUMED, /** * Sent if component has finished writing console log. */ COMPONENT_LOG_FINISHED, /** * Sent at tool start. */ TOOL_STARTING, /** * Sent at tool finish. */ TOOL_FINISHED, /** * Sent at workflow start. */ WORKFLOW_STARTING, /** * Sent at workflow finish. */ WORKFLOW_FINISHED, /** * Sent if all of the workflow's components have finished writing console log. */ WORKFLOW_LOG_FINISHED, /** * Sent when a new WorkflowState is entered; this enum's and the new state's string form are concatenated using * {@link StringUtils#escapeAndConcat(String...)}. */ NEW_STATE; } /** * @return timestamp the {@link ConsoleRow} was produced */ long getTimestamp(); /** * @return index of the {@link ConsoleRow}. Console rows can be tagged with a running index which allows sorting even if the timestamp * is equal */ long getIndex(); /** * @param index index of the {@link ConsoleRow}. Console rows can be tagged with a running index which allows sorting even if the * timestamp is equal */ void setIndex(long index); /** * @return execution identifier of the associated workflow */ String getWorkflowIdentifier(); /** * @return execution identifier of the associated component */ String getComponentIdentifier(); /** * @return instance name of the associated workflow */ String getWorkflowName(); /** * @return instance name of the associated component */ String getComponentName(); /** * @return type of the {@link ConsoleRow} */ Type getType(); /** * @return payload of the {@link ConsoleRow} */ String getPayload(); /** * @return component execution count */ int getComponentRun(); /** * @return sequence number (immutable) of the {@link ConsoleRow} */ long getSequenzNumber(); }