View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.retry;
8   
9   import org.mule.api.MuleContext;
10  import org.mule.api.MuleMessage;
11  import org.mule.api.context.MuleContextAware;
12  import org.mule.api.retry.RetryContext;
13  
14  import java.util.Collections;
15  import java.util.HashMap;
16  import java.util.Map;
17  
18  /**
19   * The RetryContext is used to store any data which carries over from
20   * attempt to attempt such as response messages.
21   */
22  public class DefaultRetryContext implements RetryContext, MuleContextAware
23  {
24      private MuleMessage[] returnMessages;
25      private Map<Object, Object> metaInfo = new HashMap<Object, Object>();
26      private String description;
27      private Throwable lastFailure;
28      private boolean failed = false;
29      private MuleContext muleContext;
30  
31      public DefaultRetryContext(String description, Map<Object, Object> metaInfo)
32      {
33          super();
34          this.description = description;
35          if (metaInfo != null)
36          {
37              this.metaInfo = metaInfo;
38          }
39      }
40  
41      public void setMuleContext(MuleContext context)
42      {
43          this.muleContext = context;
44      }
45  
46      public MuleContext getMuleContext()
47      {
48          return muleContext;
49      }
50  
51      public Map<Object, Object> getMetaInfo()
52      {
53          return Collections.unmodifiableMap(metaInfo);
54      }
55  
56      public MuleMessage[] getReturnMessages()
57      {
58          return returnMessages;
59      }
60  
61      public MuleMessage getFirstReturnMessage()
62      {
63          return (returnMessages == null ? null : returnMessages[0]);
64      }
65  
66      public void setReturnMessages(MuleMessage[] returnMessages)
67      {
68          this.returnMessages = returnMessages;
69      }
70  
71      public void addReturnMessage(MuleMessage result)
72      {
73          if (returnMessages == null)
74          {
75              returnMessages = new MuleMessage[] {result};
76          }
77          else
78          {
79              MuleMessage[] newReturnMessages = new MuleMessage[returnMessages.length + 1];
80              System.arraycopy(newReturnMessages, 0, returnMessages, 0, 1);
81              returnMessages = newReturnMessages;
82          }
83      }
84  
85      public String getDescription()
86      {
87          return description;
88      }
89  
90      public Throwable getLastFailure()
91      {
92          return this.lastFailure;
93      }
94  
95      public void setOk()
96      {
97          this.failed = false;
98          this.lastFailure = null;
99      }
100 
101     public boolean isOk()
102     {
103         // note that it might be possible to fail without throwable, so not relying on lastFailure field
104         return !this.failed;
105     }
106 
107     public void setFailed(Throwable lastFailure)
108     {
109         this.failed = true;
110         this.lastFailure = lastFailure;
111     }
112 }