Author: ssmiweve
Date: 2009-01-16 14:22:45 +0100 (Fri, 16 Jan 2009)
New Revision: 7149

Modified:
   
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractFast4SearchCommand.java
   
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NavigatableESPFastCommand.java
Log:
enhance the two identical methods createNavigationFilterStrings so to handle 
searching with multiple selections.
Issue SKER5040:  (Fast Navigators with multiple selections at one level)

Modified: 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractFast4SearchCommand.java
===================================================================
--- 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractFast4SearchCommand.java
  2009-01-15 19:55:49 UTC (rev 7148)
+++ 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/AbstractFast4SearchCommand.java
  2009-01-16 13:22:45 UTC (rev 7149)
@@ -131,7 +131,10 @@
     // Public --------------------------------------------------------
 
     /** Return all our configured navigator's field:value pairs in one string 
in filter syntax.
+     * Commas in the navigator's parameter value are treated as separators 
between optional selected navigator items.
      *
+     * @deprecated @todo extract to a query transformer, 
FastNavigationQueryTransformer
+     *
      * @return field:value filter string.
      */
     public Collection<String> createNavigationFilterStrings() {
@@ -154,18 +157,26 @@
 //        }
 
         for (final Navigator navigator : 
getSearchConfiguration().getNavigators().values()) {
+
             final StringDataObject navigatedValue = 
datamodel.getParameters().getValue(navigator.getId());
 
             if (navigatedValue != null) {
-                final String value =  navigator.isBoundaryMatch() ? "^\""
-                        + navigatedValue.getString() + "\"$" : "\"" + 
navigatedValue.getString() + "\"";
 
-                // FIXME this test should be encapsulated with the delegated 
filterBuilder
-                if ("adv".equals(getSearchConfiguration().getFiltertype())){
-                    filterStrings.add(" AND " + navigator.getField() + ':'  + 
value );
-                }else{
-                    filterStrings.add("+" + navigator.getField() + ':'  + 
value);
+                // TODO this test should be encapsulated with the delegated 
filterBuilder
+                final StringBuilder filter
+                        = new 
StringBuilder("adv".equals(getSearchConfiguration().getFiltertype()) ? " AND (" 
: " +(");
+
+                // splitting here allows for multiple navigation selections 
within the one navigation level.
+                for(String navSingleValue : 
navigatedValue.getString().split(",")){
+
+                    final String value =  navigator.isBoundaryMatch()
+                            ? "^\"" + navSingleValue + "\"$"
+                            : "\"" + navSingleValue + "\"";
+
+                    filter.append(' ' + navigator.getField() + ':'  + value);
                 }
+
+                filterStrings.add(filter.append(" )").toString());
             }
         }
 

Modified: 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NavigatableESPFastCommand.java
===================================================================
--- 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NavigatableESPFastCommand.java
   2009-01-15 19:55:49 UTC (rev 7148)
+++ 
branches/2.18/generic.sesam/search-command-control/fast/src/main/java/no/sesat/search/mode/command/NavigatableESPFastCommand.java
   2009-01-16 13:22:45 UTC (rev 7149)
@@ -68,7 +68,10 @@
     }
 
     /** Return all our configured navigator's field:value pairs in one string 
in filter syntax.
+     * Commas in the navigator's parameter value are treated as separators 
between optional selected navigator items.
      *
+     * @deprecated @todo extract to a query transformer, 
FastNavigationQueryTransformer
+     *
      * @return field:value filter string.
      */
     public Collection createNavigationFilterStrings() {
@@ -85,20 +88,26 @@
 //        }
 
         for (final Navigator navigator : 
getSearchConfiguration().getNavigators().values()) {
-            final StringDataObject navigatedValue = 
datamodelParameters.get(navigator.getId());
 
+            final StringDataObject navigatedValue = 
datamodel.getParameters().getValue(navigator.getId());
 
             if (navigatedValue != null) {
-                final String value =  navigator.isBoundaryMatch() ? "^\""
-                        + navigatedValue.getString() + "\"$" : "\""
-                        + navigatedValue.getString() + "\"";
 
-                // FIXME this test should be encapsulated with the delegated 
filterBuilder
-                if ("adv".equals(getSearchConfiguration().getFiltertype())){
-                    filterStrings.add(" AND " + navigator.getField() + ':'  + 
value );
-                }else{
-                    filterStrings.add("+" + navigator.getField() + ':'  + 
value);
+                // TODO this test should be encapsulated with the delegated 
filterBuilder
+                final StringBuilder filter
+                        = new 
StringBuilder("adv".equals(getSearchConfiguration().getFiltertype()) ? " AND (" 
: " +(");
+
+                // splitting here allows for multiple navigation selections 
within the one navigation level.
+                for(String navSingleValue : 
navigatedValue.getString().split(",")){
+
+                    final String value =  navigator.isBoundaryMatch()
+                            ? "^\"" + navSingleValue + "\"$"
+                            : "\"" + navSingleValue + "\"";
+
+                    filter.append(' ' + navigator.getField() + ':'  + value);
                 }
+
+                filterStrings.add(filter.append(" )").toString());
             }
         }
 

_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits

Reply via email to