You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by us...@apache.org on 2012/07/28 21:23:45 UTC

svn commit: r1366748 - in /lucene/dev/trunk/lucene/analysis: common/src/java/org/apache/lucene/analysis/util/ common/src/test/org/apache/lucene/analysis/commongrams/ common/src/test/org/apache/lucene/analysis/compound/ common/src/test/org/apache/lucene...

Author: uschindler
Date: Sat Jul 28 19:23:44 2012
New Revision: 1366748

URL: http://svn.apache.org/viewvc?rev=1366748&view=rev
Log:
LUCENE-4268: Rename ResourceAsStreamReasourceLoader to ClasspathResourceLoader, provide FilesystemResourceLoader, bug fixing

Added:
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java
      - copied, changed from r1366633, lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/FilesystemResourceLoader.java   (with props)
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/TestFilesystemResourceLoader.java   (with props)
Removed:
    lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java
Modified:
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java
    lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java
    lucene/dev/trunk/lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java

Copied: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java (from r1366633, lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java)
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java?p2=lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java&p1=lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java&r1=1366633&r2=1366748&rev=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java Sat Jul 28 19:23:44 2012
@@ -21,28 +21,60 @@ import java.io.IOException;
 import java.io.InputStream;
 
 /**
- * Simple ResourceLoader that uses Class.getResourceAsStream
- * and Class.forName to open resources and classes, respectively.
+ * Simple {@link ResourceLoader} that uses {@link ClassLoader#getResourceAsStream(String)}
+ * and {@link Class#forName(String,boolean,ClassLoader)} to open resources and
+ * classes, respectively.
  */
