View Javadoc

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