FELIX-1475: Add a file filter for a given watched directory
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@804095 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
index 0598413..9530d0f 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/DirectoryWatcher.java
@@ -57,11 +57,13 @@
public final static String POLL = "felix.fileinstall.poll";
public final static String DIR = "felix.fileinstall.dir";
public final static String DEBUG = "felix.fileinstall.debug";
+ public final static String FILTER = "felix.fileinstall.filter";
public final static String START_NEW_BUNDLES =
"felix.fileinstall.bundles.new.start";
File watchedDirectory;
long poll = 2000;
long debug;
+ String filter;
boolean startBundles = true; // by default, we start bundles.
BundleContext context;
boolean reported;
@@ -97,6 +99,8 @@
{
startBundles = "true".equalsIgnoreCase((String)value);
}
+
+ filter = (String) properties.get(FILTER);
}
/**
@@ -109,16 +113,32 @@
log("{" + POLL + " (ms) = " + poll + ", "
+ DIR + " = " + watchedDirectory.getAbsolutePath() + ", "
+ DEBUG + " = " + debug + ", "
+ + FILTER + " = " + filter + ", "
+ START_NEW_BUNDLES + " = " + startBundles + "}", null);
initializeCurrentManagedBundles();
Map currentManagedConfigs = new HashMap(); // location -> Long(time)
+
+ FilenameFilter flt;
+ if (filter != null)
+ {
+ flt = new FilenameFilter()
+ {
+ public boolean accept(File dir, String name) {
+ return name.matches(filter);
+ }
+ };
+ }
+ else
+ {
+ flt = null;
+ }
while (!interrupted())
{
try
{
Map/* <String, Jar> */ installed = new HashMap();
Set/* <String> */ configs = new HashSet();
- traverse(installed, configs, watchedDirectory);
+ traverse(installed, configs, watchedDirectory, flt);
doInstalled(installed);
doConfigs(currentManagedConfigs, configs);
Thread.sleep(poll);
@@ -464,14 +484,16 @@
* Returns the abspath -> file for found configurations
* @param jardir
* The directory to traverse
+ * @param filter
+ * A filter for file names
*/
- void traverse(Map/* <String, Jar> */ jars, Set configs, File jardir)
+ void traverse(Map/* <String, Jar> */ jars, Set configs, File jardir, FilenameFilter filter)
{
- String list[] = jardir.list();
+ String list[] = jardir.list(filter);
if (list == null)
{
prepareWatchedDir(jardir);
- list = jardir.list();
+ list = jardir.list(filter);
}
for (int i = 0; (list != null) && (i < list.length); i++)
{
diff --git a/fileinstall/src/main/java/org/apache/felix/fileinstall/FileInstall.java b/fileinstall/src/main/java/org/apache/felix/fileinstall/FileInstall.java
index 4713f3c..da31be4 100644
--- a/fileinstall/src/main/java/org/apache/felix/fileinstall/FileInstall.java
+++ b/fileinstall/src/main/java/org/apache/felix/fileinstall/FileInstall.java
@@ -58,6 +58,7 @@
set(ht, DirectoryWatcher.POLL);
set(ht, DirectoryWatcher.DIR);
set(ht, DirectoryWatcher.DEBUG);
+ set(ht, DirectoryWatcher.FILTER);
set(ht, DirectoryWatcher.START_NEW_BUNDLES);
updated("initial", ht);
}