/*
* Copyright (c) MuleSoft, Inc. All rights reserved. http://www.mulesoft.com
* The software in this package is published under the terms of the CPAL v1.0
* license, a copy of which has been included with this distribution in the
* LICENSE.txt file.
*/
package org.mule.runtime.core.retry;
import org.mule.runtime.api.message.Message;
import org.mule.runtime.core.api.MuleContext;
import org.mule.runtime.core.api.context.MuleContextAware;
import org.mule.runtime.core.api.retry.RetryContext;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
/**
* The RetryContext is used to store any data which carries over from attempt to attempt such as response messages.
*/
public class DefaultRetryContext implements RetryContext, MuleContextAware {
private Message[] returnMessages;
private Map<Object, Object> metaInfo = new HashMap<Object, Object>();
private String description;
private Throwable lastFailure;
private boolean failed = false;
private MuleContext muleContext;
public DefaultRetryContext(String description, Map<Object, Object> metaInfo) {
super();
this.description = description;
if (metaInfo != null) {
this.metaInfo = metaInfo;
}
}
public void setMuleContext(MuleContext context) {
this.muleContext = context;
}
public MuleContext getMuleContext() {
return muleContext;
}
public Map<Object, Object> getMetaInfo() {
return Collections.unmodifiableMap(metaInfo);
}
public Message[] getReturnMessages() {
return returnMessages;
}
public Message getFirstReturnMessage() {
return (returnMessages == null ? null : returnMessages[0]);
}
public void setReturnMessages(Message[] returnMessages) {
this.returnMessages = returnMessages;
}
public void addReturnMessage(Message result) {
if (returnMessages == null) {
returnMessages = new Message[] {result};
} else {
Message[] newReturnMessages = new Message[returnMessages.length + 1];
System.arraycopy(newReturnMessages, 0, returnMessages, 0, 1);
returnMessages = newReturnMessages;
}
}
public String getDescription() {
return description;
}
public Throwable getLastFailure() {
return this.lastFailure;
}
public void setOk() {
this.failed = false;
this.lastFailure = null;
}
public boolean isOk() {
// note that it might be possible to fail without throwable, so not relying on lastFailure field
return !this.failed;
}
public void setFailed(Throwable lastFailure) {
this.failed = true;
this.lastFailure = lastFailure;
}
}