diff --git a/symmetric/src/main/java/org/jumpmind/symmetric/web/AckServlet.java b/symmetric/src/main/java/org/jumpmind/symmetric/web/AckServlet.java index f3d78c1505..1269393ffe 100644 --- a/symmetric/src/main/java/org/jumpmind/symmetric/web/AckServlet.java +++ b/symmetric/src/main/java/org/jumpmind/symmetric/web/AckServlet.java @@ -23,6 +23,8 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import java.util.Iterator; import java.util.List; import java.util.Map; @@ -34,6 +36,7 @@ import org.apache.commons.collections.IteratorUtils; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang.builder.CompareToBuilder; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jumpmind.symmetric.model.BatchInfo; @@ -42,6 +45,8 @@ public class AckServlet extends AbstractTransportResourceServlet { + private static final BatchIdComparator BATCH_ID_COMPARATOR = new BatchIdComparator(); + private static final long serialVersionUID = 1L; protected static final Log logger = LogFactory.getLog(AckServlet.class); @@ -86,6 +91,7 @@ protected void handlePost(HttpServletRequest req, HttpServletResponse resp) } } } + Collections.sort(batches, BATCH_ID_COMPARATOR); getTransportResourceHandler().ack(batches); } @@ -99,6 +105,23 @@ private String getBatchIdFrom(String webParameter) { } } + private static class BatchIdComparator implements Comparator { + public int compare(final BatchInfo batchInfo1, final BatchInfo batchInfo2) { + final CompareToBuilder retVal = new CompareToBuilder(); + if (batchInfo1 != null && StringUtils.isNotBlank(batchInfo1.getBatchId()) + && StringUtils.isNumeric(batchInfo1.getBatchId()) && batchInfo2 != null + && StringUtils.isNotBlank(batchInfo2.getBatchId()) + && StringUtils.isNumeric(batchInfo2.getBatchId())) { + final Integer batchId1 = Integer.parseInt(batchInfo1.getBatchId()); + final Integer batchId2 = Integer.parseInt(batchInfo2.getBatchId()); + retVal.append(batchId1, batchId2); + } else { + retVal.append(batchInfo1.getBatchId(), batchInfo2.getBatchId()); + } + return retVal.toComparison(); + } + } + @Override protected Log getLogger() { return logger;