All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.amazonaws.services.simpleworkflow.flow.interceptors.RetryPolicyBase Maven / Gradle / Ivy

/*
 * Copyright 2012-2014 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 *  http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file is distributed
 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
 * express or implied. See the License for the specific language governing
 * permissions and limitations under the License.
 */
package com.amazonaws.services.simpleworkflow.flow.interceptors;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import com.amazonaws.services.simpleworkflow.flow.DecisionException;


public abstract class RetryPolicyBase implements RetryPolicy {
    
    private List> exceptionsToRetry;
    
    private List> exceptionsToExclude;
    
    public List> getExceptionsToRetry() {
        if (exceptionsToRetry == null) {
            exceptionsToRetry = new ArrayList>();
            exceptionsToRetry.add(Throwable.class);
        }
        return exceptionsToRetry;
    }

    public void setExceptionsToRetry(List> exceptionsToRetry) {
        List> exceptionsToRetryCopy = new ArrayList>();
        if (exceptionsToRetry != null) {
            exceptionsToRetryCopy.addAll(exceptionsToRetry);
        }
        
        this.exceptionsToRetry = exceptionsToRetryCopy;
    }
    
    public RetryPolicyBase withExceptionsToRetry(Collection> exceptionsToRetry) {
        List> exceptionsToRetryCopy = new ArrayList>();
        if (exceptionsToRetry != null) {
            exceptionsToRetryCopy.addAll(exceptionsToRetry);
        }
        
        this.exceptionsToRetry = exceptionsToRetryCopy;
        return this;
    }
    
    public List> getExceptionsToExclude() {
        if (exceptionsToExclude == null) {
            exceptionsToExclude = new ArrayList>();
        }
        return exceptionsToExclude;
    }
    
    public void setExceptionsToExclude(List> exceptionsToExclude) {
        List> exceptionsToExcludeCopy = new ArrayList>();
        if (exceptionsToExclude != null) {
            exceptionsToExcludeCopy.addAll(exceptionsToExclude);
        }
        
        this.exceptionsToExclude = exceptionsToExcludeCopy;
    }
    
    public RetryPolicyBase withExceptionsToExclude(Collection> exceptionsToExclude) {
        List> exceptionsToExcludeCopy = new ArrayList>();
        if (exceptionsToExclude != null) {
            exceptionsToExcludeCopy.addAll(exceptionsToExclude);
        }
        
        this.exceptionsToExclude = exceptionsToExcludeCopy;
        return this;
    }

    @Override
    public boolean isRetryable(Throwable failure) {
        boolean isRetryable = false;
        
        if (failure instanceof DecisionException && failure.getCause() != null) {
            failure = failure.getCause();
        }
        
        for (Class exceptionToRetry: getExceptionsToRetry()) {
            if (exceptionToRetry.isAssignableFrom(failure.getClass())) {
                isRetryable = true;
                break;
            }
        }
        
        if (isRetryable) {
            for (Class exceptionNotToRetry: getExceptionsToExclude()) {
                if (exceptionNotToRetry.isAssignableFrom(failure.getClass())) {
                    isRetryable = false;
                    break;
                }
            }
        }
        
        return isRetryable;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy