package org.atomnuke.plugin.context; import org.atomnuke.plugin.InstanceContext; import org.atomnuke.plugin.Environment; import org.atomnuke.plugin.operation.ComplexOperation; import org.atomnuke.plugin.operation.OperationFailureException; import org.atomnuke.plugin.operation.SimpleOperation; /** * * @author zinic */ public class InstanceContextImpl<T> implements InstanceContext<T> { private final Environment environment; private final T instance; public InstanceContextImpl(Environment environment, T instance) { this.environment = environment; this.instance = instance; } @Override public Class<T> instanceClass() { return (Class<T>) instance.getClass(); } @Override public T instance() { return instance; } @Override public void perform(SimpleOperation<T> requestedOperation) throws OperationFailureException { try { environment.stepInto(); requestedOperation.perform(instance()); } finally { environment.stepOut(); } } @Override public <A> void perform(ComplexOperation<T, A> requestedOperation, A argument) throws OperationFailureException { try { environment.stepInto(); requestedOperation.perform(instance(), argument); } finally { environment.stepOut(); } } @Override public String toString() { return "InstanceContextImpl{" + "environment=" + environment + ", instance=" + instance + '}'; } }