You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-commits@lucene.apache.org by yo...@apache.org on 2008/11/11 03:35:52 UTC

svn commit: r712922 [9/9] - in /lucene/java/trunk: contrib/analyzers/src/java/org/apache/lucene/analysis/el/ contrib/analyzers/src/java/org/apache/lucene/analysis/fr/ contrib/analyzers/src/java/org/apache/lucene/analysis/miscellaneous/ contrib/analyzer...

Modified: lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/TermsQueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/TermsQueryBuilder.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/TermsQueryBuilder.java (original)
+++ lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/TermsQueryBuilder.java Mon Nov 10 18:35:46 2008
@@ -1,85 +1,85 @@
-package org.apache.lucene.xmlparser.builders;
-
-import java.io.IOException;
-import java.io.StringReader;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.Token;
-import org.apache.lucene.analysis.TokenStream;
-import org.apache.lucene.index.Term;
-import org.apache.lucene.search.BooleanClause;
-import org.apache.lucene.search.BooleanQuery;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.search.TermQuery;
-import org.apache.lucene.xmlparser.DOMUtils;
-import org.apache.lucene.xmlparser.ParserException;
-import org.apache.lucene.xmlparser.QueryBuilder;
-import org.w3c.dom.Element;
-
-/**
- * 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.
- */
-/**
- * Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer
- */
-public class TermsQueryBuilder implements QueryBuilder {
-
-	Analyzer analyzer;
-
-		
-	public TermsQueryBuilder(Analyzer analyzer)
-	{
-		this.analyzer = analyzer;
-	}
-
-
-
-	public Query getQuery(Element e) throws ParserException {
-		
-        String fieldName=DOMUtils.getAttributeWithInheritanceOrFail(e,"fieldName");
- 		String text=DOMUtils.getNonBlankTextOrFail(e);
- 		
-		BooleanQuery bq=new BooleanQuery(DOMUtils.getAttribute(e,"disableCoord",false));
-		bq.setMinimumNumberShouldMatch(DOMUtils.getAttribute(e,"minimumNumberShouldMatch",0));
-		TokenStream ts = analyzer.tokenStream(fieldName, new StringReader(text));
-		try
-		{
-                  final Token reusableToken = new Token();
-			Term term = null;
-	                for (Token nextToken = ts.next(reusableToken); nextToken != null; nextToken = ts.next(reusableToken)) {
-				if (term == null)
-				{
-					term = new Term(fieldName, nextToken.term());
-				} else
-				{
-//					 create from previous to save fieldName.intern overhead
-					term = term.createTerm(nextToken.term()); 
-				}
-				bq.add(new BooleanClause(new TermQuery(term),BooleanClause.Occur.SHOULD));
-			}
-		} 
-		catch (IOException ioe)
-		{
-			throw new RuntimeException("Error constructing terms from index:"
-					+ ioe);
-		}
-  		bq.setBoost(DOMUtils.getAttribute(e,"boost",1.0f));
-
-  		return bq;
-		
-	}
-
-}
+package org.apache.lucene.xmlparser.builders;
+
+import java.io.IOException;
+import java.io.StringReader;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.Token;
+import org.apache.lucene.analysis.TokenStream;
+import org.apache.lucene.index.Term;
+import org.apache.lucene.search.BooleanClause;
+import org.apache.lucene.search.BooleanQuery;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.search.TermQuery;
+import org.apache.lucene.xmlparser.DOMUtils;
+import org.apache.lucene.xmlparser.ParserException;
+import org.apache.lucene.xmlparser.QueryBuilder;
+import org.w3c.dom.Element;
+
+/**
+ * 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.
+ */
+/**
+ * Builds a BooleanQuery from all of the terms found in the XML element using the choice of analyzer
+ */
+public class TermsQueryBuilder implements QueryBuilder {
+
+	Analyzer analyzer;
+
+		
+	public TermsQueryBuilder(Analyzer analyzer)
+	{
+		this.analyzer = analyzer;
+	}
+
+
+
+	public Query getQuery(Element e) throws ParserException {
+		
+        String fieldName=DOMUtils.getAttributeWithInheritanceOrFail(e,"fieldName");
+ 		String text=DOMUtils.getNonBlankTextOrFail(e);
+ 		
+		BooleanQuery bq=new BooleanQuery(DOMUtils.getAttribute(e,"disableCoord",false));
+		bq.setMinimumNumberShouldMatch(DOMUtils.getAttribute(e,"minimumNumberShouldMatch",0));
+		TokenStream ts = analyzer.tokenStream(fieldName, new StringReader(text));
+		try
+		{
+                  final Token reusableToken = new Token();
+			Term term = null;
+	                for (Token nextToken = ts.next(reusableToken); nextToken != null; nextToken = ts.next(reusableToken)) {
+				if (term == null)
+				{
+					term = new Term(fieldName, nextToken.term());
+				} else
+				{
+//					 create from previous to save fieldName.intern overhead
+					term = term.createTerm(nextToken.term()); 
+				}
+				bq.add(new BooleanClause(new TermQuery(term),BooleanClause.Occur.SHOULD));
+			}
+		} 
+		catch (IOException ioe)
+		{
+			throw new RuntimeException("Error constructing terms from index:"
+					+ ioe);
+		}
+  		bq.setBoost(DOMUtils.getAttribute(e,"boost",1.0f));
+
+  		return bq;
+		
+	}
+
+}

