Author: cstamas
Date: Wed Dec 29 13:46:12 2010
New Revision: 1053635

URL: http://svn.apache.org/viewvc?rev=1053635&view=rev
Log:
Introduced search expressions, and deprecated methods to promote use of 
SearchExpressions instead of plain strings.

Added:
    maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
   (with props)
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
   (with props)
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
   (with props)
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
   (with props)
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
   (with props)
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
   (with props)
Modified:
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
    
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/QueryCreator.java

Modified: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java?rev=1053635&r1=1053634&r2=1053635&view=diff
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
 (original)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultNexusIndexer.java
 Wed Dec 29 13:46:12 2010
@@ -42,6 +42,7 @@ import org.apache.maven.index.context.In
 import org.apache.maven.index.context.MergedIndexingContext;
 import org.apache.maven.index.context.StaticContextMemberProvider;
 import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
+import org.apache.maven.index.expr.SearchExpression;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.AbstractLogEnabled;
@@ -449,6 +450,19 @@ public class DefaultNexusIndexer
         }
     }
 
+    public Query constructQuery( Field field, SearchExpression expression )
+        throws IllegalArgumentException
+    {
+        try
+        {
+            return queryCreator.constructQuery( field, expression );
+        }
+        catch ( ParseException e )
+        {
+            throw new IllegalArgumentException( e );
+        }
+    }
+
     // 
----------------------------------------------------------------------------
     // Identification
     // 
----------------------------------------------------------------------------

Modified: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java?rev=1053635&r1=1053634&r2=1053635&view=diff
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
 (original)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/DefaultQueryCreator.java
 Wed Dec 29 13:46:12 2010
@@ -36,6 +36,8 @@ import org.apache.lucene.util.Version;
 import org.apache.maven.index.context.NexusAnalyzer;
 import org.apache.maven.index.creator.JarFileContentsIndexCreator;
 import org.apache.maven.index.creator.MinimalArtifactInfoIndexCreator;
+import org.apache.maven.index.expr.SearchExpression;
+import org.apache.maven.index.expr.SearchTyped;
 import org.codehaus.plexus.component.annotations.Component;
 import org.codehaus.plexus.component.annotations.Requirement;
 import org.codehaus.plexus.logging.Logger;
@@ -91,6 +93,19 @@ public class DefaultQueryCreator
         return lastField;
     }
 
