/*******************************************************************************
*
* Copyright (c) 2010-2011 Sonatype, Inc.
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
*
*
*
*
*******************************************************************************/
package org.hudsonci.utils.tasks;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.tasks.BuildStep;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sonatype.gossip.support.MuxLoggerFactory;
import static com.google.common.base.Preconditions.checkNotNull;
/**
* Support for {@link hudson.tasks.BuildStep} operations.
*
* @author <a href="mailto:jason@planet57.com">Jason Dillon</a>
* @since 2.1.0
*/
public abstract class OperationSupport<T extends BuildStep> {
/**
* Server-side logger.
*/
protected final Logger log = LoggerFactory.getLogger(getClass());
protected final T owner;
protected final AbstractBuild<?, ?> build;
protected final BuildListener listener;
/**
* Build console logger.
*/
protected final TaskListenerLogger logger;
/**
* Muxed server+build console logger.
*/
protected final Logger muxlog;
public OperationSupport(final T owner, final AbstractBuild<?, ?> build, final BuildListener listener) {
this.owner = checkNotNull(owner);
this.build = checkNotNull(build);
this.listener = checkNotNull(listener);
this.logger = new TaskListenerLogger(listener);
this.muxlog = MuxLoggerFactory.create(log, logger);
}
protected abstract boolean doExecute() throws Exception;
protected void onFailure(final Throwable cause) {
logger.error("Failure: {}", cause.toString());
log.trace("Failure details", cause);
}
}