Propchange: lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/TermsQueryBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/UserInputQueryBuilder.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/UserInputQueryBuilder.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/UserInputQueryBuilder.java (original)
+++ lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/UserInputQueryBuilder.java Mon Nov 10 18:35:46 2008
@@ -1,94 +1,94 @@
-package org.apache.lucene.xmlparser.builders;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.queryParser.ParseException;
-import org.apache.lucene.queryParser.QueryParser;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.xmlparser.DOMUtils;
-import org.apache.lucene.xmlparser.ParserException;
-import org.apache.lucene.xmlparser.QueryBuilder;
-import org.w3c.dom.Element;
-
-/**
- * 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.
- */
-
-/**
- * UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing:
- * 1) Synchronizing access to "parse" calls on a previously supplied QueryParser
- * or..
- * 2) creating a new QueryParser object for each parse request
- */
-public class UserInputQueryBuilder implements QueryBuilder {
-
-	QueryParser unSafeParser;
-	private Analyzer analyzer;
-	private String defaultField;
-	
-	/**
-	 * This constructor has the disadvantage of not being able to change choice of default field name
-	 * @param parser thread un-safe query parser
-	 */
-	public UserInputQueryBuilder(QueryParser parser) {
-		this.unSafeParser = parser;
-	}
-
-	public UserInputQueryBuilder(String defaultField, Analyzer analyzer) {
-		this.analyzer = analyzer;
-		this.defaultField = defaultField;
-	}
-	
-	/* (non-Javadoc)
-	 * @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element)
-	 */
-	public Query getQuery(Element e) throws ParserException {
-		String text=DOMUtils.getText(e);
-		try {
-			Query q = null;
-			if(unSafeParser!=null)
-			{
-				//synchronize on unsafe parser
-				synchronized (unSafeParser)
-				{
-					q = unSafeParser.parse(text);
-				}
-			}
-			else
-			{
-				String fieldName=DOMUtils.getAttribute(e, "fieldName", defaultField);
-				//Create new parser
-				QueryParser parser=createQueryParser(fieldName, analyzer);
-				q = parser.parse(text);				
-			}
-			q.setBoost(DOMUtils.getAttribute(e,"boost",1.0f));
-			return q;
-		} catch (ParseException e1) {
-			throw new ParserException(e1.getMessage());
-		}
-	}
-	
-	/**
-	 * Method to create a QueryParser - designed to be overridden
-	 * @param fieldName
-	 * @param analyzer
-	 * @return
-	 */
-	protected QueryParser createQueryParser(String fieldName, Analyzer analyzer)
-	{
-		return new QueryParser(fieldName,analyzer);
-	}
-
-}
+package org.apache.lucene.xmlparser.builders;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.queryParser.ParseException;
+import org.apache.lucene.queryParser.QueryParser;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.xmlparser.DOMUtils;
+import org.apache.lucene.xmlparser.ParserException;
+import org.apache.lucene.xmlparser.QueryBuilder;
+import org.w3c.dom.Element;
+
+/**
+ * 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.
+ */
+
+/**
+ * UserInputQueryBuilder uses 1 of 2 strategies for thread-safe parsing:
+ * 1) Synchronizing access to "parse" calls on a previously supplied QueryParser
+ * or..
+ * 2) creating a new QueryParser object for each parse request
+ */
+public class UserInputQueryBuilder implements QueryBuilder {
+
+	QueryParser unSafeParser;
+	private Analyzer analyzer;
+	private String defaultField;
+	
+	/**
+	 * This constructor has the disadvantage of not being able to change choice of default field name
+	 * @param parser thread un-safe query parser
+	 */
+	public UserInputQueryBuilder(QueryParser parser) {
+		this.unSafeParser = parser;
+	}
+
+	public UserInputQueryBuilder(String defaultField, Analyzer analyzer) {
+		this.analyzer = analyzer;
+		this.defaultField = defaultField;
+	}
+	
+	/* (non-Javadoc)
+	 * @see org.apache.lucene.xmlparser.QueryObjectBuilder#process(org.w3c.dom.Element)
+	 */
+	public Query getQuery(Element e) throws ParserException {
+		String text=DOMUtils.getText(e);
+		try {
+			Query q = null;
+			if(unSafeParser!=null)
+			{
+				//synchronize on unsafe parser
+				synchronized (unSafeParser)
+				{
+					q = unSafeParser.parse(text);
+				}
+			}
+			else
+			{
+				String fieldName=DOMUtils.getAttribute(e, "fieldName", defaultField);
+				//Create new parser
+				QueryParser parser=createQueryParser(fieldName, analyzer);
+				q = parser.parse(text);				
+			}
+			q.setBoost(DOMUtils.getAttribute(e,"boost",1.0f));
+			return q;
+		} catch (ParseException e1) {
+			throw new ParserException(e1.getMessage());
+		}
+	}
+	
+	/**
+	 * Method to create a QueryParser - designed to be overridden
+	 * @param fieldName
+	 * @param analyzer
+	 * @return
+	 */
+	protected QueryParser createQueryParser(String fieldName, Analyzer analyzer)
+	{
+		return new QueryParser(fieldName,analyzer);
+	}
+
+}

