+ private static final long serialVersionUID = 3526489102725366334L;
+
+ private final HashMap<String, AbstractFile> fileNameToFileMap = new HashMap<>();
+
+ public transient boolean changed;
+
+ /**
+ * Performs cleanup of directory model. In particular removes metadata for
+ * images that no longer exist in the filesystem.
+ */
+ public void cleanup() {
+ final Iterator<AbstractFile> fileIterator = fileNameToFileMap.values()
+ .iterator();
+
+ while (fileIterator.hasNext()) {
+ final AbstractFile file = fileIterator.next();
+
+ if (!file.isMetadataVerified())
+ fileIterator.remove();
+ }
+ }
+
+ public void ensureFileMetadataIsUpToDate(final File parentDirectory,
+ final File file) throws Exception {
+
+ final String fileName = file.getName();
+
+ if (fileNameToFileMap.containsKey(fileName)) {
+ final boolean metadataUpdated = fileNameToFileMap.get(fileName)
+ .ensureFileMetadataIsUpToDate(parentDirectory);