/*
* Copyright (C) 2006-2016 DLR, Germany
*
* All rights reserved
*
* http://www.rcenvironment.de/
*/
package de.rcenvironment.core.component.execution.impl;
import java.text.SimpleDateFormat;
import de.rcenvironment.core.component.execution.api.ConsoleRow;
import de.rcenvironment.core.utils.common.ComparatorUtils;
import de.rcenvironment.core.utils.common.StringUtils;
/**
* Implementation of {@link ConsoleRow}.
*
* @author Doreen Seider
*/
public class ConsoleRowImpl implements ConsoleRow {
private static final long serialVersionUID = 5725183929182175975L;
private String workflowIdentifier;
private String componentIdentifier;
private String workflowName;
private String componentName;
private Type type;
private String payload;
private long index;
private long timestamp;
private int componentRun;
private long sequenceNumber;
@Override
public long getTimestamp() {
return timestamp;
}
@Override
public long getIndex() {
return index;
}
@Override
public String getWorkflowIdentifier() {
return workflowIdentifier;
}
@Override
public String getComponentIdentifier() {
return componentIdentifier;
}
@Override
public String getWorkflowName() {
return workflowName;
}
@Override
public String getComponentName() {
return componentName;
}
@Override
public Type getType() {
return type;
}
@Override
public String getPayload() {
return payload;
}
@Override
public int getComponentRun() {
return componentRun;
}
@Override
public long getSequenzNumber() {
return sequenceNumber;
}
public void setWorkflowIdentifier(String workflowIdentifier) {
this.workflowIdentifier = workflowIdentifier;
}
public void setComponentIdentifier(String componentIdentifier) {
this.componentIdentifier = componentIdentifier;
}
public void setWorkflowName(String workflowName) {
this.workflowName = workflowName;
}
public void setComponentName(String componentName) {
this.componentName = componentName;
}
public void setType(Type type) {
this.type = type;
}
/**
* Sets the payload of the {@link ConsoleRow}.
*
* @param payload payload to set
*/
public void setPayload(String payload) {
// cleanup step 1: replace all sequences of "special" characters with single spaces
payload = payload.replaceAll("[\\n\\r\\f\\a\\e\\x00]+", " ");
// cleanup step 2: replace tabs with a fixed number of spaces (4 for now)
this.payload = payload.replaceAll("\\t", " ");
}
public void setTimestamp(long timestamp) {
this.timestamp = timestamp;
}
public void setSequenceNumber(long sequenceNumber) {
this.sequenceNumber = sequenceNumber;
}
public void setComponentRun(int componentRun) {
this.componentRun = componentRun;
}
@Override
public void setIndex(long index) {
this.index = index;
}
@Override
public int compareTo(ConsoleRow o) {
final int equal = 0;
int compareResult = ComparatorUtils.compareLong(timestamp, o.getTimestamp());
if (compareResult == equal) {
compareResult = ComparatorUtils.compareLong(index, o.getIndex());
if (compareResult == equal) {
compareResult = workflowIdentifier.compareTo(o.getWorkflowIdentifier());
if (compareResult == equal) {
compareResult = componentIdentifier.compareTo(o.getComponentIdentifier());
if (compareResult == equal) {
compareResult = payload.compareTo(o.getPayload());
}
}
}
}
return compareResult;
}
@Override
public String toString() {
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd - HH:mm:ss,SSS");
return StringUtils.format("%s: %s - %s (%s@%s)", df.format(timestamp), type.toString(), payload, componentName, workflowName);
}
@Override
public int hashCode() {
return toString().hashCode();
}
@Override
public boolean equals(Object o) {
if (o instanceof ConsoleRow) {
return compareTo((ConsoleRow) o) == 0;
}
return false;
}
}