Propchange: lucene/java/trunk/contrib/xml-query-parser/src/java/org/apache/lucene/xmlparser/builders/UserInputQueryBuilder.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java (original)
+++ lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java Mon Nov 10 18:35:46 2008
@@ -1,215 +1,215 @@
-package org.apache.lucene.xmlparser;
-
-import java.io.BufferedReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-
-import junit.framework.TestCase;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexReader;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.RAMDirectory;
-/**
- * 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.
- */
-
-public class TestParser extends TestCase {
-
-	CoreParser builder;
-	static Directory dir;
-	Analyzer analyzer=new StandardAnalyzer();
-	IndexReader reader;
-	private IndexSearcher searcher;
-	
-	//CHANGE THIS TO SEE OUTPUT
-	boolean printResults=false;
-	
-	
-	/*
-	 * @see TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		//initialize the parser
-		builder=new CorePlusExtensionsParser("contents",analyzer);
-		
-		//initialize the index (done once, then cached in static data for use with ALL tests)		
-		if(dir==null)
-		{
-			BufferedReader d = new BufferedReader(new InputStreamReader(TestParser.class.getResourceAsStream("reuters21578.txt"))); 
-			dir=new RAMDirectory();
-			IndexWriter writer=new IndexWriter(dir,analyzer,true);
-			String line = d.readLine();		
-			while(line!=null)
-			{
-				int endOfDate=line.indexOf('\t');
-				String date=line.substring(0,endOfDate).trim();
-				String content=line.substring(endOfDate).trim();
-				org.apache.lucene.document.Document doc =new org.apache.lucene.document.Document();
-				doc.add(new Field("date",date,Field.Store.YES,Field.Index.ANALYZED));
-				doc.add(new Field("contents",content,Field.Store.YES,Field.Index.ANALYZED));
-				writer.addDocument(doc);
-				line=d.readLine();
-			}			
-			d.close();
-                        writer.close();
-		}
-		reader=IndexReader.open(dir);
-		searcher=new IndexSearcher(reader);
-		
-	}
-	
-	
-	
-	
-	protected void tearDown() throws Exception {
-		reader.close();
-		searcher.close();
-//		dir.close();
-		
-	}
-	public void testSimpleXML() throws ParserException, IOException
-	{
-			Query q=parse("TermQuery.xml");
-			dumpResults("TermQuery", q, 5);
-	}
-	public void testSimpleTermsQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("TermsQuery.xml");
-			dumpResults("TermsQuery", q, 5);
-	}
-	public void testBooleanQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("BooleanQuery.xml");
-			dumpResults("BooleanQuery", q, 5);
-	}
-	public void testRangeFilterQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("RangeFilterQuery.xml");
-			dumpResults("RangeFilter", q, 5);
-	}
-	public void testUserQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("UserInputQuery.xml");
-			dumpResults("UserInput with Filter", q, 5);
-	}
-	
-	public void testCustomFieldUserQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("UserInputQueryCustomField.xml");
-			Hits h = searcher.search(q);
-			assertEquals("UserInputQueryCustomField should produce 0 result ", 0,h.length());
-	}
-	
-	public void testLikeThisQueryXML() throws Exception
-	{
-			Query q=parse("LikeThisQuery.xml");
-			dumpResults("like this", q, 5);
-	}
-	public void testBoostingQueryXML() throws Exception
-	{
-			Query q=parse("BoostingQuery.xml");
-			dumpResults("boosting ",q, 5);
-	}
-	public void testFuzzyLikeThisQueryXML() throws Exception
-	{
-			Query q=parse("FuzzyLikeThisQuery.xml");
-			//show rewritten fuzzyLikeThisQuery - see what is being matched on
-			if(printResults)
-			{
-				System.out.println(q.rewrite(reader));
-			}
-			dumpResults("FuzzyLikeThis", q, 5);
-	}
-	public void testTermsFilterXML() throws Exception
-	{
-			Query q=parse("TermsFilterQuery.xml");
-			dumpResults("Terms Filter",q, 5);
-	}
-	public void testSpanTermXML() throws Exception
-	{
-			Query q=parse("SpanQuery.xml");
-			dumpResults("Span Query",q, 5);
-	}
-	public void testConstantScoreQueryXML() throws Exception
-	{
-			Query q=parse("ConstantScoreQuery.xml");
-			dumpResults("ConstantScoreQuery",q, 5);
-	}
-	public void testMatchAllDocsPlusFilterXML() throws ParserException, IOException
-	{
-			Query q=parse("MatchAllDocsQuery.xml");
-			dumpResults("MatchAllDocsQuery with range filter", q, 5);
-	}
-	public void testBooleanFilterXML() throws ParserException, IOException
-	{
-			Query q=parse("BooleanFilter.xml");
-			dumpResults("Boolean filter", q, 5);
-	}
-	public void testNestedBooleanQuery() throws ParserException, IOException
-	{
-			Query q=parse("NestedBooleanQuery.xml");
-			dumpResults("Nested Boolean query", q, 5);
-	}
-	public void testCachedFilterXML() throws ParserException, IOException
-	{
-			Query q=parse("CachedFilter.xml");
-			dumpResults("Cached filter", q, 5);
-	}
-	public void testDuplicateFilterQueryXML() throws ParserException, IOException
-	{
-			Query q=parse("DuplicateFilterQuery.xml");
-			Hits h = searcher.search(q);
-			assertEquals("DuplicateFilterQuery should produce 1 result ", 1,h.length());
-	}
-	
-
-
-	//================= Helper methods ===================================
-	private Query parse(String xmlFileName) throws ParserException, IOException
-	{
-		InputStream xmlStream=TestParser.class.getResourceAsStream(xmlFileName);
-		Query result=builder.parse(xmlStream);
-		xmlStream.close();
-		return result;
-	}
-	private void dumpResults(String qType,Query q, int numDocs) throws IOException
-	{
-		Hits h = searcher.search(q);
-		assertTrue(qType +" should produce results ", h.length()>0);
-		if(printResults)
-		{
-			System.out.println("========="+qType+"============");
-			for(int i=0;i<Math.min(numDocs,h.length());i++)
-			{
-				org.apache.lucene.document.Document ldoc=h.doc(i);
-				System.out.println("["+ldoc.get("date")+"]"+ldoc.get("contents"));
-			}
-			System.out.println();
-		}
-	}
-	
-
-}
+package org.apache.lucene.xmlparser;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+
+import junit.framework.TestCase;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.IndexReader;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.RAMDirectory;
+/**
+ * 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.
+ */
+
+public class TestParser extends TestCase {
+
+	CoreParser builder;
+	static Directory dir;
+	Analyzer analyzer=new StandardAnalyzer();
+	IndexReader reader;
+	private IndexSearcher searcher;
+	
+	//CHANGE THIS TO SEE OUTPUT
+	boolean printResults=false;
+	
+	
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		//initialize the parser
+		builder=new CorePlusExtensionsParser("contents",analyzer);
+		
+		//initialize the index (done once, then cached in static data for use with ALL tests)		
+		if(dir==null)
+		{
+			BufferedReader d = new BufferedReader(new InputStreamReader(TestParser.class.getResourceAsStream("reuters21578.txt"))); 
+			dir=new RAMDirectory();
+			IndexWriter writer=new IndexWriter(dir,analyzer,true);
+			String line = d.readLine();		
+			while(line!=null)
+			{
+				int endOfDate=line.indexOf('\t');
+				String date=line.substring(0,endOfDate).trim();
+				String content=line.substring(endOfDate).trim();
+				org.apache.lucene.document.Document doc =new org.apache.lucene.document.Document();
+				doc.add(new Field("date",date,Field.Store.YES,Field.Index.ANALYZED));
+				doc.add(new Field("contents",content,Field.Store.YES,Field.Index.ANALYZED));
+				writer.addDocument(doc);
+				line=d.readLine();
+			}			
+			d.close();
+                        writer.close();
+		}
+		reader=IndexReader.open(dir);
+		searcher=new IndexSearcher(reader);
+		
+	}
+	
+	
+	
+	
+	protected void tearDown() throws Exception {
+		reader.close();
+		searcher.close();
+//		dir.close();
+		
+	}
+	public void testSimpleXML() throws ParserException, IOException
+	{
+			Query q=parse("TermQuery.xml");
+			dumpResults("TermQuery", q, 5);
+	}
+	public void testSimpleTermsQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("TermsQuery.xml");
+			dumpResults("TermsQuery", q, 5);
+	}
+	public void testBooleanQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("BooleanQuery.xml");
+			dumpResults("BooleanQuery", q, 5);
+	}
+	public void testRangeFilterQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("RangeFilterQuery.xml");
+			dumpResults("RangeFilter", q, 5);
+	}
+	public void testUserQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("UserInputQuery.xml");
+			dumpResults("UserInput with Filter", q, 5);
+	}
+	
+	public void testCustomFieldUserQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("UserInputQueryCustomField.xml");
+			Hits h = searcher.search(q);
+			assertEquals("UserInputQueryCustomField should produce 0 result ", 0,h.length());
+	}
+	
+	public void testLikeThisQueryXML() throws Exception
+	{
+			Query q=parse("LikeThisQuery.xml");
+			dumpResults("like this", q, 5);
+	}
+	public void testBoostingQueryXML() throws Exception
+	{
+			Query q=parse("BoostingQuery.xml");
+			dumpResults("boosting ",q, 5);
+	}
+	public void testFuzzyLikeThisQueryXML() throws Exception
+	{
+			Query q=parse("FuzzyLikeThisQuery.xml");
+			//show rewritten fuzzyLikeThisQuery - see what is being matched on
+			if(printResults)
+			{
+				System.out.println(q.rewrite(reader));
+			}
+			dumpResults("FuzzyLikeThis", q, 5);
+	}
+	public void testTermsFilterXML() throws Exception
+	{
+			Query q=parse("TermsFilterQuery.xml");
+			dumpResults("Terms Filter",q, 5);
+	}
+	public void testSpanTermXML() throws Exception
+	{
+			Query q=parse("SpanQuery.xml");
+			dumpResults("Span Query",q, 5);
+	}
+	public void testConstantScoreQueryXML() throws Exception
+	{
+			Query q=parse("ConstantScoreQuery.xml");
+			dumpResults("ConstantScoreQuery",q, 5);
+	}
+	public void testMatchAllDocsPlusFilterXML() throws ParserException, IOException
+	{
+			Query q=parse("MatchAllDocsQuery.xml");
+			dumpResults("MatchAllDocsQuery with range filter", q, 5);
+	}
+	public void testBooleanFilterXML() throws ParserException, IOException
+	{
+			Query q=parse("BooleanFilter.xml");
+			dumpResults("Boolean filter", q, 5);
+	}
+	public void testNestedBooleanQuery() throws ParserException, IOException
+	{
+			Query q=parse("NestedBooleanQuery.xml");
+			dumpResults("Nested Boolean query", q, 5);
+	}
+	public void testCachedFilterXML() throws ParserException, IOException
+	{
+			Query q=parse("CachedFilter.xml");
+			dumpResults("Cached filter", q, 5);
+	}
+	public void testDuplicateFilterQueryXML() throws ParserException, IOException
+	{
+			Query q=parse("DuplicateFilterQuery.xml");
+			Hits h = searcher.search(q);
+			assertEquals("DuplicateFilterQuery should produce 1 result ", 1,h.length());
+	}
+	
+
+
+	//================= Helper methods ===================================
+	private Query parse(String xmlFileName) throws ParserException, IOException
+	{
+		InputStream xmlStream=TestParser.class.getResourceAsStream(xmlFileName);
+		Query result=builder.parse(xmlStream);
+		xmlStream.close();
+		return result;
+	}
+	private void dumpResults(String qType,Query q, int numDocs) throws IOException
+	{
+		Hits h = searcher.search(q);
+		assertTrue(qType +" should produce results ", h.length()>0);
+		if(printResults)
+		{
+			System.out.println("========="+qType+"============");
+			for(int i=0;i<Math.min(numDocs,h.length());i++)
+			{
+				org.apache.lucene.document.Document ldoc=h.doc(i);
+				System.out.println("["+ldoc.get("date")+"]"+ldoc.get("contents"));
+			}
+			System.out.println();
+		}
+	}
+	
+
+}

