Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java (revision 0) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java (working copy) @@ -0,0 +1,69 @@ +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.IOException; +import java.io.InputStream; + +/** + * Simple ResourceLoader that uses {@link ClassLoader#getResourceAsStream} + * and {@link Class#forName} to open resources and classes, respectively. + */ +public class ClasspathResourceLoader implements ResourceLoader { + private final Class clazz; + private final ClassLoader loader; + + /** + * Creates an instance using the context classloader to load Resources and classes. + * Resource paths must be absolute. + */ + public ClasspathResourceLoader() { + this(null); + } + + /** + * 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; + this.loader = (clazz != null) ? + clazz.getClassLoader() : + Thread.currentThread().getContextClassLoader(); + } + + @Override + public InputStream openResource(String resource) throws IOException { + 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 newInstance(String cname, Class expectedType) { + try { + final Class clazz = Class.forName(cname, true, loader).asSubclass(expectedType); + return clazz.newInstance(); + } catch (Exception e) { + throw new RuntimeException("Cannot instantiate class: " + cname, e); + } + } +} Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java (revision 1366633) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java (working copy) Property changes on: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ClasspathResourceLoader.java ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java =================================================================== --- lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java (revision 1366633) +++ lucene/analysis/common/src/java/org/apache/lucene/analysis/util/ResourceAsStreamResourceLoader.java (working copy) @@ -1,48 +0,0 @@ -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.IOException; -import java.io.InputStream; - -/** - * Simple ResourceLoader that uses Class.getResourceAsStream - * and Class.forName to open resources and classes, respectively. - */ -public class ResourceAsStreamResourceLoader implements ResourceLoader { - private final Class clazz; - - public ResourceAsStreamResourceLoader(Class clazz) { - this.clazz = clazz; - } - - @Override - public InputStream openResource(String resource) throws IOException { - return clazz.getResourceAsStream(resource); - } - - @Override - public T newInstance(String cname, Class expectedType) { - try { - Class clazz = Class.forName(cname).asSubclass(expectedType); - return clazz.newInstance(); - } catch (Exception e) { - throw new RuntimeException(e); - } - } -} Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsFilterFactory.java (working copy) @@ -23,7 +23,7 @@ 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 @@ 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 args = new HashMap(); @@ -89,7 +89,7 @@ * 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); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/commongrams/TestCommonGramsQueryFilterFactory.java (working copy) @@ -23,7 +23,7 @@ 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 @@ 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 args = new HashMap(); @@ -89,7 +89,7 @@ * 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); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestDictionaryCompoundWordTokenFilterFactory.java (working copy) @@ -26,7 +26,7 @@ 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 @@ 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 args = new HashMap(); args.put("dictionary", "compoundDictionary.txt"); factory.setLuceneMatchVersion(TEST_VERSION_CURRENT); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/compound/TestHyphenationCompoundWordTokenFilterFactory.java (working copy) @@ -26,7 +26,7 @@ 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 @@ 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 args = new HashMap(); args.put("hyphenator", "da_UTF8.xml"); args.put("dictionary", "da_compoundDictionary.txt"); @@ -64,7 +64,7 @@ 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 args = new HashMap(); args.put("hyphenator", "da_UTF8.xml"); args.put("minSubwordSize", "2"); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestStopFilterFactory.java (working copy) @@ -19,7 +19,7 @@ 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 @@ 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 args = new HashMap(); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/core/TestTypeTokenFilterFactory.java (working copy) @@ -19,7 +19,7 @@ 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 @@ @Test public void testInform() throws Exception { - ResourceLoader loader = new ResourceAsStreamResourceLoader(getClass()); + ResourceLoader loader = new ClasspathResourceLoader(getClass()); TypeTokenFilterFactory factory = new TypeTokenFilterFactory(); Map args = new HashMap(); args.put("types", "stoptypes-1.txt"); @@ -94,7 +94,7 @@ 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 Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/fr/TestElisionFilterFactory.java (working copy) @@ -27,7 +27,7 @@ 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 @@ 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 args = new HashMap(); args.put("articles", "frenchArticles.txt"); factory.init(args); @@ -61,7 +61,7 @@ factory.setLuceneMatchVersion(TEST_VERSION_CURRENT); Map 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 @@ 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 args = new HashMap(); args.put("articles", "frenchArticles.txt"); args.put("ignoreCase", "true"); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/hunspell/TestHunspellStemFilterFactory.java (working copy) @@ -25,7 +25,7 @@ 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 @@ 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)); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/miscellaneous/TestKeepFilterFactory.java (working copy) @@ -19,7 +19,7 @@ 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 @@ 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 args = new HashMap(); Index: lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java =================================================================== --- lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (revision 1366633) +++ lucene/analysis/common/src/test/org/apache/lucene/analysis/synonym/TestSynonymFilterFactory.java (working copy) @@ -25,7 +25,7 @@ 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 @@ 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, Index: lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java =================================================================== --- lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java (revision 1366633) +++ lucene/analysis/stempel/src/test/org/apache/lucene/analysis/stempel/TestStempelPolishStemFilterFactory.java (working copy) @@ -22,7 +22,7 @@ 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 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" });