[nifi] Git Push Summary

2018-07-13 Thread alopresto
Repository: nifi
Updated Tags:  refs/tags/nifi-1.7.1-RC1 [created] 411983dba


nifi git commit: NIFI-5426: Use NIO.2 API for ListFile

2018-07-13 Thread markap14
Repository: nifi
Updated Branches:
  refs/heads/master ffbff4242 -> 31bb89514


NIFI-5426: Use NIO.2 API for ListFile


Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/31bb8951
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/31bb8951
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/31bb8951

Branch: refs/heads/master
Commit: 31bb89514cfa0e5df9db578387d566c7b5117c45
Parents: ffbff42
Author: Marco Gaido 
Authored: Fri Jul 13 16:00:02 2018 +0200
Committer: Mark Payne 
Committed: Fri Jul 13 13:54:27 2018 -0400

--
 .../nifi/processors/standard/ListFile.java  | 128 +--
 .../standard/util/FileInfoFilter.java   |  36 --
 2 files changed, 62 insertions(+), 102 deletions(-)
--


http://git-wip-us.apache.org/repos/asf/nifi/blob/31bb8951/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
--
diff --git 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
index d31fe2a..3923350 100644
--- 
a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
+++ 
b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/ListFile.java
@@ -39,11 +39,11 @@ import org.apache.nifi.processor.Relationship;
 import org.apache.nifi.processor.util.StandardValidators;
 import org.apache.nifi.processor.util.list.AbstractListProcessor;
 import org.apache.nifi.processors.standard.util.FileInfo;
-import org.apache.nifi.processors.standard.util.FileInfoFilter;
 
 import java.io.File;
 import java.io.IOException;
 import java.nio.file.FileStore;
+import java.nio.file.FileVisitOption;
 import java.nio.file.Files;
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -65,7 +65,10 @@ import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.BiPredicate;
 import java.util.regex.Pattern;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
 
 @TriggerSerially
 @InputRequirement(Requirement.INPUT_FORBIDDEN)
@@ -198,9 +201,9 @@ public class ListFile extends 
AbstractListProcessor {
 
 private List properties;
 private Set relationships;
-private final AtomicReference fileFilterRef = new 
AtomicReference<>();
 
 private volatile boolean includeFileAttributes;
+private final AtomicReference> 
fileFilterRef = new AtomicReference>();
 
 public static final String FILE_CREATION_TIME_ATTRIBUTE = 
"file.creationTime";
 public static final String FILE_LAST_MODIFY_TIME_ATTRIBUTE = 
"file.lastModifiedTime";
@@ -328,9 +331,36 @@ public class ListFile extends 
AbstractListProcessor {
 
 @Override
 protected List performListing(final ProcessContext context, 
final Long minTimestamp) throws IOException {
-final File path = new File(getPath(context));
+final Path path = new File(getPath(context)).toPath();
 final Boolean recurse = context.getProperty(RECURSE).asBoolean();
-return scanDirectory(path, fileFilterRef.get(), recurse, minTimestamp);
+final Map lastModifiedMap = new HashMap<>();
+
+final BiPredicate fileFilter = 
fileFilterRef.get();
+int maxDepth = recurse ? Integer.MAX_VALUE : 1;
+BiPredicate matcher = (p, attributes) -> {
+if (!attributes.isDirectory()
+&& (minTimestamp == null || 
attributes.lastModifiedTime().toMillis() >= minTimestamp)
+&& fileFilter.test(p, attributes)) {
+// We store the attributes for each Path we are returning in 
order to avoid to
+// retrieve them again later when creating the FileInfo
+lastModifiedMap.put(p, attributes);
+return true;
+}
+return false;
+};
+Stream inputStream = Files.find(path, maxDepth, matcher, 
FileVisitOption.FOLLOW_LINKS);
+Stream listing = inputStream.map(p -> {
+File file = p.toFile();
+BasicFileAttributes attributes = lastModifiedMap.get(p);
+return new FileInfo.Builder()
+.directory(false)
+.filename(file.getName())
+.fullPathFileName(file.getAbsolutePath())
+.lastModifiedTime(attributes.lastModifiedTime().toMillis())
+.size(attributes.size())
+.build();
+});
+