Propchange: lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestQueryTemplateManager.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestQueryTemplateManager.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestQueryTemplateManager.java (original)
+++ lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestQueryTemplateManager.java Mon Nov 10 18:35:46 2008
@@ -1,163 +1,163 @@
-package org.apache.lucene.xmlparser;
-
-import java.io.IOException;
-import java.util.Properties;
-import java.util.StringTokenizer;
-
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.TransformerException;
-
-import junit.framework.TestCase;
-
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.standard.StandardAnalyzer;
-import org.apache.lucene.document.Field;
-import org.apache.lucene.index.IndexWriter;
-import org.apache.lucene.search.Hits;
-import org.apache.lucene.search.IndexSearcher;
-import org.apache.lucene.search.Query;
-import org.apache.lucene.store.RAMDirectory;
-import org.w3c.dom.Document;
-import org.xml.sax.SAXException;
-
-/**
- * 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.
- */
-/**
- * This class illustrates how form input (such as from a web page or Swing gui) can be
- * turned into Lucene queries using a choice of XSL templates for different styles of queries.
- */
-public class TestQueryTemplateManager extends TestCase {
-
-	CoreParser builder;
-	Analyzer analyzer=new StandardAnalyzer();
-	private IndexSearcher searcher;
-	
-	//A collection of documents' field values for use in our tests
-	String docFieldValues []=
-	{
-			"artist=Jeff Buckley \talbum=Grace \treleaseDate=1999 \tgenre=rock",
-			"artist=Fugazi \talbum=Repeater \treleaseDate=1990 \tgenre=alternative",
-			"artist=Fugazi \talbum=Red Medicine \treleaseDate=1995 \tgenre=alternative",
-			"artist=Peeping Tom \talbum=Peeping Tom \treleaseDate=2006 \tgenre=rock",
-			"artist=Red Snapper \talbum=Prince Blimey \treleaseDate=1996 \tgenre=electronic"
-	};
-	
-	//A collection of example queries, consisting of name/value pairs representing form content plus 
-	// a choice of query style template to use in the test, with expected number of hits
-	String queryForms[]=
-	{
-			"artist=Fugazi \texpectedMatches=2 \ttemplate=albumBooleanQuery",
-			"artist=Fugazi \treleaseDate=1990 \texpectedMatches=1 \ttemplate=albumBooleanQuery",
-			"artist=Buckley \tgenre=rock \texpectedMatches=1 \ttemplate=albumFilteredQuery",
-			"artist=Buckley \tgenre=electronic \texpectedMatches=0 \ttemplate=albumFilteredQuery",
-			"queryString=artist:buckly~ NOT genre:electronic \texpectedMatches=1 \ttemplate=albumLuceneClassicQuery"
-	};
-	
-	
-	public void testFormTransforms() throws SAXException, IOException, ParserConfigurationException, TransformerException, ParserException 
-	{
-		//Cache all the query templates we will be referring to.
-		QueryTemplateManager qtm=new QueryTemplateManager();
-		qtm.addQueryTemplate("albumBooleanQuery", getClass().getResourceAsStream("albumBooleanQuery.xsl"));
-		qtm.addQueryTemplate("albumFilteredQuery", getClass().getResourceAsStream("albumFilteredQuery.xsl"));
-		qtm.addQueryTemplate("albumLuceneClassicQuery", getClass().getResourceAsStream("albumLuceneClassicQuery.xsl"));
-		//Run all of our test queries
-		for (int i = 0; i < queryForms.length; i++)
-		{
-			Properties queryFormProperties=getPropsFromString(queryForms[i]);
-			
-			//Get the required query XSL template for this test
-//			Templates template=getTemplate(queryFormProperties.getProperty("template"));
-			
-			//Transform the queryFormProperties into a Lucene XML query
-			Document doc=qtm.getQueryAsDOM(queryFormProperties,queryFormProperties.getProperty("template"));
-			
-			//Parse the XML query using the XML parser
-			Query q=builder.getQuery(doc.getDocumentElement());
-			
-			//Run the query
-			Hits h=searcher.search(q);
-			
-			//Check we have the expected number of results
-			int expectedHits=Integer.parseInt(queryFormProperties.getProperty("expectedMatches"));
-			assertEquals("Number of results should match for query "+queryForms[i],expectedHits,h.length());
-			
-		}
-	}
-	
-	//Helper method to construct Lucene query forms used in our test
-	Properties getPropsFromString(String nameValuePairs)
-	{
-		Properties result=new Properties();
-		StringTokenizer st=new StringTokenizer(nameValuePairs,"\t=");
-		while(st.hasMoreTokens())
-		{
-			String name=st.nextToken().trim();
-			if(st.hasMoreTokens())
-			{
-				String value=st.nextToken().trim();
-				result.setProperty(name,value);
-			}
-		}
-		return result;
-	}
-	
-	//Helper method to construct Lucene documents used in our tests
-	org.apache.lucene.document.Document getDocumentFromString(String nameValuePairs)
-	{
-		org.apache.lucene.document.Document result=new org.apache.lucene.document.Document();
-		StringTokenizer st=new StringTokenizer(nameValuePairs,"\t=");
-		while(st.hasMoreTokens())
-		{
-			String name=st.nextToken().trim();
-			if(st.hasMoreTokens())
-			{
-				String value=st.nextToken().trim();
-				result.add(new Field(name,value,Field.Store.YES,Field.Index.ANALYZED));
-			}
-		}
-		return result;
-	}
-	
-	/*
-	 * @see TestCase#setUp()
-	 */
-	protected void setUp() throws Exception {
-		super.setUp();
-		
-		
-		//Create an index
-		RAMDirectory dir=new RAMDirectory();
-		IndexWriter w=new IndexWriter(dir,analyzer,true);
-		for (int i = 0; i < docFieldValues.length; i++)
-		{
-			w.addDocument(getDocumentFromString(docFieldValues[i]));
-		}
-		w.optimize();
-		w.close();
-		searcher=new IndexSearcher(dir);
-		
-		//initialize the parser
-		builder=new CorePlusExtensionsParser("artist", analyzer);
-		
-	}
-	
-	
-	protected void tearDown() throws Exception {
-		searcher.close();
-	}
-}
+package org.apache.lucene.xmlparser;
+
+import java.io.IOException;
+import java.util.Properties;
+import java.util.StringTokenizer;
+
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.transform.TransformerException;
+
+import junit.framework.TestCase;
+
+import org.apache.lucene.analysis.Analyzer;
+import org.apache.lucene.analysis.standard.StandardAnalyzer;
+import org.apache.lucene.document.Field;
+import org.apache.lucene.index.IndexWriter;
+import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.IndexSearcher;
+import org.apache.lucene.search.Query;
+import org.apache.lucene.store.RAMDirectory;
+import org.w3c.dom.Document;
+import org.xml.sax.SAXException;
+
+/**
+ * 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.
+ */
+/**
+ * This class illustrates how form input (such as from a web page or Swing gui) can be
+ * turned into Lucene queries using a choice of XSL templates for different styles of queries.
+ */
+public class TestQueryTemplateManager extends TestCase {
+
+	CoreParser builder;
+	Analyzer analyzer=new StandardAnalyzer();
+	private IndexSearcher searcher;
+	
+	//A collection of documents' field values for use in our tests
+	String docFieldValues []=
+	{
+			"artist=Jeff Buckley \talbum=Grace \treleaseDate=1999 \tgenre=rock",
+			"artist=Fugazi \talbum=Repeater \treleaseDate=1990 \tgenre=alternative",
+			"artist=Fugazi \talbum=Red Medicine \treleaseDate=1995 \tgenre=alternative",
+			"artist=Peeping Tom \talbum=Peeping Tom \treleaseDate=2006 \tgenre=rock",
+			"artist=Red Snapper \talbum=Prince Blimey \treleaseDate=1996 \tgenre=electronic"
+	};
+	
+	//A collection of example queries, consisting of name/value pairs representing form content plus 
+	// a choice of query style template to use in the test, with expected number of hits
+	String queryForms[]=
+	{
+			"artist=Fugazi \texpectedMatches=2 \ttemplate=albumBooleanQuery",
+			"artist=Fugazi \treleaseDate=1990 \texpectedMatches=1 \ttemplate=albumBooleanQuery",
+			"artist=Buckley \tgenre=rock \texpectedMatches=1 \ttemplate=albumFilteredQuery",
+			"artist=Buckley \tgenre=electronic \texpectedMatches=0 \ttemplate=albumFilteredQuery",
+			"queryString=artist:buckly~ NOT genre:electronic \texpectedMatches=1 \ttemplate=albumLuceneClassicQuery"
+	};
+	
+	
+	public void testFormTransforms() throws SAXException, IOException, ParserConfigurationException, TransformerException, ParserException 
+	{
+		//Cache all the query templates we will be referring to.
+		QueryTemplateManager qtm=new QueryTemplateManager();
+		qtm.addQueryTemplate("albumBooleanQuery", getClass().getResourceAsStream("albumBooleanQuery.xsl"));
+		qtm.addQueryTemplate("albumFilteredQuery", getClass().getResourceAsStream("albumFilteredQuery.xsl"));
+		qtm.addQueryTemplate("albumLuceneClassicQuery", getClass().getResourceAsStream("albumLuceneClassicQuery.xsl"));
+		//Run all of our test queries
+		for (int i = 0; i < queryForms.length; i++)
+		{
+			Properties queryFormProperties=getPropsFromString(queryForms[i]);
+			
+			//Get the required query XSL template for this test
+//			Templates template=getTemplate(queryFormProperties.getProperty("template"));
+			
+			//Transform the queryFormProperties into a Lucene XML query
+			Document doc=qtm.getQueryAsDOM(queryFormProperties,queryFormProperties.getProperty("template"));
+			
+			//Parse the XML query using the XML parser
+			Query q=builder.getQuery(doc.getDocumentElement());
+			
+			//Run the query
+			Hits h=searcher.search(q);
+			
+			//Check we have the expected number of results
+			int expectedHits=Integer.parseInt(queryFormProperties.getProperty("expectedMatches"));
+			assertEquals("Number of results should match for query "+queryForms[i],expectedHits,h.length());
+			
+		}
+	}
+	
+	//Helper method to construct Lucene query forms used in our test
+	Properties getPropsFromString(String nameValuePairs)
+	{
+		Properties result=new Properties();
+		StringTokenizer st=new StringTokenizer(nameValuePairs,"\t=");
+		while(st.hasMoreTokens())
+		{
+			String name=st.nextToken().trim();
+			if(st.hasMoreTokens())
+			{
+				String value=st.nextToken().trim();
+				result.setProperty(name,value);
+			}
+		}
+		return result;
+	}
+	
+	//Helper method to construct Lucene documents used in our tests
+	org.apache.lucene.document.Document getDocumentFromString(String nameValuePairs)
+	{
+		org.apache.lucene.document.Document result=new org.apache.lucene.document.Document();
+		StringTokenizer st=new StringTokenizer(nameValuePairs,"\t=");
+		while(st.hasMoreTokens())
+		{
+			String name=st.nextToken().trim();
+			if(st.hasMoreTokens())
+			{
+				String value=st.nextToken().trim();
+				result.add(new Field(name,value,Field.Store.YES,Field.Index.ANALYZED));
+			}
+		}
+		return result;
+	}
+	
+	/*
+	 * @see TestCase#setUp()
+	 */
+	protected void setUp() throws Exception {
+		super.setUp();
+		
+		
+		//Create an index
+		RAMDirectory dir=new RAMDirectory();
+		IndexWriter w=new IndexWriter(dir,analyzer,true);
+		for (int i = 0; i < docFieldValues.length; i++)
+		{
+			w.addDocument(getDocumentFromString(docFieldValues[i]));
+		}
+		w.optimize();
+		w.close();
+		searcher=new IndexSearcher(dir);
+		
+		//initialize the parser
+		builder=new CorePlusExtensionsParser("artist", analyzer);
+		
+	}
+	
+	
+	protected void tearDown() throws Exception {
+		searcher.close();
+	}
+}

