/*
* 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.isis.core.unittestsupport.files;
import java.io.File;
import java.io.FileFilter;
import java.io.FilenameFilter;
public final class Files {
Files() {
}
// /////////////////////////////////////////////////////
// delete files
// /////////////////////////////////////////////////////
public enum Recursion {
DO_RECURSE, DONT_RECURSE
}
/**
*
* @param directoryName
* directory to start deleting from
* @param filePrefix
* file name prefix (no wild cards)
* @param recursion
*/
public static void deleteFilesWithPrefix(final String directoryName, final String filePrefix, Recursion recursion) {
deleteFiles(directoryName, filterFileNamePrefix(filePrefix), recursion);
}
public static void deleteFiles(final String directoryName, final String fileExtension, Recursion recursion) {
deleteFiles(directoryName, filterFileNameExtension(fileExtension), recursion);
}
public static void deleteFiles(final File directory, final String fileExtension, Recursion recursion) {
deleteFiles(directory, filterFileNameExtension(fileExtension), recursion);
}
public static void deleteFiles(final String directoryName, final FilenameFilter filter, Recursion recursion) {
final File dir = new File(directoryName);
deleteFiles(dir, filter, recursion);
}
public static void deleteFiles(final File directory, final FilenameFilter filter, Recursion recursion) {
deleteFiles(directory, filter, recursion, new Deleter() {
@Override
public void deleteFile(File f) {
f.delete();
}
});
}
// introduced for testing of this utility class.
public interface Deleter {
void deleteFile(File f);
}
static void deleteFiles(final File directory, final FilenameFilter filter, Recursion recursion, Deleter deleter) {
try {
for (final File file : directory.listFiles(filter)) {
deleter.deleteFile(file);
}
} catch (NullPointerException e) {
}
if (recursion == Recursion.DO_RECURSE) {
try {
for (final File subdir : directory.listFiles(filterDirectory())) {
deleteFiles(subdir, filter, recursion, deleter);
}
} catch (NullPointerException e) {
}
}
}
// /////////////////////////////////////////////////////
// filters
// /////////////////////////////////////////////////////
public static FilenameFilter and(final FilenameFilter... filters) {
return new FilenameFilter() {
@Override
public boolean accept(File dir, String name) {
for (FilenameFilter filter : filters) {
if (!filter.accept(dir, name)) {
return false;
}
}
return true;
}
};
}
public static FilenameFilter filterFileNameExtension(final String fileExtension) {
return new FilenameFilter() {
@Override
public boolean accept(final File arg0, final String arg1) {
return arg1.endsWith(fileExtension);
}
};
}
public static FilenameFilter filterFileNamePrefix(final String filePrefix) {
return new FilenameFilter() {
@Override
public boolean accept(final File arg0, final String arg1) {
return arg1.startsWith(filePrefix);
}
};
}
public static FileFilter filterDirectory() {
return new FileFilter() {
@Override
public boolean accept(File arg0) {
return arg0.isDirectory();
}
};
}
}