package org.atomnuke.sink.driver; import org.atomnuke.sink.AtomSink; import org.atomnuke.sink.AtomSinkException; import org.atomnuke.sink.AtomSinkResult; import org.atomnuke.sink.manager.ManagedSink; import org.atomnuke.plugin.operation.ComplexOperation; import org.atomnuke.plugin.operation.OperationFailureException; import org.atomnuke.util.lifecycle.runnable.ReclaimableTaskPartial; /** * * @author zinic */ public class AtomSinkDriver extends ReclaimableTaskPartial { private static final ComplexOperation<AtomSink, DriverArgument> DRIVER_OPERATION = new ComplexOperation<AtomSink, DriverArgument>() { @Override public void perform(AtomSink instance, DriverArgument argument) throws OperationFailureException { try { if (argument.feed() != null) { argument.setCapturedResult(instance.feedPage(argument.feed())); } else if (argument.entry() != null) { argument.setCapturedResult(instance.entry(argument.entry())); } else { argument.setCapturedResult(AtomSinkResult.ok()); } } catch (AtomSinkException ale) { throw new OperationFailureException(ale); } } }; private final ManagedSink registeredSink; private final DriverArgument driverArgument; public AtomSinkDriver(ManagedSink registeredSink, DriverArgument driverArgument) { this.registeredSink = registeredSink; this.driverArgument = driverArgument; } @Override public void run() { try { registeredSink.sinkContext().perform(DRIVER_OPERATION, driverArgument); switch (driverArgument.result().action()) { case HALT: registeredSink.cancellationRemote().cancel(); break; default: } } catch (OperationFailureException ofe) { } } }