+    public Query constructQuery( final Field field, final SearchExpression 
expression )
+        throws ParseException
+    {
+        SearchType searchType = SearchType.SCORED;
+
+        if ( expression instanceof SearchTyped )
+        {
+            searchType = ( (SearchTyped) expression ).getSearchType();
+        }
+
+        return constructQuery( field, expression.getStringValue(), searchType 
);
+    }
+
     public Query constructQuery( final Field field, final String query, final 
SearchType type )
         throws ParseException
     {

Modified: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java?rev=1053635&r1=1053634&r2=1053635&view=diff
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
 (original)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/NexusIndexer.java
 Wed Dec 29 13:46:12 2010
@@ -31,6 +31,7 @@ import org.apache.maven.index.context.Co
 import org.apache.maven.index.context.IndexCreator;
 import org.apache.maven.index.context.IndexingContext;
 import org.apache.maven.index.context.UnsupportedExistingLuceneIndexException;
+import org.apache.maven.index.expr.SearchExpression;
 import org.apache.maven.index.packer.IndexPacker;
 import org.apache.maven.index.updater.IndexUpdater;
 
@@ -310,11 +311,22 @@ public interface NexusIndexer
      * @param query
      * @param type
      * @return
+     * @deprecated Use {...@link #constructQuery(Field, SearchExpression)} 
instead.
      */
     Query constructQuery( Field field, String query, SearchType type )
         throws IllegalArgumentException;
 
-    // throws ParseException;
+    /**
+     * Helper method to construct Lucene query for given field without need 
for knowledge (on caller side) HOW is a
+     * field indexed, and WHAT query is needed to achieve that.
+     * 
+     * @param field
+     * @param query
+     * @param type
+     * @return
+     */
+    Query constructQuery( Field field, SearchExpression expression )
+        throws IllegalArgumentException;
 
     // 
----------------------------------------------------------------------------
     // Identification

Modified: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/QueryCreator.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/QueryCreator.java?rev=1053635&r1=1053634&r2=1053635&view=diff
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/QueryCreator.java
 (original)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/QueryCreator.java
 Wed Dec 29 13:46:12 2010
@@ -18,10 +18,9 @@
  */
 package org.apache.maven.index;
 
-import java.util.Collection;
-
 import org.apache.lucene.queryParser.ParseException;
 import org.apache.lucene.search.Query;
+import org.apache.maven.index.expr.SearchExpression;
 
 /**
  * A component the creates Lucene Queries from "human written" queires, but 
also helps client applications to assemble
@@ -52,6 +51,20 @@ public interface QueryCreator
      * @return
      * @throws ParseException if query parsing is unsuccesful.
      */
+    Query constructQuery( Field field, SearchExpression expression )
+        throws ParseException;
+
+    /**
+     * Constructs query by parsing the query string, using field as default 
field. This method should be use to
+     * construct queries (single term or phrase queries) against <b>single 
field</b>.
+     * 
+     * @param field
+     * @param query
+     * @param type
+     * @return
+     * @throws ParseException if query parsing is unsuccesful.
+     * @deprecated Use {...@link #constructQuery(Field, SearchExpression)} 
instead.
+     */
     Query constructQuery( Field field, String query, SearchType type )
         throws ParseException;
 
@@ -62,8 +75,7 @@ public interface QueryCreator
      * @param field
      * @param query
      * @return query if successfully parsed, or null.
-     * @deprecated Use {...@link #constructQuery(Collection, String)} or
-     *             {...@link QueryCreator#constructQuery(IndexerField, String, 
SearchType)} methods instead!
+     * @deprecated Use {...@link #constructQuery(Field, SearchExpression)} 
instead.
      */
     Query constructQuery( String field, String query );
 

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,34 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+/**
+ * SearchExpression is a wrapper interface for expressions representable as 
plain strings to be used within searches.
+ * 
+ * @author cstamas
+ */
+public interface SearchExpression
+{
+    /**
+     * Returns the expression value as plain java String.
+     * 
+     * @return
+     */
+    String getStringValue();
+}

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchExpression.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,31 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+import org.apache.maven.index.SearchType;
+
+/**
+ * SearchTyped is a interface that describes the wanted search type to be used.
+ * 
+ * @author cstamas
+ */
+public interface SearchTyped
+{
+    SearchType getSearchType();
+}

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTyped.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,51 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+import org.apache.maven.index.SearchType;
+
+/**
+ * A search typed implementation of string backed search expression.
+ * 
+ * @author cstamas
+ */
+public class SearchTypedStringSearchExpression
+    extends StringSearchExpression
+    implements SearchTyped
+{
+    private final SearchType searchType;
+
+    public SearchTypedStringSearchExpression( final String expression, final 
SearchType searchType )
+        throws IllegalArgumentException
+    {
+        super( expression );
+
+        if ( searchType == null )
+        {
+            throw new IllegalArgumentException( "SearchType cannot be null!" );
+        }
+
+        this.searchType = searchType;
+    }
+
+    public SearchType getSearchType()
+    {
+        return searchType;
+    }
+}

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SearchTypedStringSearchExpression.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,38 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+import org.apache.maven.index.SearchType;
+
+/**
+ * SourcedSearchExpression is a search expression usually "sourced" or backed 
from some programmatic source (drop down
+ * with pre-filled values, values from previous searches, etc), and we already 
know it is complete, exact value that we
+ * want to search for. Indexer will do it's best to match exactly the provided 
string value, no more no less.
+ * 
+ * @author cstamas
+ */
+public class SourcedSearchExpression
+    extends SearchTypedStringSearchExpression
+{
+    public SourcedSearchExpression( final String expression )
+        throws IllegalArgumentException
+    {
+        super( expression, SearchType.EXACT );
+    }
+}

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/SourcedSearchExpression.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,45 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+/**
+ * A simple string based implementation of SearchExpression that is immutable.
+ * 
+ * @author cstamas
+ */
+public class StringSearchExpression
+    implements SearchExpression
+{
+    private final String expression;
+
+    public StringSearchExpression( final String expression )
+    {
+        if ( expression == null || expression.trim().length() == 0 )
+        {
+            throw new IllegalArgumentException( "The expression's string 
cannot be empty!" );
+        }
+
+        this.expression = expression;
+    }
+
+    public String getStringValue()
+    {
+        return expression;
+    }
+}
\ No newline at end of file

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/StringSearchExpression.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision

Added: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
URL: 
http://svn.apache.org/viewvc/maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java?rev=1053635&view=auto
==============================================================================
--- 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
 (added)
+++ 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
 Wed Dec 29 13:46:12 2010
@@ -0,0 +1,39 @@
+/**
+ * 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.
+ */
+package org.apache.maven.index.expr;
+
+import org.apache.maven.index.SearchType;
+
+/**
+ * UserInputSearchExpression is a search expression usually coming from user 
input (like some UI dialogue, UI element or
+ * CLI). It will be normalized and tokenized and then a search will happen 
against it. Search expressions of this type
+ * will always provide "broader" (scored, not exact) results, since it 
defaults to prefix searches and assumes
+ * "non complete" input.
+ * 
+ * @author cstamas
+ */
+public class UserInputSearchExpression
+    extends SearchTypedStringSearchExpression
+{
+    public UserInputSearchExpression( final String expression )
+        throws IllegalArgumentException
+    {
+        super( expression, SearchType.SCORED );
+    }
+}

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
maven/indexer/trunk/indexer-core/src/main/java/org/apache/maven/index/expr/UserInputSearchExpression.java
------------------------------------------------------------------------------
    svn:keywords = Author Date Id Revision


Reply via email to