package com.zillabyte.motherbrain.utils.dfs; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.util.List; import org.apache.commons.io.IOUtils; import org.codehaus.plexus.util.FileUtils; import org.jets3t.service.S3ServiceException; import com.google.common.collect.Lists; import com.google.monitoring.runtime.instrumentation.common.com.google.common.base.Throwables; import com.google.monitoring.runtime.instrumentation.common.com.google.common.io.Files; import com.zillabyte.motherbrain.universe.S3Exception; import com.zillabyte.motherbrain.utils.Utils; public class LocalDFSService implements DFSService{ /** * */ private static final long serialVersionUID = 8576730718155455692L; private static final String LOCAL_DFS_ROOT = "/tmp/local_dfs"; private File _root; public LocalDFSService(String uniqueSuffix) { _root = new File(LOCAL_DFS_ROOT + uniqueSuffix); _root.mkdirs(); } public LocalDFSService() { this(""); } private File prefixify(String path) { if(path.startsWith("/tmp") || path.startsWith("/mnt")) { Utils.TODO("if you see this error, go bug jake about it."); } File f = new File(_root, path); try { Files.createParentDirs(f); } catch (IOException e) { Throwables.propagate(e); } return f; } @Override public void writeFile(String path, byte[] content) throws IOException, InterruptedException { File f = prefixify(path); System.err.println(f.getAbsolutePath()); FileOutputStream output = new FileOutputStream(f); IOUtils.write(content, output); } @Override public List<String> listPath(String path) throws S3ServiceException, S3Exception { File dir = prefixify(path); File[] dirFiles = dir.listFiles(); List<String> stringFiles = Lists.newArrayList(); for(File f : dirFiles) { stringFiles.add(f.getName()); } return stringFiles; } @Override public byte[] readFile(String path) throws IOException { FileInputStream input = new FileInputStream(prefixify(path)); return IOUtils.toByteArray(input); } @Override public boolean pathExists(String path) throws S3Exception { File file = prefixify(path); if(file.exists()) return true; return false; } @Override public void maybeCreateDirectory(String path) throws IOException, S3Exception, InterruptedException { File dir = prefixify(path); dir.mkdirs(); } @Override public void copyFile(File fromFile, String toFile) throws IOException { FileUtils.copyFile(fromFile, prefixify(toFile)); } @Override public void deleteFile(String path) { File file = prefixify(path); file.delete(); } @Override public String getUriFor(String path) { return "file://" + prefixify(path).getAbsolutePath(); } }