ExecutableFlowLoader.java
Home
/
src /
java /
azkaban /
utils /
ExecutableFlowLoader.java
package azkaban.utils;
import java.io.File;
import java.io.FileFilter;
import java.io.IOException;
import java.util.Arrays;
import org.apache.log4j.Logger;
import azkaban.executor.ExecutableFlow;
public class ExecutableFlowLoader {
private static final Logger logger = Logger.getLogger(ExecutableFlowLoader.class.getName());
public static ExecutableFlow loadExecutableFlowFromDir(File exDir) {
String exFlowName = exDir.getName();
String flowFileName = "_" + exFlowName + ".flow";
File[] exFlowFiles = exDir.listFiles(new PrefixFilter(flowFileName));
Arrays.sort(exFlowFiles);
if (exFlowFiles.length <= 0) {
logger.error("Execution flow " + exFlowName + " missing flow file.");
return null;
}
File lastExFlow = exFlowFiles[exFlowFiles.length-1];
Object exFlowObj = null;
try {
exFlowObj = JSONUtils.parseJSONFromFile(lastExFlow);
} catch (IOException e) {
logger.error("Error loading execution flow " + exFlowName + ". Problems parsing json file.");
return null;
}
ExecutableFlow flow = ExecutableFlow.createExecutableFlowFromObject(exFlowObj);
flow.setExecutionPath(exDir.getPath());
return flow;
}
private static class PrefixFilter implements FileFilter {
private String prefix;
public PrefixFilter(String prefix) {
this.prefix = prefix;
}
@Override
public boolean accept(File pathname) {
String name = pathname.getName();
return pathname.isFile() && !pathname.isHidden() && name.length() >= prefix.length() && name.startsWith(prefix);
}
}
private static class SuffixFilter implements FileFilter {
private String suffix;
private boolean filesOnly = false;
public SuffixFilter(String suffix, boolean filesOnly) {
this.suffix = suffix;
}
@Override
public boolean accept(File pathname) {
String name = pathname.getName();
return (pathname.isFile() || !filesOnly) && !pathname.isHidden() && name.length() >= suffix.length() && name.endsWith(suffix);
}
}
}