package com.after_sunrise.oss.otdb.lib.load.impl.source; import static org.apache.commons.io.FileUtils.listFiles; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.commons.io.filefilter.IOFileFilter; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.after_sunrise.commons.log.object.Logs; import com.after_sunrise.oss.otdb.lib.load.TickSourceFactory; /** * @author takanori.takase */ public class FileTickSourceFactory implements TickSourceFactory { private final Log log = LogFactory.getLog(getClass()); private File file; private IOFileFilter fileFilter; private IOFileFilter dirFilter; public void setFile(File file) { this.file = file; } public void setFileFilter(IOFileFilter fileFilter) { this.fileFilter = fileFilter; } public void setDirFilter(IOFileFilter dirFilter) { this.dirFilter = dirFilter; } @Override public List<String> list() throws IOException { String parent = file.getAbsolutePath(); Logs.logDebug(log, "Listing files : %s", parent); Collection<File> files = listFiles(file, fileFilter, dirFilter); List<String> list = new ArrayList<>(files.size()); for (File f : files) { String child = f.getAbsolutePath(); String path = StringUtils.removeStart(child, parent); list.add(path); Logs.logTrace(log, "File found : %s", path); } Logs.logDebug(log, "Listed files : [%,3d] %s", list.size(), parent); return list; } @Override public InputStream openInputStream(String source) throws IOException { File sourceFile = new File(file, source); Logs.logDebug(log, "Opening file stream : [%,3d bytes] %s", sourceFile.length(), sourceFile.getAbsolutePath()); return new FileInputStream(sourceFile); } }