package org.atomnuke.task.threading; import org.atomnuke.plugin.InstanceContext; import org.atomnuke.plugin.operation.OperationFailureException; import org.atomnuke.plugin.operation.SimpleOperation; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author zinic */ public class InstanceContextRunnableWrapper implements Runnable { private static final Logger LOG = LoggerFactory.getLogger(InstanceContextRunnableWrapper.class); private static final SimpleOperation<Runnable> RUNNABLE_OPERATION = new SimpleOperation<Runnable>() { @Override public void perform(Runnable instance) throws OperationFailureException { try { instance.run(); } catch (Exception ex) { throw new OperationFailureException(ex); } } }; private final InstanceContext<Runnable> runnableContext; public InstanceContextRunnableWrapper(InstanceContext<? extends Runnable> runnableContext) { this.runnableContext = (InstanceContext<Runnable>) runnableContext; } @Override public void run() { try { runnableContext.perform(RUNNABLE_OPERATION); } catch (OperationFailureException ofe) { LOG.error("Failed to run task: " + runnableContext + " - Reason: " + ofe.getCause().getMessage(), ofe.getCause()); } } }