package org.jpos.jposext.isomsgaction.service.support;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import org.jpos.iso.ISOComponent;
import org.jpos.iso.ISOException;
import org.jpos.iso.ISOMsg;
import org.jpos.jposext.isomsgaction.helper.ISOMsgHelper;
/**
*
* Loop action
*
* @author dgrandemange
*
*/
public class ISOMsgActionLoop extends ISOMsgCompositeAction {
private String token;
private int begin;
private int end;
private boolean intervalMode;
protected Map<Long, String> mapCurrIteratorValByThread = new ConcurrentHashMap<Long, String>();
@Override
public void process(ISOMsg[] msg, Map<String, Object> map)
throws ISOException {
try {
if (intervalMode) {
for (int i = begin; i <= end; i++) {
mapCurrIteratorValByThread.put(Thread.currentThread()
.getId(), "" + i);
super.process(msg, map);
}
} else {
ISOComponent isoCmp = ISOMsgHelper.getComponent(
msg[getMsgIndex()], getIdPath());
if (isoCmp instanceof ISOMsg) {
ISOMsg isoMsg = (ISOMsg) isoCmp;
for (Object obj : isoMsg.getChildren().values()) {
ISOComponent currChild = (ISOComponent) obj;
String key = currChild.getKey().toString();
mapCurrIteratorValByThread.put(Thread.currentThread()
.getId(), "" + key);
super.process(msg, map);
}
}
}
} finally {
try {
mapCurrIteratorValByThread.remove(Thread.currentThread()
.getId());
} catch (Throwable t) {
// Safe to ignore
}
}
}
/**
* @return the token
*/
public String getToken() {
return token;
}
/**
* @param token
* the token to set
*/
public void setToken(String token) {
this.token = token;
}
/**
* @return the begin
*/
public int getBegin() {
return begin;
}
/**
* @param begin
* the begin to set
*/
public void setBegin(int begin) {
this.begin = begin;
}
/**
* @return the end
*/
public int getEnd() {
return end;
}
/**
* @param end
* the end to set
*/
public void setEnd(int end) {
this.end = end;
}
/**
* @return the intervalMode
*/
public boolean isIntervalMode() {
return intervalMode;
}
/**
* @param intervalMode
* the intervalMode to set
*/
public void setIntervalMode(boolean intervalMode) {
this.intervalMode = intervalMode;
}
/**
* @param threadId
* @return
*/
public String findCurrIteratorValByThread(Long threadId) {
return mapCurrIteratorValByThread.get(threadId);
}
}