Propchange: lucene/java/trunk/contrib/xml-query-parser/src/test/org/apache/lucene/xmlparser/TestQueryTemplateManager.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/java/org/apache/lucene/util/ArrayUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/src/java/org/apache/lucene/util/cache/Cache.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/util/cache/Cache.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/util/cache/Cache.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/util/cache/Cache.java Mon Nov 10 18:35:46 2008
@@ -1,105 +1,105 @@
-package org.apache.lucene.util.cache;
-
-/**
- * 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.
- */
-
-
-/**
- * Base class for cache implementations.
- */
-public abstract class Cache {
-  
-  /**
-   * Simple Cache wrapper that synchronizes all
-   * calls that access the cache. 
-   */
-  static class SynchronizedCache extends Cache {
-    Object mutex;
-    Cache  cache;
-    
-    SynchronizedCache(Cache cache) {
-      this.cache = cache;
-      this.mutex = this;
-    }
-    
-    SynchronizedCache(Cache cache, Object mutex) {
-      this.cache = cache;
-      this.mutex = mutex;
-    }
-    
-    public void put(Object key, Object value) {
-      synchronized(mutex) {cache.put(key, value);}
-    }
-    
-    public Object get(Object key) {
-      synchronized(mutex) {return cache.get(key);}
-    }
-    
-    public boolean containsKey(Object key) {
-      synchronized(mutex) {return cache.containsKey(key);}
-    }
-    
-    public void close() {
-      synchronized(mutex) {cache.close();}
-    }
-    
-    Cache getSynchronizedCache() {
-      return this;
-    }
-  }
-  
-  /**
-   * Returns a thread-safe cache backed by the specified cache. 
-   * In order to guarantee thread-safety, all access to the backed cache must
-   * be accomplished through the returned cache.
-   */
-  public static Cache synchronizedCache(Cache cache) {
-    return cache.getSynchronizedCache();
-  }
-
-  /**
-   * Called by {@link #synchronizedCache(Cache)}. This method
-   * returns a {@link SynchronizedCache} instance that wraps
-   * this instance by default and can be overridden to return
-   * e. g. subclasses of {@link SynchronizedCache} or this
-   * in case this cache is already synchronized.
-   */
-  Cache getSynchronizedCache() {
-    return new SynchronizedCache(this);
-  }
-  
-  /**
-   * Puts a (key, value)-pair into the cache. 
-   */
-  public abstract void put(Object key, Object value);
-  
-  /**
-   * Returns the value for the given key. 
-   */
-  public abstract Object get(Object key);
-  
-  /**
-   * Returns whether the given key is in this cache. 
-   */
-  public abstract boolean containsKey(Object key);
-  
-  /**
-   * Closes the cache.
-   */
-  public abstract void close();
-  
-}
+package org.apache.lucene.util.cache;
+
+/**
+ * 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.
+ */
+
+
+/**
+ * Base class for cache implementations.
+ */
+public abstract class Cache {
+  
+  /**
+   * Simple Cache wrapper that synchronizes all
+   * calls that access the cache. 
+   */
+  static class SynchronizedCache extends Cache {
+    Object mutex;
+    Cache  cache;
+    
+    SynchronizedCache(Cache cache) {
+      this.cache = cache;
+      this.mutex = this;
+    }
+    
+    SynchronizedCache(Cache cache, Object mutex) {
+      this.cache = cache;
+      this.mutex = mutex;
+    }
+    
+    public void put(Object key, Object value) {
+      synchronized(mutex) {cache.put(key, value);}
+    }
+    
+    public Object get(Object key) {
+      synchronized(mutex) {return cache.get(key);}
+    }
+    
+    public boolean containsKey(Object key) {
+      synchronized(mutex) {return cache.containsKey(key);}
+    }
+    
+    public void close() {
+      synchronized(mutex) {cache.close();}
+    }
+    
+    Cache getSynchronizedCache() {
+      return this;
+    }
+  }
+  
+  /**
+   * Returns a thread-safe cache backed by the specified cache. 
+   * In order to guarantee thread-safety, all access to the backed cache must
+   * be accomplished through the returned cache.
+   */
+  public static Cache synchronizedCache(Cache cache) {
+    return cache.getSynchronizedCache();
+  }
+
+  /**
+   * Called by {@link #synchronizedCache(Cache)}. This method
+   * returns a {@link SynchronizedCache} instance that wraps
+   * this instance by default and can be overridden to return
+   * e. g. subclasses of {@link SynchronizedCache} or this
+   * in case this cache is already synchronized.
+   */
+  Cache getSynchronizedCache() {
+    return new SynchronizedCache(this);
+  }
+  
+  /**
+   * Puts a (key, value)-pair into the cache. 
+   */
+  public abstract void put(Object key, Object value);
+  
+  /**
+   * Returns the value for the given key. 
+   */
+  public abstract Object get(Object key);
+  
+  /**
+   * Returns whether the given key is in this cache. 
+   */
+  public abstract boolean containsKey(Object key);
+  
+  /**
+   * Closes the cache.
+   */
+  public abstract void close();
+  
+}

