You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by pv...@apache.org on 2018/06/06 08:11:44 UTC
nifi git commit: NIFI-5262 - Retrieve file attributes only once in
ListFile
Repository: nifi
Updated Branches:
refs/heads/master c3af53ce6 -> eedf1237a
NIFI-5262 - Retrieve file attributes only once in ListFile
Signed-off-by: Pierre Villard <pi...@gmail.com>
This closes #2754.
Project: http://git-wip-us.apache.org/repos/asf/nifi/repo
Commit: http://git-wip-us.apache.org/repos/asf/nifi/commit/eedf1237
Tree: http://git-wip-us.apache.org/repos/asf/nifi/tree/eedf1237
Diff: http://git-wip-us.apache.org/repos/asf/nifi/diff/eedf1237
Branch: refs/heads/master
Commit: eedf1237a1d94b9d23ad494ce82ffc13eb9f1476
Parents: c3af53c
Author: Marco Gaido <ma...@gmail.com>
Authored: Mon Jun 4 13:16:49 2018 +0200
Committer: Pierre Villard <pi...@gmail.com>
Committed: Wed Jun 6 10:10:29 2018 +0200
----------------------------------------------------------------------
.../nifi/processors/standard/ListFile.java | 36 +++++++++++---------
.../standard/util/FileInfoFilter.java | 36 ++++++++++++++++++++
2 files changed, 55 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/nifi/blob/eedf1237/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 915e911..d31fe2a 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,9 +39,9 @@ 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.FileFilter;
import java.io.IOException;
import java.nio.file.FileStore;
import java.nio.file.Files;
@@ -198,7 +198,7 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
private List<PropertyDescriptor> properties;
private Set<Relationship> relationships;
- private final AtomicReference<FileFilter> fileFilterRef = new AtomicReference<>();
+ private final AtomicReference<FileInfoFilter> fileFilterRef = new AtomicReference<>();
private volatile boolean includeFileAttributes;
@@ -346,7 +346,7 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
|| IGNORE_HIDDEN_FILES.equals(property);
}
- private List<FileInfo> scanDirectory(final File path, final FileFilter filter, final Boolean recurse,
+ private List<FileInfo> scanDirectory(final File path, final FileInfoFilter filter, final Boolean recurse,
final Long minTimestamp) throws IOException {
final List<FileInfo> listing = new ArrayList<>();
File[] files = path.listFiles();
@@ -357,14 +357,16 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
listing.addAll(scanDirectory(file, filter, true, minTimestamp));
}
} else {
- if ((minTimestamp == null || file.lastModified() >= minTimestamp) && filter.accept(file)) {
- listing.add(new FileInfo.Builder()
- .directory(file.isDirectory())
- .filename(file.getName())
- .fullPathFileName(file.getAbsolutePath())
- .size(file.length())
- .lastModifiedTime(file.lastModified())
- .build());
+ FileInfo fileInfo = new FileInfo.Builder()
+ .directory(false)
+ .filename(file.getName())
+ .fullPathFileName(file.getAbsolutePath())
+ .size(file.length())
+ .lastModifiedTime(file.lastModified())
+ .build();
+ if ((minTimestamp == null || fileInfo.getLastModifiedTime() >= minTimestamp)
+ && filter.accept(file, fileInfo)) {
+ listing.add(fileInfo);
}
}
}
@@ -373,7 +375,7 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
return listing;
}
- private FileFilter createFileFilter(final ProcessContext context) {
+ private FileInfoFilter createFileFilter(final ProcessContext context) {
final long minSize = context.getProperty(MIN_SIZE).asDataSize(DataUnit.B).longValue();
final Double maxSize = context.getProperty(MAX_SIZE).asDataSize(DataUnit.B);
final long minAge = context.getProperty(MIN_AGE).asTimePeriod(TimeUnit.MILLISECONDS);
@@ -385,16 +387,16 @@ public class ListFile extends AbstractListProcessor<FileInfo> {
final String pathPatternStr = context.getProperty(PATH_FILTER).getValue();
final Pattern pathPattern = (!recurseDirs || pathPatternStr == null) ? null : Pattern.compile(pathPatternStr);
- return new FileFilter() {
+ return new FileInfoFilter() {
@Override
- public boolean accept(final File file) {
- if (minSize > file.length()) {
+ public boolean accept(final File file, final FileInfo info) {
+ if (minSize > info.getSize()) {
return false;
}
- if (maxSize != null && maxSize < file.length()) {
+ if (maxSize != null && maxSize < info.getSize()) {
return false;
}
- final long fileAge = System.currentTimeMillis() - file.lastModified();
+ final long fileAge = System.currentTimeMillis() - info.getLastModifiedTime();
if (minAge > fileAge) {
return false;
}
http://git-wip-us.apache.org/repos/asf/nifi/blob/eedf1237/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FileInfoFilter.java
----------------------------------------------------------------------
diff --git a/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FileInfoFilter.java b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FileInfoFilter.java
new file mode 100644
index 0000000..7ee1430
--- /dev/null
+++ b/nifi-nar-bundles/nifi-standard-bundle/nifi-standard-processors/src/main/java/org/apache/nifi/processors/standard/util/FileInfoFilter.java
@@ -0,0 +1,36 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You 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 org.apache.nifi.processors.standard.util;
+
+import java.io.File;
+
+/**
+ * A filter for files.
+ */
+public interface FileInfoFilter {
+
+ /**
+ * Tests whether or not the specified file with its
+ * <code>{@link org.apache.nifi.processors.standard.util.FileInfo}</code> satisfies the
+ * requirements of this filter.
+ *
+ * @param file The file to be tested
+ * @param info Attributes and info about the file.
+ * @return <code>true</code> if and only if the <code>file</code> should be included
+ */
+ boolean accept(File file, FileInfo info);
+}