ar.com.zauber.commons.message.impl.mail.AsyncNotificationStrategyRunnable.java Source code

Java tutorial

Introduction

Here is the source code for ar.com.zauber.commons.message.impl.mail.AsyncNotificationStrategyRunnable.java

Source

/**
 * Copyright (c) 2005-2012 Zauber S.A. <http://www.zaubersoftware.com/>
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License 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 ar.com.zauber.commons.message.impl.mail;

import java.util.concurrent.Callable;

import org.apache.commons.lang.Validate;

import ar.com.zauber.commons.dao.Closure;
import ar.com.zauber.commons.message.Message;
import ar.com.zauber.commons.message.NotificationAddress;
import ar.com.zauber.commons.message.NotificationStrategy;

/**
 * Sends messages via a delegate 
 * 
 * @author Christian Nardi
 * @since Apr 6, 2011
 */
class AsyncNotificationStrategyRunnable implements Callable<Message> {
    private final NotificationStrategy delegate;
    private final Message message;
    private final NotificationAddress[] notidicationAddresses;
    private Closure<Throwable> errorClosure;

    /**
     * Creates the AsyncNotificationStrategyRunnable.
     *
     * @param message to send
     * @param notidicationAddresses to send
     * @param delegate used for sending messages
     * @param errorClosure 
     */
    public AsyncNotificationStrategyRunnable(final NotificationStrategy delegate, final Message message,
            final NotificationAddress[] notidicationAddresses, final Closure<Throwable> errorClosure) {
        Validate.notNull(message);
        Validate.notNull(notidicationAddresses);
        Validate.notNull(delegate);
        Validate.notNull(errorClosure);

        this.errorClosure = errorClosure;
        this.notidicationAddresses = notidicationAddresses;
        this.delegate = delegate;
        this.message = message;
    }

    /** @see java.util.concurrent.Callable#call() */
    @Override
    public Message call() throws Exception {
        try {
            delegate.execute(notidicationAddresses, message);
        } catch (Exception e) {
            errorClosure.execute(e);
            throw e;
        }
        return message;
    }
}