/*
- * jSite - FileScanner.java - Copyright © 2006–2012 David Roden
+ * jSite - FileScanner.java - Copyright © 2006–2014 David Roden
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
+import java.util.Objects;
import java.util.logging.Level;
import java.util.logging.Logger;
private final static Logger logger = Logger.getLogger(FileScanner.class.getName());
/** The list of listeners. */
- private final List<FileScannerListener> fileScannerListeners = new ArrayList<FileScannerListener>();
+ private final FileScannerListener fileScannerListener;
/** The project to scan. */
private final Project project;
/** Wether there was an error. */
private boolean error = false;
+ /** The name of the last file scanned. */
+ private String lastFilename;
+
/**
* Creates a new file scanner for the given project.
*
* @param project
* The project whose files to scan
*/
- public FileScanner(Project project) {
+ public FileScanner(Project project, FileScannerListener fileScannerListener) {
this.project = project;
+ this.fileScannerListener = Objects.requireNonNull(fileScannerListener);
}
/**
- * Adds the given listener to the list of listeners.
+ * Returns the name of the last file scanned.
*
- * @param fileScannerListener
- * The listener to add
+ * @return The name of the last file scanned, or {@code null} if there was
+ * no file scanned yet
*/
- public void addFileScannerListener(FileScannerListener fileScannerListener) {
- fileScannerListeners.add(fileScannerListener);
+ public String getLastFilename() {
+ return lastFilename;
}
- /**
- * Removes the given listener from the list of listeners.
- *
- * @param fileScannerListener
- * The listener to remove
- */
- public void removeFileScannerListener(FileScannerListener fileScannerListener) {
- fileScannerListeners.remove(fileScannerListener);
- }
-
- /**
- * Notifies all listeners that the file scan finished.
- */
- protected void fireFileScannerFinished() {
- for (FileScannerListener fileScannerListener : new ArrayList<FileScannerListener>(fileScannerListeners)) {
- fileScannerListener.fileScannerFinished(this);
- }
+ public void startInBackground() {
+ new Thread(this).start();
}
/**
public void run() {
files = new ArrayList<ScannedFile>();
error = false;
+ lastFilename = null;
try {
scanFiles(new File(project.getLocalPath()), files);
Collections.sort(files);
} catch (IOException ioe1) {
error = true;
}
- fireFileScannerFinished();
+ fileScannerListener.fileScannerFinished(this);
}
/**
String filename = project.shortenFilename(file).replace('\\', '/');
String hash = hashFile(project.getLocalPath(), filename);
fileList.add(new ScannedFile(filename, hash));
+ lastFilename = filename;
}
}