Propchange: lucene/java/trunk/src/java/org/apache/lucene/util/cache/Cache.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleLRUCache.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleLRUCache.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleLRUCache.java Mon Nov 10 18:35:46 2008
@@ -1,49 +1,49 @@
-package org.apache.lucene.util.cache;
-
-/**
- * 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.util.LinkedHashMap;
-import java.util.Map;
-
-/**
- * Simple LRU cache implementation that uses a LinkedHashMap.
- * This cache is not synchronized, use {@link Cache#synchronizedCache(Cache)}
- * if needed.
- * 
- */
-public class SimpleLRUCache extends SimpleMapCache {
-  private final static float LOADFACTOR = 0.75f;
-
-  private int cacheSize;
-
-  /**
-   * Creates a last-recently-used cache with the specified size. 
-   */
-  public SimpleLRUCache(int cacheSize) {
-    super(null);
-    this.cacheSize = cacheSize;
-    int capacity = (int) Math.ceil(cacheSize / LOADFACTOR) + 1;
-
-    super.map = new LinkedHashMap(capacity, LOADFACTOR, true) {
-      protected boolean removeEldestEntry(Map.Entry eldest) {
-        return size() > SimpleLRUCache.this.cacheSize;
-      }
-    };
-  }
-
-}
+package org.apache.lucene.util.cache;
+
+/**
+ * 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.util.LinkedHashMap;
+import java.util.Map;
+
+/**
+ * Simple LRU cache implementation that uses a LinkedHashMap.
+ * This cache is not synchronized, use {@link Cache#synchronizedCache(Cache)}
+ * if needed.
+ * 
+ */
+public class SimpleLRUCache extends SimpleMapCache {
+  private final static float LOADFACTOR = 0.75f;
+
+  private int cacheSize;
+
+  /**
+   * Creates a last-recently-used cache with the specified size. 
+   */
+  public SimpleLRUCache(int cacheSize) {
+    super(null);
+    this.cacheSize = cacheSize;
+    int capacity = (int) Math.ceil(cacheSize / LOADFACTOR) + 1;
+
+    super.map = new LinkedHashMap(capacity, LOADFACTOR, true) {
+      protected boolean removeEldestEntry(Map.Entry eldest) {
+        return size() > SimpleLRUCache.this.cacheSize;
+      }
+    };
+  }
+
+}

