NIHVIVO-813 the file storage system will delete any parent directories that become empty as a result of deleting a file.
This commit is contained in:
parent
107162012a
commit
7263b11672
1 changed files with 50 additions and 0 deletions
|
@ -285,6 +285,11 @@ public class FileStorageImpl implements FileStorage {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
|
*
|
||||||
|
* <p>
|
||||||
|
* If deleting this file leaves its parent directory empty, that directory
|
||||||
|
* will be deleted. This repeats, up to (but not including) the root
|
||||||
|
* directory.
|
||||||
*/
|
*/
|
||||||
@Override
|
@Override
|
||||||
public boolean deleteFile(String id) throws IOException {
|
public boolean deleteFile(String id) throws IOException {
|
||||||
|
@ -302,9 +307,54 @@ public class FileStorageImpl implements FileStorage {
|
||||||
+ "', file location '" + file + "'");
|
+ "', file location '" + file + "'");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
deleteEmptyParents(file);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* We have deleted this file. If the parent directory is now empty, delete
|
||||||
|
* it. Then check its parent in turn. This continues until we find a parent
|
||||||
|
* that we will not delete, either because it is not empty, or because it is
|
||||||
|
* the file storage root.
|
||||||
|
*/
|
||||||
|
private void deleteEmptyParents(File file) {
|
||||||
|
File parent = file.getParentFile();
|
||||||
|
if (parent == null) {
|
||||||
|
log.warn("This is crazy. How can file '" + file.getAbsolutePath()
|
||||||
|
+ "' have no parent?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parent.equals(rootDir)) {
|
||||||
|
log.trace("Not deleting the root directory.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File[] children = parent.listFiles();
|
||||||
|
if (children == null) {
|
||||||
|
log.warn("This is crazy. How can file '" + parent.getAbsolutePath()
|
||||||
|
+ "' not be a directory?");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (children.length > 0) {
|
||||||
|
log.trace("Directory '" + parent.getAbsolutePath()
|
||||||
|
+ "' is not empty. Not deleting.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
log.trace("Deleting empty directory '" + parent.getAbsolutePath() + "'");
|
||||||
|
parent.delete();
|
||||||
|
if (parent.exists()) {
|
||||||
|
log.warn("Failed to delete directory '" + parent.getAbsolutePath()
|
||||||
|
+ "'");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
deleteEmptyParents(parent);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* {@inheritDoc}
|
* {@inheritDoc}
|
||||||
* <p>
|
* <p>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue