diff --git a/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java index c5321ab0e035fcc075b2afce05a1aeea5e1e858d..35578bca0c0ce36c1ce8c3a9c8d09f7c3ac677f9 100644 --- a/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java +++ b/common/source/java/ch/systemsx/cisd/common/process/ProcessResult.java @@ -26,6 +26,7 @@ import org.apache.log4j.Logger; import ch.systemsx.cisd.base.utilities.OSUtilities; import ch.systemsx.cisd.common.concurrent.ExecutionResult; import ch.systemsx.cisd.common.concurrent.ExecutionStatus; +import ch.systemsx.cisd.common.exceptions.Status; /** * Class that keeps around the result of running an Operating System process. @@ -241,6 +242,34 @@ public final class ProcessResult return errorOutput; } + /** + * Returns this result as a {@link Status}. + */ + public Status toStatus() + { + if (isOK()) + { + return Status.OK; + } else + { + if (isTimedOut()) + { + return Status.createRetriableError("Process timed out"); + } + if (isInterruped()) + { + return Status.createRetriableError("Process got interrupted"); + } + if (StringUtils.isBlank(getStartupFailureMessage()) == false) + { + return Status.createError(getStartupFailureMessage()); + } + return Status.createError("Exit Value: " + getExitValue() + "\n" + + StringUtils.join(getErrorOutput(), "\n")); + } + + } + /** * Returns the text output of the process (<code>stdout</code> and <code>stderr</code>). If it * not available (see {@link #isOutputAvailable()}, an empty list is returned.