Propchange: lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleLRUCache.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleMapCache.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleMapCache.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleMapCache.java (original)
+++ lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleMapCache.java Mon Nov 10 18:35:46 2008
@@ -1,100 +1,100 @@
-package org.apache.lucene.util.cache;
-
-/**
- * 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.util.HashMap;
-import java.util.Map;
-import java.util.Set;
-
-/**
- * Simple cache implementation that uses a HashMap to store (key, value) pairs.
- * This cache is not synchronized, use {@link Cache#synchronizedCache(Cache)}
- * if needed.
- */
-public class SimpleMapCache extends Cache {
-  Map map;
-  
-  public SimpleMapCache() {
-    this(new HashMap());
-  }
-
-  public SimpleMapCache(Map map) {
-    this.map = map;
-  }
-  
-  public Object get(Object key) {
-    return map.get(key);
-  }
-
-  public void put(Object key, Object value) {
-    map.put(key, value);
-  }
-
-  public void close() {
-    // NOOP
-  }
-
-  public boolean containsKey(Object key) {
-    return map.containsKey(key);
-  }
-  
-  /**
-   * Returns a Set containing all keys in this cache.
-   */
-  public Set keySet() {
-    return map.keySet();
-  }
-  
-  Cache getSynchronizedCache() {
-    return new SynchronizedSimpleMapCache(this);
-  }
-  
-  private static class SynchronizedSimpleMapCache extends SimpleMapCache {
-    Object mutex;
-    SimpleMapCache cache;
-    
-    SynchronizedSimpleMapCache(SimpleMapCache cache) {
-        this.cache = cache;
-        this.mutex = this;
-    }
-    
-    public void put(Object key, Object value) {
-        synchronized(mutex) {cache.put(key, value);}
-    }
-    
-    public Object get(Object key) {
-        synchronized(mutex) {return cache.get(key);}
-    }
-    
-    public boolean containsKey(Object key) {
-        synchronized(mutex) {return cache.containsKey(key);}
-    }
-    
-    public void close() {
-        synchronized(mutex) {cache.close();}
-    }
-    
-    public Set keySet() {
-      synchronized(mutex) {return cache.keySet();}
-    }
-    
-    Cache getSynchronizedCache() {
-      return this;
-    }
-  }
-}
+package org.apache.lucene.util.cache;
+
+/**
+ * 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.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+
+/**
+ * Simple cache implementation that uses a HashMap to store (key, value) pairs.
+ * This cache is not synchronized, use {@link Cache#synchronizedCache(Cache)}
+ * if needed.
+ */
+public class SimpleMapCache extends Cache {
+  Map map;
+  
+  public SimpleMapCache() {
+    this(new HashMap());
+  }
+
+  public SimpleMapCache(Map map) {
+    this.map = map;
+  }
+  
+  public Object get(Object key) {
+    return map.get(key);
+  }
+
+  public void put(Object key, Object value) {
+    map.put(key, value);
+  }
+
+  public void close() {
+    // NOOP
+  }
+
+  public boolean containsKey(Object key) {
+    return map.containsKey(key);
+  }
+  
+  /**
+   * Returns a Set containing all keys in this cache.
+   */
+  public Set keySet() {
+    return map.keySet();
+  }
+  
+  Cache getSynchronizedCache() {
+    return new SynchronizedSimpleMapCache(this);
+  }
+  
+  private static class SynchronizedSimpleMapCache extends SimpleMapCache {
+    Object mutex;
+    SimpleMapCache cache;
+    
+    SynchronizedSimpleMapCache(SimpleMapCache cache) {
+        this.cache = cache;
+        this.mutex = this;
+    }
+    
+    public void put(Object key, Object value) {
+        synchronized(mutex) {cache.put(key, value);}
+    }
+    
+    public Object get(Object key) {
+        synchronized(mutex) {return cache.get(key);}
+    }
+    
+    public boolean containsKey(Object key) {
+        synchronized(mutex) {return cache.containsKey(key);}
+    }
+    
+    public void close() {
+        synchronized(mutex) {cache.close();}
+    }
+    
+    public Set keySet() {
+      synchronized(mutex) {return cache.keySet();}
+    }
+    
+    Cache getSynchronizedCache() {
+      return this;
+    }
+  }
+}

Propchange: lucene/java/trunk/src/java/org/apache/lucene/util/cache/SimpleMapCache.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/store/MockRAMDirectory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/store/MockRAMOutputStream.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/store/TestLock.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/store/TestWindowsMMap.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/src/test/org/apache/lucene/util/TestSmallFloat.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/util/TestSmallFloat.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/util/TestSmallFloat.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/util/TestSmallFloat.java Mon Nov 10 18:35:46 2008
@@ -1,113 +1,113 @@
-package org.apache.lucene.util;
-
-/**
- * Copyright 2005 The Apache Software Foundation
- *
- * Licensed 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 org.apache.lucene.util.LuceneTestCase;
-import java.util.Random;
-
-/**
- * @version $Id$
- */
-public class TestSmallFloat extends LuceneTestCase {
-
-  // original lucene byteToFloat
-  static float orig_byteToFloat(byte b) {
-    if (b == 0)                                   // zero is a special case
-      return 0.0f;
-    int mantissa = b & 7;
-    int exponent = (b >> 3) & 31;
-    int bits = ((exponent+(63-15)) << 24) | (mantissa << 21);
-    return Float.intBitsToFloat(bits);
-  }
-
-  // original lucene floatToByte
-  static byte orig_floatToByte(float f) {
-    if (f < 0.0f)                                 // round negatives up to zero
-      f = 0.0f;
-
-    if (f == 0.0f)                                // zero is a special case
-      return 0;
-
-    int bits = Float.floatToIntBits(f);           // parse float into parts
-    int mantissa = (bits & 0xffffff) >> 21;
-    int exponent = (((bits >> 24) & 0x7f) - 63) + 15;
-
-    if (exponent > 31) {                          // overflow: use max value
-      exponent = 31;
-      mantissa = 7;
-    }
-
-    if (exponent < 0) {                           // underflow: use min value
-      exponent = 0;
-      mantissa = 1;
-    }
-
-    return (byte)((exponent << 3) | mantissa);    // pack into a byte
-  }
-
-  public void testByteToFloat() {
-    for (int i=0; i<256; i++) {
-      float f1 = orig_byteToFloat((byte)i);
-      float f2 = SmallFloat.byteToFloat((byte)i, 3,15);
-      float f3 = SmallFloat.byte315ToFloat((byte)i);
-      assertEquals(f1,f2,0.0);
-      assertEquals(f2,f3,0.0);
-
-      float f4 = SmallFloat.byteToFloat((byte)i,5,2);
-      float f5 = SmallFloat.byte52ToFloat((byte)i);
-      assertEquals(f4,f5,0.0);
-    }
-  }
-
-  public void testFloatToByte() {
-    Random rand = new Random(0);
-    // up iterations for more exhaustive test after changing something
-    for (int i=0; i<100000; i++) {
-      float f = Float.intBitsToFloat(rand.nextInt());
-      if (f!=f) continue;    // skip NaN
-      byte b1 = orig_floatToByte(f);
-      byte b2 = SmallFloat.floatToByte(f,3,15);
-      byte b3 = SmallFloat.floatToByte315(f);
-      assertEquals(b1,b2);
-      assertEquals(b2,b3);
-
-      byte b4 = SmallFloat.floatToByte(f,5,2);
-      byte b5 = SmallFloat.floatToByte52(f);
-      assertEquals(b4,b5);
-    }
-  }
-
-  /***
-  // Do an exhaustive test of all possible floating point values
-  // for the 315 float against the original norm encoding in Similarity.
-  // Takes 75 seconds on my Pentium4 3GHz, with Java5 -server
-  public void testAllFloats() {
-    for(int i = Integer.MIN_VALUE;;i++) {
-      float f = Float.intBitsToFloat(i);
-      if (f==f) { // skip non-numbers
-        byte b1 = orig_floatToByte(f);
-        byte b2 = SmallFloat.floatToByte315(f);
-        if (b1!=b2) {
-          TestCase.fail("Failed floatToByte315 for float " + f);
-        }
-      }
-      if (i==Integer.MAX_VALUE) break;
-    }
-  }
-  ***/
-
-}
+package org.apache.lucene.util;
+
+/**
+ * Copyright 2005 The Apache Software Foundation
+ *
+ * Licensed 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 org.apache.lucene.util.LuceneTestCase;
+import java.util.Random;
+
+/**
+ * @version $Id$
+ */
+public class TestSmallFloat extends LuceneTestCase {
+
+  // original lucene byteToFloat
+  static float orig_byteToFloat(byte b) {
+    if (b == 0)                                   // zero is a special case
+      return 0.0f;
+    int mantissa = b & 7;
+    int exponent = (b >> 3) & 31;
+    int bits = ((exponent+(63-15)) << 24) | (mantissa << 21);
+    return Float.intBitsToFloat(bits);
+  }
+
+  // original lucene floatToByte
+  static byte orig_floatToByte(float f) {
+    if (f < 0.0f)                                 // round negatives up to zero
+      f = 0.0f;
+
+    if (f == 0.0f)                                // zero is a special case
+      return 0;
+
+    int bits = Float.floatToIntBits(f);           // parse float into parts
+    int mantissa = (bits & 0xffffff) >> 21;
+    int exponent = (((bits >> 24) & 0x7f) - 63) + 15;
+
+    if (exponent > 31) {                          // overflow: use max value
+      exponent = 31;
+      mantissa = 7;
+    }
+
+    if (exponent < 0) {                           // underflow: use min value
+      exponent = 0;
+      mantissa = 1;
+    }
+
+    return (byte)((exponent << 3) | mantissa);    // pack into a byte
+  }
+
+  public void testByteToFloat() {
+    for (int i=0; i<256; i++) {
+      float f1 = orig_byteToFloat((byte)i);
+      float f2 = SmallFloat.byteToFloat((byte)i, 3,15);
+      float f3 = SmallFloat.byte315ToFloat((byte)i);
+      assertEquals(f1,f2,0.0);
+      assertEquals(f2,f3,0.0);
+
+      float f4 = SmallFloat.byteToFloat((byte)i,5,2);
+      float f5 = SmallFloat.byte52ToFloat((byte)i);
+      assertEquals(f4,f5,0.0);
+    }
+  }
+
+  public void testFloatToByte() {
+    Random rand = new Random(0);
+    // up iterations for more exhaustive test after changing something
+    for (int i=0; i<100000; i++) {
+      float f = Float.intBitsToFloat(rand.nextInt());
+      if (f!=f) continue;    // skip NaN
+      byte b1 = orig_floatToByte(f);
+      byte b2 = SmallFloat.floatToByte(f,3,15);
+      byte b3 = SmallFloat.floatToByte315(f);
+      assertEquals(b1,b2);
+      assertEquals(b2,b3);
+
+      byte b4 = SmallFloat.floatToByte(f,5,2);
+      byte b5 = SmallFloat.floatToByte52(f);
+      assertEquals(b4,b5);
+    }
+  }
+
+  /***
+  // Do an exhaustive test of all possible floating point values
+  // for the 315 float against the original norm encoding in Similarity.
+  // Takes 75 seconds on my Pentium4 3GHz, with Java5 -server
+  public void testAllFloats() {
+    for(int i = Integer.MIN_VALUE;;i++) {
+      float f = Float.intBitsToFloat(i);
+      if (f==f) { // skip non-numbers
+        byte b1 = orig_floatToByte(f);
+        byte b2 = SmallFloat.floatToByte315(f);
+        if (b1!=b2) {
+          TestCase.fail("Failed floatToByte315 for float " + f);
+        }
+      }
+      if (i==Integer.MAX_VALUE) break;
+    }
+  }
+  ***/
+
+}

