/* * Copyright 2013 Brian Rosenberger (Brutex Network) * * 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 net.brutex.xservices.util; import java.io.IOException; import java.nio.file.FileSystems; import java.nio.file.FileVisitResult; import java.nio.file.Path; import java.nio.file.PathMatcher; import java.nio.file.SimpleFileVisitor; import java.nio.file.attribute.BasicFileAttributes; import java.util.ArrayList; import java.util.List; import org.apache.log4j.Logger; import net.brutex.xservices.types.FileInfoType; // TODO: Auto-generated Javadoc /** * The Class FileWalker. * * @author Brian Rosenberger, bru(at)brutex.de */ public class FileWalker extends SimpleFileVisitor { /** The matcher. */ private final PathMatcher matcher; /** The num. */ private long num=0; /** The total. */ private long total=0; /** The pattern. */ private final String pattern; /** The logger. */ final Logger logger = Logger.getLogger(FileWalker.class); List list; /** * Instantiates a new file walker. * * @param pattern the pattern */ public FileWalker(String pattern) { matcher = FileSystems.getDefault() .getPathMatcher("glob:" + pattern); this.pattern = "glob:"+pattern; this.list = new ArrayList(); } // Compares the glob pattern against // the file or directory name. /** * Find. * * @param file the file */ void find(Path file) { Path name = file.getFileName(); logger.trace("Compare file " + file.toString() + " against pattern '"+pattern+"'."); total++; if (name != null && matcher.matches(name)) { list.add(file); logger.debug("Added file " + file.toString() + " to the result set."); num++; } } // Invoke the pattern matching // method on each file. /* (non-Javadoc) * @see java.nio.file.SimpleFileVisitor#visitFile(java.lang.Object, java.nio.file.attribute.BasicFileAttributes) */ @Override public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) { find(file); return FileVisitResult.CONTINUE; } // Invoke the pattern matching // method on each directory. /* (non-Javadoc) * @see java.nio.file.SimpleFileVisitor#preVisitDirectory(java.lang.Object, java.nio.file.attribute.BasicFileAttributes) */ @Override public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs) { find(dir); return FileVisitResult.CONTINUE; } /* (non-Javadoc) * @see java.nio.file.SimpleFileVisitor#visitFileFailed(java.lang.Object, java.io.IOException) */ @Override public FileVisitResult visitFileFailed(Path file, IOException exc) { logger.warn(String.format("Failed to include file '%s'.", file.toString())); return FileVisitResult.CONTINUE; } /** * Gets the count. * * @return the count */ public long getCount() { return num; } /** * Gets the total. * * @return the total */ public long getTotal() { return total; } /** * Get result list */ public List getResult() { return list; } }