dirkv 2004/03/21 13:10:34
Modified: scaffold/src/java/org/apache/commons/scaffold/lucene
SearchUtils.java Engine.java
Log:
Bugzilla Bug 27689: [scaffold] changing to the Apache 2.0 license removed source
file contents.
Revision Changes Path
1.8 +105 -15
jakarta-commons-sandbox/scaffold/src/java/org/apache/commons/scaffold/lucene/SearchUtils.java
Index: SearchUtils.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/scaffold/src/java/org/apache/commons/scaffold/lucene/SearchUtils.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- SearchUtils.java 28 Feb 2004 03:35:45 -0000 1.7
+++ SearchUtils.java 21 Mar 2004 21:10:34 -0000 1.8
@@ -1,3 +1,19 @@
+ /*
+ * Copyright 2001,2004 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.
+ */
+
package org.apache.commons.scaffold.lucene;
@@ -14,18 +30,92 @@
import org.apache.lucene.search.Hits;
- /*
- * Copyright 2001,2004 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.
- */
+ /**
+ * General purpose utility methods related to Hits
+ *
+ * @author Craig R. McClanahan
+ * @author Ted Husted
+ * @version $Revision$ $Date$
+ */
+ public class SearchUtils {
+
+ /**
+ * Populate the properties of the specified JavaBean from the specified
+ * Lucene document, based on matching each parameter name against the
+ * corresponding JavaBeans "property setter" methods in the bean's class.
+ * See <code>BeanUtils.CopyProperites</code> for more about automatic
+ * conversion between types.
+ *
+ * @param bean The JavaBean whose properties are to be set
+ * @param document The Lucene document whose parameters are to be used
+ * to populate bean properties
+ * @exception PopulateException if an exception is thrown while setting
+ * property values
+ */
+ public static void populate(
+ Object bean,
+ Document document)
+ throws PopulateException {
+
+ // Build a list of relevant fields and values
+ HashMap properties = new HashMap();
+
+ // Iterator of field names
+ Enumeration fields = document.fields();
+
+ while (fields.hasMoreElements()) {
+ Field field = (Field) fields.nextElement();
+ properties.put(field.name(),field.stringValue());
+ }
+
+ // Set the corresponding properties of our bean
+ try {
+ BeanUtils.copyProperties(bean, properties);
+ } catch (Throwable t) {
+ throw new PopulateException(t);
+ }
+
+ } // end populate()
+
+
+ /**
+ * Return a ArrayList of hits by looping and calling populate.
+ * No assumptions are made about fields in document. Each is
+ * processed with a separate call to populate. Whatever fields
+ * in each document that match the target bean will be
+ * transferred.
+ *
+ * @param hits The Hits whose documents are to be used
+ * to populate bean properties
+ * @param target An instance of the bean to populate
+ * @exception PopulateException if an exception is thrown while setting
+ * property values, populating the bean, or accessing the Hits
+ */
+ public static Collection getCollection(
+ Object target,
+ Hits hits)
+ throws PopulateException {
+
+ // Use ArrayList to maintain sequence
+ ArrayList list = new ArrayList();
+
+ // Acquire target class
+ Class factory = target.getClass();
+
+ try {
+ // Scroll to each document; populate bean, and add to list
+ for (int i=0; i<hits.length(); ++i) {
+ Object bean = factory.newInstance();
+ Document doc = hits.doc(i);
+ populate(bean,doc);
+ list.add(bean);
+ }
+ } catch (Throwable t) {
+ throw new PopulateException(t);
+ }
+ return ((Collection) list);
+
+ } // end getCollection()
+
+} // end SearchUtils
+
1.5 +235 -14
jakarta-commons-sandbox/scaffold/src/java/org/apache/commons/scaffold/lucene/Engine.java
Index: Engine.java
===================================================================
RCS file:
/home/cvs/jakarta-commons-sandbox/scaffold/src/java/org/apache/commons/scaffold/lucene/Engine.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- Engine.java 28 Feb 2004 03:35:45 -0000 1.4
+++ Engine.java 21 Mar 2004 21:10:34 -0000 1.5
@@ -1,3 +1,19 @@
+/*
+ * Copyright 2001,2004 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.
+ */
+
package org.apache.commons.scaffold.lucene;
@@ -19,18 +35,223 @@
import org.apache.lucene.search.Searcher;
-/*
- * Copyright 2001,2004 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.
+/**
+ * Search engine methods for Lucene.
+ *
+ * @author Ted Husted
+ * @version $Revision$ $Date$
+ * @todo Make singleton instead of static
*/
+public final class Engine {
+
+
+ /**
+ * Default path for index ["/var/lucene/scaffold"].
+ * Use the <code>setIndexPath</code> method on startup
+ * to change.
+ * Each application needs its own index path.
+ */
+ private static String indexPath;
+
+
+ /**
+ * Return path for index.
+ */
+ public static String getIndexPath() {
+ return indexPath;
+ }
+
+
+ /**
+ * Set path for index.
+ * MUST be set at startup before using other methods.
+ */
+ public static void init(String _indexPath) {
+ indexPath = _indexPath;
+ }
+
+
+ /**
+ * Performance optimization to ensure JVM doesn't
+ * create a new empty string whenever blankNull
+ * needs one.
+ */
+ private static final String BLANK_STRING = "";
+
+
+ /**
+ * Convenience method to use an empty string in place
+ * of a null for indexing.
+ *
+ * @param string The string to test for null
+ * @return A blank String [BLANK_STRING] if string is null
+ */
+ public static final String blankNull(String string) {
+ if (string==null) return BLANK_STRING;
+ else return string;
+ }
+
+
+ /**
+ * Return default analyzer for application
+ * A non-English site should use a different analyzer
+ *
+ * @return The default analyzer
+ * @exception Throws ResourceException on IO error
+ */
+ public static final Analyzer getAnalyzer() {
+ return new StopAnalyzer();
+ }
+
+
+ /**
+ * Return default searcher for application.
+ *
+ * @exception Throws ResourceException on IO error
+ * @return default searcher
+ */
+ public static final Searcher getSearcher()
+ throws ResourceException {
+
+ try {
+
+ return new IndexSearcher(getIndexPath());
+
+ }
+ catch (IOException e) {
+ throw new ResourceException(e);
+ }
+
+ } // end getSearcher()
+
+
+ /**
+ * Return default writer for application.
+ *
+ * @param Set to true to create a new index; usually false.
+ * @return default writer
+ * @exception Throws ResourceException on IO error
+ */
+ public static final IndexWriter getIndexWriter(boolean create)
+ throws ResourceException {
+
+ try {
+
+ return (new IndexWriter(getIndexPath(),
+ getAnalyzer(),create));
+
+ }
+ catch (IOException e) {
+ throw new ResourceException(e);
+ }
+
+ } // end getIndexWriter()
+
+
+ /**
+ * Return default reader for application.
+ *
+ * @return default reader
+ * @exception Throws ResourceException on IO error
+ */
+ public static final IndexReader getIndexReader()
+ throws ResourceException {
+
+ try {
+
+ return (IndexReader.open(getIndexPath()));
+
+ }
+ catch (IOException e) {
+ throw new ResourceException(e);
+ }
+
+ } // end getIndexReader()
+
+
+ /**
+ * Return hits for model using default searcher.
+ *
+ * @return hits for model
+ * @param query The query we are processing
+ */
+ public static final Hits getHits(Query query)
+ throws ResourceException {
+
+ try {
+
+ return getSearcher().search(query);
+
+ }
+ catch (IOException e) {
+ throw new ResourceException(e);
+ }
+
+ } // end getHits()
+
+
+ /**
+ * Return hits for value and field
+ *
+ * @param value The term to match ("Smith")
+ * @param field The field to patch ("name")
+ * @return hits for model
+ */
+ public static final Query getQuery(
+ String value,
+ String field) throws ParameterException {
+
+ try {
+
+ return QueryParser.parse(value,field, getAnalyzer());
+
+ }
+ catch (ParseException e) {
+ throw new ParameterException(e);
+ }
+
+ } // end getQuery()
+
+
+ /**
+ * Object for synchronizing deletions to index
+ */
+ private static final Object INDEX_LOCK = new Object();
+
+
+ /**
+ * Delete record matching term from default index.
+ * Access to the index is synchronized.
+ *
+ * @param term The term matching the entry to delete
+ * @exception Throws ResourceException on IO error
+ */
+ public static final int deleteTerm(Term term)
+ throws ResourceException {
+
+ int result = 0;
+ synchronized (INDEX_LOCK) {
+ IndexReader reader = null;
+ try {
+ reader = getIndexReader();
+ result = reader.delete(term);
+ }
+ catch (IOException e) {
+ throw new ResourceException(e);
+ }
+ finally {
+ try {
+ if (reader!=null) reader.close();
+ }
+ catch (IOException e) {
+ // do nothing
+ }
+ }
+ }
+ return result;
+
+ } // end deleteTerm()
+
+
+} // end Engine
+
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]