Implementing deactivate sequence for forwarding jobs; Applied patch from SYNAPSE-1020

git-svn-id: https://svn.apache.org/repos/asf/synapse/trunk@1746209 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingJob.java b/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingJob.java
index 4a7cb6b..aa78874 100644
--- a/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingJob.java
+++ b/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingJob.java
@@ -158,7 +158,7 @@
 
                                 if (maxDeliverAttempts > 0) {
                                     if(processor.getSendAttemptCount() >= maxDeliverAttempts) {
-                                        processor.deactivate();
+                                        deactivate(processor, messageContext, parameters);
                                     }
                                 }
                                 errorStop = true;
@@ -199,7 +199,7 @@
                             if (maxDeliverAttempts > 0) {
                                 processor.incrementSendAttemptCount();
                                 if (processor.getSendAttemptCount() >= maxDeliverAttempts) {
-                                    processor.deactivate();
+                                    deactivate(processor, messageContext, parameters);
                                 }
                             }
                             errorStop = true;
@@ -260,4 +260,19 @@
         }
     }
 
+    private void deactivate(ScheduledMessageForwardingProcessor processor,
+                            MessageContext msgContext, Map<String, Object> parameters) {
+        processor.deactivate();
+        if (parameters != null && parameters.get(ForwardingProcessorConstants.DEACTIVATE_SEQUENCE) != null) {
+            if (msgContext != null) {
+                String seq = (String) parameters.get(ForwardingProcessorConstants.DEACTIVATE_SEQUENCE);
+                Mediator mediator = msgContext.getSequence(seq);
+                if (mediator != null) {
+                    mediator.mediate(msgContext);
+                } else {
+                    log.warn("Deactivate sequence: " + seq + " does not exist");
+                }
+            }
+        }
+    }
 }
diff --git a/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingProcessorConstants.java b/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingProcessorConstants.java
index bd81430..87c1e01 100644
--- a/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingProcessorConstants.java
+++ b/java/modules/core/src/main/java/org/apache/synapse/message/processors/forward/ForwardingProcessorConstants.java
@@ -55,5 +55,9 @@
      */
     public static final String FAULT_SEQUENCE = "message.processor.fault.sequence";
 
+    /**
+     * used for forward in case of scheduled message processor deactivation
+     */
+    public static final String DEACTIVATE_SEQUENCE = "message.processor.deactivate.sequence";
 
 }