/* * Copyright (C) 2014 Indeed Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except * in compliance with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software distributed under the * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either * express or implied. See the License for the specific language governing permissions and * limitations under the License. */ package com.indeed.imhotep.io.caching; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.commons.io.FileUtils; public class NoOpRemoteFileSystem extends RemoteFileSystem { public NoOpRemoteFileSystem(Map<String,Object> settings, RemoteFileSystem parent, RemoteFileSystemMounter mounter) { } @Override public void copyFileInto(String fullPath, File localFile) throws IOException { final File srcFile = new File(fullPath); FileUtils.copyFile(srcFile, localFile); } @Override public File loadFile(String fullPath) throws IOException { return new File(fullPath); } @Override public RemoteFileInfo stat(String fullPath) { final File file = new File(fullPath); final int type; if (file.isFile()) { type = RemoteFileInfo.TYPE_FILE; } else if (file.isDirectory()) { type = RemoteFileInfo.TYPE_DIR; } else { /* file probably does not exist */ return null; } return new RemoteFileInfo(fullPath, type); } @Override public List<RemoteFileInfo> readDir(String fullPath) { final File dir = new File(fullPath); final List<RemoteFileInfo> results = new ArrayList<RemoteFileInfo>(100); if (! dir.isDirectory()) { return null; } for (File f : dir.listFiles()) { final int type; final RemoteFileInfo info; if (f.isFile()) { type = RemoteFileInfo.TYPE_FILE; } else { type = RemoteFileInfo.TYPE_DIR; } info = new RemoteFileInfo(f.getName(), type); results.add(info); } return results; } @Override public String getMountPoint() { return ""; } @Override public Map<String, File> loadDirectory(String fullPath, File location) throws IOException { final Map<String, File> results = new HashMap<String,File>(100); final File dir = new File(fullPath); if (location != null) { throw new UnsupportedOperationException("No-op does not support moving files."); } if (! dir.isDirectory()) { throw new IOException(fullPath + " is not a directory."); } Iterator<File> iter = FileUtils.iterateFiles(dir, null, true); while (iter.hasNext()) { final File f = iter.next(); results.put(f.getAbsolutePath(), f); } results.put(fullPath, dir); return results; } @Override public InputStream getInputStreamForFile(String fullPath, long startOffset, long maxReadLength) throws IOException { final File file; final FileInputStream fis; file = loadFile(fullPath); fis = new FileInputStream(file); fis.skip(startOffset); return fis; } }