package com.zillabyte.motherbrain.universe;
import java.io.File;
import java.io.Serializable;
/*
* IS THERE ALSO A flowRoot?? (from FlowHelper.java, the dir in getWithBinaryTo -- this appears to be just a directory created using createTempDir in MultiLangFlowFetcherAPI)
* Also, ARE THERE ALSO SINK DIRs?? (from RedshiftStreamWriteHandler, look at ensureFile)
*/
public abstract class FileFactory implements Serializable{
/**
*
*/
private static final long serialVersionUID = -8269141626826337826L;
// Set up dirs for operations and flows.
public abstract void init();
// Where tmp dir is located.
public abstract File getTmp();
// Set roots for operations and flows...
public abstract File getFlowLoggingRoot(String flowId);
public abstract File getFlowRoot(String flowId, String instName);
public abstract File getFlowQueueRoot(String flowId, String instName);
public abstract File flowRoot();
public abstract File logRoot();
/****
* A common base for FileFactories that share a common root
* @author jake
*
*/
public static abstract class RootedFileFactory extends FileFactory {
private static final long serialVersionUID = 3800863428120462196L;
protected File _flowRoot;
protected File _logRoot;
public RootedFileFactory(File flowRoot, File logRoot) {
_flowRoot = flowRoot;
_logRoot = logRoot;
}
@Override
public File flowRoot() {
return _flowRoot;
}
@Override
public File logRoot() {
return _logRoot;
}
@Override
public void init() {
_flowRoot.mkdirs();
}
protected File ensure(File file) {
file.mkdirs();
return file;
}
@Override
public File getFlowRoot(String flowId, String instName) {
return ensure(new File(_flowRoot, "f" + flowId + "-" + instName));
}
@Override
public File getFlowQueueRoot(String flowId, String instName) {
return ensure(new File(getFlowRoot(flowId, instName), "queue"));
}
@Override
public File getTmp() {
return new File("/tmp");
}
}
/**
*
*
*/
public static class AWS extends RootedFileFactory {
private static final long serialVersionUID = -9178195550089451386L;
public AWS() {
super(new File("/mnt/flows"), new File("mnt/logplex"));
}
@Override
public File getFlowLoggingRoot(String flow) {
return ensure(new File(_logRoot, "flow_"+ flow));
}
}
/**
*
*
*/
public static class Vagrant extends RootedFileFactory {
private static final long serialVersionUID = -6420757740122560374L;
public Vagrant() {
super(new File("/mnt/flows"), new File("/mnt/logplex"));
}
@Override
public File getFlowLoggingRoot(String flow) {
return ensure(new File(_logRoot, "flow_"+ flow));
}
}
/**
*
*
*/
public static class Local extends RootedFileFactory {
private static final long serialVersionUID = -8330343901777269849L;
public Local() {
super(new File("/tmp/flows"), new File("/tmp/flows"));
}
@Override
public File getFlowLoggingRoot(String flow) {
return ensure(new File(_logRoot, "f" + flow + "/flow_logs"));
}
}
/**
*
*
*/
public static class Mock extends RootedFileFactory {
private static final long serialVersionUID = -6996178412167232546L;
public Mock() {
super(new File("/tmp/flows_mock/"), new File("/tmp/flows_mock/"));
}
@Override
public File getFlowLoggingRoot(String flow) {
return ensure(new File(_logRoot, "f" + flow + "/flow_logs"));
}
}
}