-public class ResourceAsStreamResourceLoader implements ResourceLoader {
+public final class ClasspathResourceLoader implements ResourceLoader {
   private final Class<?> clazz;
+  private final ClassLoader loader;
   
-  public ResourceAsStreamResourceLoader(Class<?> clazz) {
+  /**
+   * Creates an instance using the context classloader to load Resources and classes.
+   * Resource paths must be absolute.
+   */
+  public ClasspathResourceLoader() {
+    this(Thread.currentThread().getContextClassLoader());
+  }
+
+  /**
+   * Creates an instance using the given classloader to load Resources and classes.
+   * Resource paths must be absolute.
+   */
+  public ClasspathResourceLoader(ClassLoader loader) {
+    this(null, loader);
+  }
+
+  /**
+   * Creates an instance using the context classloader to load Resources and classes
+   * Resources are resolved relative to the given class, if path is not absolute.
+   */
+  public ClasspathResourceLoader(Class<?> clazz) {
+    this(clazz, clazz.getClassLoader());
+  }
+
+  private ClasspathResourceLoader(Class<?> clazz, ClassLoader loader) {
     this.clazz = clazz;
+    this.loader = loader;
   }
 
   @Override
   public InputStream openResource(String resource) throws IOException {
-    return clazz.getResourceAsStream(resource);
+    final InputStream stream = (clazz != null) ?
+      clazz.getResourceAsStream(resource) :
+      loader.getResourceAsStream(resource);
+    if (stream == null)
+      throw new IOException("Resource not found: " + resource);
+    return stream;
   }
 
   @Override
   public <T> T newInstance(String cname, Class<T> expectedType) {
     try {
-      Class<? extends T> clazz = Class.forName(cname).asSubclass(expectedType);
+      final Class<? extends T> clazz = Class.forName(cname, true, loader).asSubclass(expectedType);
       return clazz.newInstance();
     } catch (Exception e) {
-      throw new RuntimeException(e);
+      throw new RuntimeException("Cannot instantiate class: " + cname, e);
     }
   }
 }

Added: lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/FilesystemResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/FilesystemResourceLoader.java?rev=1366748&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/FilesystemResourceLoader.java (added)
+++ lucene/dev/trunk/lucene/analysis/common/src/java/org/apache/lucene/analysis/util/FilesystemResourceLoader.java Sat Jul 28 19:23:44 2012
@@ -0,0 +1,94 @@
+package org.apache.lucene.analysis.util;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.io.InputStream;
+
+/**
+ * Simple {@link ResourceLoader} that opens resource files
+ * from the local file system, optionally resolving against
+ * a base directory.
+ * 
+ * <p>This loader wraps a delegate {@link ResourceLoader}
+ * that is used to resolve all files, the current base directory
+ * does not contain. {@link #newInstance} is always resolved
+ * against the delegate, as a {@link ClassLoader} is needed.
+ * 
+ * <p>You can chain several {@code FilesystemResourceLoader}s
+ * to allow lookup of files in more than one base directory.
+ */
+public final class FilesystemResourceLoader implements ResourceLoader {
+  private final File baseDirectory;
+  private final ResourceLoader delegate;
+  
+  /**
+   * Creates a resource loader that requires absolute filenames or relative to CWD
+   * to resolve resources. Files not found in file system and class lookups
+   * are delegated to context classloader.
+   */
+  public FilesystemResourceLoader() {
+    this((File) null);
+  }
+
+  /**
+   * Creates a resource loader that resolves resources against the given
+   * base directory (may be {@code null} to refer to CWD).
+   * Files not found in file system and class lookups are delegated to context
+   * classloader.
+   */
+  public FilesystemResourceLoader(File baseDirectory) {
+    this(baseDirectory, new ClasspathResourceLoader());
+  }
+
+  /**
+   * Creates a resource loader that resolves resources against the given
+   * base directory (may be {@code null} to refer to CWD).
+   * Files not found in file system and class lookups are delegated
+   * to the given delegate {@link ResourceLoader}.
+   */
+  public FilesystemResourceLoader(File baseDirectory, ResourceLoader delegate) {
+    if (baseDirectory != null && !baseDirectory.isDirectory())
+      throw new IllegalArgumentException("baseDirectory is not a directory or null");
+    if (delegate == null)
+      throw new IllegalArgumentException("delegate ResourceLoader may not be null");
+    this.baseDirectory = baseDirectory;
+    this.delegate = delegate;
+  }
+
+  @Override
+  public InputStream openResource(String resource) throws IOException {
+    try {
+      File file = new File (resource);
+      if (baseDirectory != null && !file.isAbsolute()) {
+        file = new File(baseDirectory, resource);
+      }
+      return new FileInputStream(file);
+    } catch (FileNotFoundException fnfe) {
+      return delegate.openResource(resource);
+    }
+  }
+
+  @Override
+  public <T> T newInstance(String cname, Class<T> expectedType) {
+    return delegate.newInstance(cname, expectedType);
+  }
+}

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -23,7 +23,7 @@ import org.apache.lucene.analysis.TokenS
 import org.apache.lucene.analysis.Tokenizer;
 import org.apache.lucene.analysis.core.TestStopFilter;
 import org.apache.lucene.analysis.util.CharArraySet;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 import java.io.StringReader;
@@ -39,7 +39,7 @@ import java.util.HashMap;
 public class TestCommonGramsFilterFactory extends BaseTokenStreamTestCase {
 
   public void testInform() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(TestStopFilter.class);
+    ResourceLoader loader = new ClasspathResourceLoader(TestStopFilter.class);
     assertTrue("loader is null and it shouldn't be", loader != null);
     CommonGramsFilterFactory factory = new CommonGramsFilterFactory();
     Map<String, String> args = new HashMap<String, String>();
@@ -89,7 +89,7 @@ public class TestCommonGramsFilterFactor
    * If no words are provided, then a set of english default stopwords is used.
    */
   public void testDefaults() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(TestStopFilter.class);
+    ResourceLoader loader = new ClasspathResourceLoader(TestStopFilter.class);
     assertTrue("loader is null and it shouldn't be", loader != null);
     CommonGramsFilterFactory factory = new CommonGramsFilterFactory();
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -23,7 +23,7 @@ import org.apache.lucene.analysis.TokenS
 import org.apache.lucene.analysis.Tokenizer;
 import org.apache.lucene.analysis.core.TestStopFilter;
 import org.apache.lucene.analysis.util.CharArraySet;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 import java.io.StringReader;
@@ -39,7 +39,7 @@ import java.util.HashMap;
 public class TestCommonGramsQueryFilterFactory extends BaseTokenStreamTestCase {
 
   public void testInform() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(TestStopFilter.class);
+    ResourceLoader loader = new ClasspathResourceLoader(TestStopFilter.class);
     assertTrue("loader is null and it shouldn't be", loader != null);
     CommonGramsQueryFilterFactory factory = new CommonGramsQueryFilterFactory();
     Map<String, String> args = new HashMap<String, String>();
@@ -89,7 +89,7 @@ public class TestCommonGramsQueryFilterF
    * If no words are provided, then a set of english default stopwords is used.
    */
   public void testDefaults() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(TestStopFilter.class);
+    ResourceLoader loader = new ClasspathResourceLoader(TestStopFilter.class);
     assertTrue("loader is null and it shouldn't be", loader != null);
     CommonGramsQueryFilterFactory factory = new CommonGramsQueryFilterFactory();
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -26,7 +26,7 @@ import org.apache.lucene.analysis.BaseTo
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.Tokenizer;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 /**
@@ -40,7 +40,7 @@ public class TestDictionaryCompoundWordT
     Reader reader = new StringReader("I like to play softball");
     Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
     DictionaryCompoundWordTokenFilterFactory factory = new DictionaryCompoundWordTokenFilterFactory();
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     Map<String,String> args = new HashMap<String,String>();
     args.put("dictionary", "compoundDictionary.txt");
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -26,7 +26,7 @@ import org.apache.lucene.analysis.BaseTo
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.Tokenizer;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 /**
@@ -40,7 +40,7 @@ public class TestHyphenationCompoundWord
     Reader reader = new StringReader("min veninde som er lidt af en læsehest");
     Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
     HyphenationCompoundWordTokenFilterFactory factory = new HyphenationCompoundWordTokenFilterFactory();
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     Map<String,String> args = new HashMap<String,String>();
     args.put("hyphenator", "da_UTF8.xml");
     args.put("dictionary", "da_compoundDictionary.txt");
@@ -64,7 +64,7 @@ public class TestHyphenationCompoundWord
     Reader reader = new StringReader("basketballkurv");
     Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
     HyphenationCompoundWordTokenFilterFactory factory = new HyphenationCompoundWordTokenFilterFactory();
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     Map<String,String> args = new HashMap<String,String>();
     args.put("hyphenator", "da_UTF8.xml");
     args.put("minSubwordSize", "2");

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -19,7 +19,7 @@ package org.apache.lucene.analysis.core;
 
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.util.CharArraySet;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 import java.util.Map;
@@ -32,7 +32,7 @@ import java.util.HashMap;
 public class TestStopFilterFactory extends BaseTokenStreamTestCase {
 
   public void testInform() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     assertTrue("loader is null and it shouldn't be", loader != null);
     StopFilterFactory factory = new StopFilterFactory();
     Map<String, String> args = new HashMap<String, String>();

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -19,7 +19,7 @@ package org.apache.lucene.analysis.core;
 
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.NumericTokenStream;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 import org.junit.Test;
 
@@ -34,7 +34,7 @@ public class TestTypeTokenFilterFactory 
 
   @Test
   public void testInform() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     TypeTokenFilterFactory factory = new TypeTokenFilterFactory();
     Map<String, String> args = new HashMap<String, String>();
     args.put("types", "stoptypes-1.txt");
@@ -94,7 +94,7 @@ public class TestTypeTokenFilterFactory 
       args.put("enablePositionIncrements", "false");
       typeTokenFilterFactory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
       typeTokenFilterFactory.init(args);
-      typeTokenFilterFactory.inform(new ResourceAsStreamResourceLoader(getClass()));
+      typeTokenFilterFactory.inform(new ClasspathResourceLoader(getClass()));
       fail("not supplying 'types' parameter should cause an IllegalArgumentException");
     } catch (IllegalArgumentException e) {
       // everything ok

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -27,7 +27,7 @@ import org.apache.lucene.analysis.BaseTo
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.Tokenizer;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 /**
@@ -42,7 +42,7 @@ public class TestElisionFilterFactory ex
     Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
     ElisionFilterFactory factory = new ElisionFilterFactory();
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     Map<String,String> args = new HashMap<String,String>();
     args.put("articles", "frenchArticles.txt");
     factory.init(args);
@@ -61,7 +61,7 @@ public class TestElisionFilterFactory ex
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
     Map<String, String> args = Collections.emptyMap();
     factory.init(args);
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     factory.inform(loader);
     TokenStream stream = factory.create(tokenizer);
     assertTokenStreamContents(stream, new String[] { "avion" });
@@ -75,7 +75,7 @@ public class TestElisionFilterFactory ex
     Tokenizer tokenizer = new MockTokenizer(reader, MockTokenizer.WHITESPACE, false);
     ElisionFilterFactory factory = new ElisionFilterFactory();
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     Map<String,String> args = new HashMap<String,String>();
     args.put("articles", "frenchArticles.txt");
     args.put("ignoreCase", "true");

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -25,7 +25,7 @@ import java.util.Map;
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 
 /**
  * Simple tests to ensure the Hunspell stemmer loads from factory
@@ -38,7 +38,7 @@ public class TestHunspellStemFilterFacto
     args.put("affix", "test.aff");
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
     factory.init(args);
-    factory.inform(new ResourceAsStreamResourceLoader(getClass()));
+    factory.inform(new ClasspathResourceLoader(getClass()));
     
     Reader reader = new StringReader("abc");
     TokenStream stream = factory.create(new MockTokenizer(reader, MockTokenizer.WHITESPACE, false));

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -19,7 +19,7 @@ package org.apache.lucene.analysis.misce
 
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.util.CharArraySet;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.ResourceLoader;
 
 import java.util.Map;
@@ -32,7 +32,7 @@ import java.util.HashMap;
 public class TestKeepFilterFactory extends BaseTokenStreamTestCase {
 
   public void testInform() throws Exception {
-    ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass());
+    ResourceLoader loader = new ClasspathResourceLoader(getClass());
     assertTrue("loader is null and it shouldn't be", loader != null);
     KeepWordFilterFactory factory = new KeepWordFilterFactory();
     Map<String, String> args = new HashMap<String, String>();

Modified: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -25,7 +25,7 @@ import org.apache.lucene.analysis.BaseTo
 import org.apache.lucene.analysis.MockTokenizer;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.synonym.SynonymFilter;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 import org.apache.lucene.analysis.util.StringMockResourceLoader;
 
 public class TestSynonymFilterFactory extends BaseTokenStreamTestCase {
@@ -36,7 +36,7 @@ public class TestSynonymFilterFactory ex
     args.put("synonyms", "synonyms.txt");
     factory.setLuceneMatchVersion(TEST_VERSION_CURRENT);
     factory.init(args);
-    factory.inform(new ResourceAsStreamResourceLoader(getClass()));
+    factory.inform(new ClasspathResourceLoader(getClass()));
     TokenStream ts = factory.create(new MockTokenizer(new StringReader("GB"), MockTokenizer.WHITESPACE, false));
     assertTrue(ts instanceof SynonymFilter);
     assertTokenStreamContents(ts, 

Added: lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/TestFilesystemResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/TestFilesystemResourceLoader.java?rev=1366748&view=auto
==============================================================================
--- lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/TestFilesystemResourceLoader.java (added)
+++ lucene/dev/trunk/lucene/analysis/common/src/test/org/apache/lucene/analysis/util/TestFilesystemResourceLoader.java Sat Jul 28 19:23:44 2012
@@ -0,0 +1,98 @@
+package org.apache.lucene.analysis.util;
+
+/*
+ * 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.
+ */
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
+
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.LuceneTestCase;
+import org.apache.lucene.util._TestUtil;
+
+public class TestFilesystemResourceLoader extends LuceneTestCase {
+  
+  private void assertNotFound(ResourceLoader rl) throws Exception {
+    try {
+      IOUtils.closeWhileHandlingException(rl.openResource("/this-directory-really-really-really-should-not-exist/foo/bar.txt"));
+      fail("The resource does not exist, should fail!");
+    } catch (IOException ioe) {
+      // pass
+    }
+    try {
+      rl.newInstance("org.apache.lucene.analysis.FooBarFilterFactory", TokenFilterFactory.class);
+      fail("The class does not exist, should fail!");
+    } catch (RuntimeException iae) {
+      // pass
+    }
+  }
+  
+  private void assertClasspathDelegation(ResourceLoader rl) throws Exception {
+    // try a stopwords file from classpath
+    CharArraySet set = WordlistLoader.getSnowballWordSet(
+      new InputStreamReader(rl.openResource("org/apache/lucene/analysis/snowball/english_stop.txt"), IOUtils.CHARSET_UTF_8),
+      TEST_VERSION_CURRENT
+    );
+    assertTrue(set.contains("you"));
+    // try to load a class; we use string comparison because classloader may be different...
+    assertEquals("org.apache.lucene.analysis.en.KStemFilterFactory",
+        rl.newInstance("org.apache.lucene.analysis.en.KStemFilterFactory", TokenFilterFactory.class).getClass().getName());
+    // theoretically classes should also be loadable:
+    IOUtils.closeWhileHandlingException(rl.openResource("java/lang/String.class"));
+  }
+  
+  public void testBaseDir() throws Exception {
+    final File base = _TestUtil.getTempDir("fsResourceLoaderBase");
+    try {
+      base.mkdirs();
+      Writer os = new OutputStreamWriter(new FileOutputStream(new File(base, "template.txt")), IOUtils.CHARSET_UTF_8);
+      try {
+        os.write("foobar\n");
+      } finally {
+        IOUtils.closeWhileHandlingException(os);
+      }
+      
+      ResourceLoader rl = new FilesystemResourceLoader(base);
+      assertEquals("foobar", WordlistLoader.getLines(rl.openResource("template.txt"), IOUtils.CHARSET_UTF_8).get(0));
+      // Same with full path name:
+      String fullPath = new File(base, "template.txt").toString();
+      assertEquals("foobar",
+          WordlistLoader.getLines(rl.openResource(fullPath), IOUtils.CHARSET_UTF_8).get(0));
+      assertClasspathDelegation(rl);
+      assertNotFound(rl);
+      
+      // now use RL without base dir:
+      rl = new FilesystemResourceLoader();
+      assertEquals("foobar",
+          WordlistLoader.getLines(rl.openResource(new File(base, "template.txt").toString()), IOUtils.CHARSET_UTF_8).get(0));
+      assertClasspathDelegation(rl);
+      assertNotFound(rl);
+    } finally {
+      _TestUtil.rmDir(base);
+    }
+  }
+  
+  public void testDelegation() throws Exception {
+    ResourceLoader rl = new FilesystemResourceLoader(null, new StringMockResourceLoader("foobar\n"));
+    assertEquals("foobar", WordlistLoader.getLines(rl.openResource("template.txt"), IOUtils.CHARSET_UTF_8).get(0));
+  }
+  
+}

Modified: lucene/dev/trunk/lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java?rev=1366748&r1=1366747&r2=1366748&view=diff
==============================================================================
--- lucene/dev/trunk/lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java (original)
+++ lucene/dev/trunk/lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java Sat Jul 28 19:23:44 2012
@@ -22,7 +22,7 @@ import java.io.StringReader;
 import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.analysis.TokenStream;
 import org.apache.lucene.analysis.core.WhitespaceTokenizer;
-import org.apache.lucene.analysis.util.ResourceAsStreamResourceLoader;
+import org.apache.lucene.analysis.util.ClasspathResourceLoader;
 
 /**
  * Tests for {@link StempelPolishStemFilterFactory}
@@ -31,7 +31,7 @@ public class TestStempelPolishStemFilter
   public void testBasics() throws Exception {
     StringReader document = new StringReader("studenta studenci");
     StempelPolishStemFilterFactory factory = new StempelPolishStemFilterFactory();
-    factory.inform(new ResourceAsStreamResourceLoader(getClass()));
+    factory.inform(new ClasspathResourceLoader(getClass()));
     TokenStream ts = factory.create(new WhitespaceTokenizer(TEST_VERSION_CURRENT, document));
     assertTokenStreamContents(ts,
         new String[] { "student", "student" });