package org.embulk.spi;
import java.util.concurrent.ExecutionException;
import org.slf4j.Logger;
import com.google.inject.Injector;
import org.embulk.config.ModelManager;
import org.embulk.config.CommitReport; // Deprecated
import org.embulk.config.TaskReport;
import org.embulk.config.ConfigDiff;
import org.embulk.config.ConfigSource;
import org.embulk.config.TaskSource;
import org.embulk.plugin.PluginType;
import org.embulk.spi.time.Timestamp;
public class Exec
{
private static final InheritableThreadLocal<ExecSession> session = new InheritableThreadLocal<ExecSession>();
private Exec() { }
public static <T> T doWith(ExecSession session, ExecAction<T> action) throws ExecutionException
{
Exec.session.set(session);
try {
return action.run();
} catch (Exception ex) {
throw new ExecutionException(ex);
} finally {
Exec.session.set(null);
}
}
public static ExecSession session()
{
ExecSession session = Exec.session.get();
if (session == null) {
throw new NullPointerException("Exec is used outside of Exec.doWith");
}
return session;
}
public static Injector getInjector()
{
return session().getInjector();
}
public static Timestamp getTransactionTime()
{
return session().getTransactionTime();
}
public static Logger getLogger(String name)
{
return session().getLogger(name);
}
public static Logger getLogger(Class<?> name)
{
return session().getLogger(name);
}
public static BufferAllocator getBufferAllocator()
{
return session().getBufferAllocator();
}
public static ModelManager getModelManager()
{
return session().getModelManager();
}
public static <T> T newPlugin(Class<T> iface, PluginType type)
{
return session().newPlugin(iface, type);
}
public static TaskReport newTaskReport()
{
return session().newTaskReport();
}
@Deprecated
public static CommitReport newCommitReport()
{
return session().newCommitReport();
}
public static ConfigDiff newConfigDiff()
{
return session().newConfigDiff();
}
public static ConfigSource newConfigSource()
{
return session().newConfigSource();
}
public static TaskSource newTaskSource()
{
return session().newTaskSource();
}
// TODO this method is still beta
public static TempFileSpace getTempFileSpace()
{
return session().getTempFileSpace();
}
public static boolean isPreview()
{
return session().isPreview();
}
}