Propchange: lucene/java/trunk/src/test/org/apache/lucene/util/TestSmallFloat.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/util/TestStringHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: lucene/java/trunk/src/test/org/apache/lucene/util/_TestUtil.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: lucene/java/trunk/src/test/org/apache/lucene/util/cache/TestSimpleLRUCache.java
URL: http://svn.apache.org/viewvc/lucene/java/trunk/src/test/org/apache/lucene/util/cache/TestSimpleLRUCache.java?rev=712922&r1=712921&r2=712922&view=diff
==============================================================================
--- lucene/java/trunk/src/test/org/apache/lucene/util/cache/TestSimpleLRUCache.java (original)
+++ lucene/java/trunk/src/test/org/apache/lucene/util/cache/TestSimpleLRUCache.java Mon Nov 10 18:35:46 2008
@@ -1,63 +1,63 @@
-package org.apache.lucene.util.cache;
-
-/**
-* 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 junit.framework.TestCase;
-
-public class TestSimpleLRUCache extends TestCase {
-
-  public void testLRUCache() throws Exception {
-    final int n = 100;
-    Object dummy = new Object();
-    
-    Cache cache = new SimpleLRUCache(n);
-    
-    for (int i = 0; i < n; i++) {
-      cache.put(new Integer(i), dummy);
-    }
-    
-    // access every 2nd item in cache
-    for (int i = 0; i < n; i+=2) {
-      assertNotNull(cache.get(new Integer(i)));
-    }
-    
-    // add n/2 elements to cache, the ones that weren't
-    // touched in the previous loop should now be thrown away
-    for (int i = n; i < n + (n / 2); i++) {
-      cache.put(new Integer(i), dummy);
-    }
-    
-    // access every 4th item in cache
-    for (int i = 0; i < n; i+=4) {
-      assertNotNull(cache.get(new Integer(i)));
-    }
-
-    // add 3/4n elements to cache, the ones that weren't
-    // touched in the previous loops should now be thrown away
-    for (int i = n; i < n + (n * 3 / 4); i++) {
-      cache.put(new Integer(i), dummy);
-    }
-    
-    // access every 4th item in cache
-    for (int i = 0; i < n; i+=4) {
-      assertNotNull(cache.get(new Integer(i)));
-    }
-    
-  }
-  
-}
+package org.apache.lucene.util.cache;
+
+/**
+* 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 junit.framework.TestCase;
+
+public class TestSimpleLRUCache extends TestCase {
+
+  public void testLRUCache() throws Exception {
+    final int n = 100;
+    Object dummy = new Object();
+    
+    Cache cache = new SimpleLRUCache(n);
+    
+    for (int i = 0; i < n; i++) {
+      cache.put(new Integer(i), dummy);
+    }
+    
+    // access every 2nd item in cache
+    for (int i = 0; i < n; i+=2) {
+      assertNotNull(cache.get(new Integer(i)));
+    }
+    
+    // add n/2 elements to cache, the ones that weren't
+    // touched in the previous loop should now be thrown away
+    for (int i = n; i < n + (n / 2); i++) {
+      cache.put(new Integer(i), dummy);
+    }
+    
+    // access every 4th item in cache
+    for (int i = 0; i < n; i+=4) {
+      assertNotNull(cache.get(new Integer(i)));
+    }
+
+    // add 3/4n elements to cache, the ones that weren't
+    // touched in the previous loops should now be thrown away
+    for (int i = n; i < n + (n * 3 / 4); i++) {
+      cache.put(new Integer(i), dummy);
+    }
+    
+    // access every 4th item in cache
+    for (int i = 0; i < n; i+=4) {
+      assertNotNull(cache.get(new Integer(i)));
+    }
+    
+  }
+  
+}

Propchange: lucene/java/trunk/src/test/org/apache/lucene/util/cache/TestSimpleLRUCache.java
------------------------------------------------------------------------------
    svn:eol-style = native