/*
* This program is free software; you can redistribute it and/or modify it under the
* terms of the GNU Lesser General Public License, version 2.1 as published by the Free Software
* Foundation.
*
* You should have received a copy of the GNU Lesser General Public License along with this
* program; if not, you can obtain a copy at http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html
* or from the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
* without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU Lesser General Public License for more details.
*
* Copyright 2009 Pentaho Corporation. All rights reserved.
*
*/
package org.pentaho.platform.api.engine;
import java.io.PrintWriter;
import java.util.Date;
import org.apache.commons.lang.StringUtils;
import org.pentaho.actionsequence.dom.IActionControlStatement;
import org.pentaho.actionsequence.dom.IActionDefinition;
import org.pentaho.actionsequence.dom.IActionIfStatement;
import org.pentaho.actionsequence.dom.IActionLoop;
import org.pentaho.actionsequence.dom.IActionSequenceExecutableStatement;
public class ActionSequenceException extends Exception {
Date date = new Date();
String stepDescription;
String actionSequenceName;
Integer stepNumber;
String actionClass;
String instanceId;
String sessionId;
Integer loopIndex;
IActionDefinition actionDefinition;
public ActionSequenceException() {
super();
}
public ActionSequenceException(String msg) {
super(msg);
}
public ActionSequenceException(String msg, Throwable cause) {
super(msg, cause);
}
public ActionSequenceException(Throwable cause) {
super(cause);
}
public ActionSequenceException(String msg, Throwable cause, String sessionName, String instanceId,
String actionSequenceName, String actionDescription, String componentName) {
this(msg, cause);
setActionSequenceName(actionSequenceName);
setInstanceId(instanceId);
setSessionId(sessionName);
setStepDescription(actionDescription);
setActionClass(componentName);
}
/**
* A convenience method for extracting all knowable information from an {@link IActionDefinition}
* @param msg
* @param cause
* @param sessionName
* @param instanceId
* @param actionSequenceName
* @param actionDefinition
*/
public ActionSequenceException(String msg, Throwable cause, String sessionName, String instanceId,
String actionSequenceName, IActionDefinition actionDefinition) {
this(msg, cause);
setActionSequenceName(actionSequenceName);
setInstanceId(instanceId);
setSessionId(sessionName);
setActionDefinition(actionDefinition);
}
/**
* A convenience method for extracting all knowable information from an {@link IActionDefinition}
* @param msg
* @param sessionName
* @param instanceId
* @param actionSequenceName
* @param actionDefinition
*/
public ActionSequenceException(String msg, String sessionName, String instanceId, String actionSequenceName,
IActionDefinition actionDefinition) {
this(msg);
setActionSequenceName(actionSequenceName);
setInstanceId(instanceId);
setSessionId(sessionName);
setActionDefinition(actionDefinition);
}
public String getStepDescription() {
return stepDescription;
}
public void setStepDescription(String description) {
this.stepDescription = description;
}
public String getActionSequenceName() {
return actionSequenceName;
}
public void setActionSequenceName(String actionSequenceName) {
this.actionSequenceName = actionSequenceName;
}
public Integer getStepNumber() {
return stepNumber;
}
public void setStepNumber(Integer stepNumber) {
this.stepNumber = stepNumber;
}
public String getInstanceId() {
return instanceId;
}
public void setInstanceId(String instanceId) {
this.instanceId = instanceId;
}
public String getSessionId() {
return sessionId;
}
public void setSessionId(String sessionId) {
this.sessionId = sessionId;
}
public String getActionClass() {
return actionClass;
}
public void setActionClass(String actionClass) {
this.actionClass = actionClass;
}
public Date getDate() {
return date;
}
public IActionDefinition getActionDefinition() {
return actionDefinition;
}
public void setActionDefinition(IActionDefinition actionDefinition) {
this.actionDefinition = actionDefinition;
if (actionDefinition != null) {
setStepDescription(actionDefinition.getDescription());
setActionClass(actionDefinition.getComponentName());
}
}
public Integer getLoopIndex() {
return loopIndex;
}
public void setLoopIndex(Integer loopIndex) {
this.loopIndex = loopIndex;
}
@SuppressWarnings("nls")
public void printActionExecutionStack(PrintWriter s) {
if (actionDefinition != null) {
_printStack(actionDefinition, s, "");
}
}
/*
* We are not i18n-ing these stack trace messages. This can be thought of as Throwable.printStackTrace()
*/
@SuppressWarnings("nls")
protected void _printStack(IActionSequenceExecutableStatement statement, PrintWriter s, String prefix) {
if (statement instanceof IActionIfStatement) {
s.println(prefix + "IF STATEMENT: " + ((IActionIfStatement) statement).getCondition());
} else if (statement instanceof IActionLoop) {
s.println(prefix + "LOOP ON: " + ((IActionLoop) statement).getLoopOn());
} else if (statement instanceof IActionDefinition) {
String actionDesc = StringUtils.defaultString(((IActionDefinition) statement).getDescription(), "");
s.println(prefix + "EXECUTING ACTION: " + actionDesc + " (" + ((IActionDefinition) statement).getComponentName()
+ ")");
} else if (statement instanceof IActionControlStatement) {
s.println(prefix + "UNKNOWN CONTROL STATEMENT");
} else if (statement instanceof IActionControlStatement) {
s.println(prefix + "UNKNOWN CONTROL STATEMENT");
} else {
s.println(prefix + "UNKNOWN EXECUTABLE STATEMENT");
}
IActionSequenceExecutableStatement parent = statement.getParent();
if (parent != null) {
_printStack(statement.getParent(), s, "\tin ");
}
}
}