package camelinaction;

import java.io.File;

import org.apache.camel.Exchange;
import org.apache.camel.spi.Synchronization;
import org.apache.camel.util.FileUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * A Synchronization which is to be executed when the Exchange is done.
 * <p/>
 * This allows us to execute custom logic such as rollback by deleting the file which was saved.
 */
public class FileRollback implements Synchronization {

    private static Logger LOG = LoggerFactory.getLogger(FileRollback.class);

    public void onComplete(Exchange exchange) {
        // this method is invoked when the Exchange completed with no failure
    }

    public void onFailure(Exchange exchange) {
        // this method is executed when the Exchange failed.
        // the cause Exception is stored on the Exchange which you can obtain using getException

        // delete the file
        String name = exchange.getIn().getHeader(Exchange.FILE_NAME_PRODUCED, String.class);
        LOG.warn("Failure occurred so deleting backup file: " + name);

        FileUtil.deleteFile(new File(name));
    }

}