package org.jpos.jposext.isomsgaction.testing.service.support;
import java.util.Comparator;
import java.util.Map.Entry;
import org.jpos.iso.ISOComponent;
import org.jpos.iso.ISOMsg;
import org.jpos.jposext.isomsgaction.testing.model.ComparisonContext;
public class ISOMsgComparator implements Comparator<ISOMsg> {
private String path;
private ComparisonContext comparisonContext;
private boolean skipBitmapComparison;
public ISOMsgComparator(ComparisonContext comparisonContext, String path, boolean skipBitmapComparison) {
super();
this.comparisonContext = comparisonContext;
this.path = path;
this.skipBitmapComparison = skipBitmapComparison;
}
/* (non-Javadoc)
* @see java.util.Comparator#compare(java.lang.Object, java.lang.Object)
*/
public int compare(ISOMsg isomsg0, ISOMsg isomsg1) {
int res = 0;
if (null != isomsg0) {
if (null == isomsg1) {
comparisonContext.addDiff(path, String.format(
"Composite field %s : Expected=[SET], Current=NULL",
path));
return -1;
}
} else {
if (null == isomsg1) {
return 0;
} else {
comparisonContext.addDiff(path, String.format(
"Composite field %s : Expected=NULL, Current=[SET]",
path));
return -1;
}
}
boolean allOk = true;
for (Object obj : isomsg0.getChildren().entrySet()) {
Entry<Integer, ISOComponent> entry = (Entry<Integer, ISOComponent>) obj;
ISOComponent child0 = entry.getValue();
ISOComponent child1 = isomsg1.getComponent(entry.getKey());
ISOComponentComparator isoCmpComparator = new ISOComponentComparator(
comparisonContext, path, entry.getKey().toString(), skipBitmapComparison);
int compare = isoCmpComparator.compare(child0, child1);
allOk = allOk && (compare == 0);
}
// Lister les composants de isomsg1 et v�rifier si leur pr�sence n'�tait
// pas attendue
for (Object obj : isomsg1.getChildren().entrySet()) {
Entry<Integer, ISOComponent> entry = (Entry<Integer, ISOComponent>) obj;
if (!(isomsg0.hasField(entry.getKey()))) {
String idPath = String.format("%s%s%s", path,
("".equals(path) ? "" : "."), entry.getKey());
if (comparisonContext.getMapManualChecks().containsKey(idPath)) {
// OK
} else {
comparisonContext.addDiff(idPath, String.format(
"Composite field %s : subfield %s is not expected",
path, entry.getKey()));
allOk = false;
}
}
}
res = allOk ? 0 : -1;
return res;
}
}