package org.jpos.jposext.isomsgaction.service.support;
import java.util.Map;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.jposext.isomsgaction.exception.ParentMsgDoesNotExistException;
import org.jpos.jposext.isomsgaction.helper.CmpInfoWrapper;
import org.jpos.jposext.isomsgaction.helper.ISOMsgHelper;
import org.jpos.jposext.isomsgaction.service.IFulfillCondition;
import org.jpos.jposext.isomsgaction.service.IISOMsgAction;
/**
* Base class for all actions that needs to test a condition
*
* @author dgrandemange
*
*/
public abstract class ISOMsgAbstractIfAction extends ISOMsgCompositeAction
implements IFulfillCondition {
private IISOMsgAction elseAction;
private boolean applyNotOperator = false;
public ISOMsgAbstractIfAction() {
super();
}
@Override
public void process(ISOMsg[] msg, Map<String, Object> ctx)
throws ISOException {
ISOMsg cmpParentMsg = null;
int id = -1;
try {
CmpInfoWrapper cmpInfos = ISOMsgHelper.findParentMsg(
msg[getSrcMsgIndex()], getIdPath(), getIdPath());
cmpParentMsg = cmpInfos.getCmpParentMsg();
String sid = cmpInfos.getId();
//id = Integer.parseInt(sid);
id = ISOMsgHelper.getIntIdFromStringId(sid);
} catch (ParentMsgDoesNotExistException e) {
}
boolean conditionFulfilled = isConditionFulfilled(cmpParentMsg, id);
if (applyNotOperator ? (!conditionFulfilled) : conditionFulfilled) {
for (IISOMsgAction child : getChilds()) {
child.process(msg, ctx);
}
} else {
if (null != elseAction) {
elseAction.process(msg, ctx);
}
}
}
public IISOMsgAction getElseAction() {
return elseAction;
}
public void setElseAction(IISOMsgAction elseAction) {
this.elseAction = elseAction;
}
public boolean isApplyNotOperator() {
return applyNotOperator;
}
public void setApplyNotOperator(boolean applyNotOperator) {
this.applyNotOperator = applyNotOperator;
}
}