Author: ssmaeklu
Date: 2007-08-21 15:24:32 +0200 (Tue, 21 Aug 2007)
New Revision: 5648

Modified:
   
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/NavigationHelper.java
   
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/OptionNavigationController.java
   
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/ResultPagingNavigationController.java
Log:
SEARCH-3160

Modified: 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/NavigationHelper.java
===================================================================
--- 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/NavigationHelper.java
  2007-08-21 12:19:29 UTC (rev 5647)
+++ 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/NavigationHelper.java
  2007-08-21 13:24:32 UTC (rev 5648)
@@ -7,15 +7,17 @@
 
 package no.sesat.search.view.navigation;
 
+import no.sesat.search.datamodel.DataModel;
+import no.sesat.search.datamodel.generic.StringDataObject;
+import org.apache.log4j.Logger;
+
 import java.io.UnsupportedEncodingException;
 import java.net.URLEncoder;
+import java.util.HashMap;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
-import no.sesat.search.datamodel.DataModel;
-import no.sesat.search.datamodel.generic.StringDataObject;
-import org.apache.log4j.Logger;
-
 /**
  * All public methods require take a datamodel argument. This datamodel must 
in VIEW_CONSTRUCTION state.
  * It essentially means that this helper class can only be used from 
jsp/velocity code.
@@ -41,64 +43,94 @@
      * @param value     the specific field you are using
      * @return a url fragemt to use
      */
+    public static String getUrlParameters(
+            final DataModel datamodel,
+            final String navigator,
+            final String value) {
+
+        final NavigationConfig.Nav navEntry = 
getConfig(datamodel).getNavMap().get(navigator);
+        return getUrlFragment(getUrlParameters(datamodel, navEntry, value, 
null));
+    }
+
     public static String getUrlFragment(
             final DataModel datamodel,
             final String navigator,
             final String value) {
 
         final NavigationConfig.Nav navEntry = 
getConfig(datamodel).getNavMap().get(navigator);
-        return getUrlFragment(datamodel, navEntry, value, null);
+        return getUrlFragment(getUrlParameters(datamodel, navEntry, value, 
null));
     }
 
+    public static String getUrlFragment(
+            final DataModel datamodel,
+            final NavigationConfig.Nav navEntry,
+            final String value,
+            final String navigatorName) {
+
+        return getUrlFragment(getUrlParameters(datamodel, navEntry, value, 
navigatorName));
+    }
+
     /**
      * @param navEntry
      * @param value
      * @param navigatorName
      * @return
      */
-    public static String getUrlFragment(
+    public static Map<String, String> getUrlParameters(
             final DataModel datamodel,
             final NavigationConfig.Nav navEntry,
             final String value,
             final String navigatorName) {
 
-        final StringBuilder sb = new StringBuilder();
+        final Map<String, String> parameters = new HashMap<String, String>();
 
-        String tab = 
datamodel.getParameters().getValue("c").getUtf8UrlEncoded();
+        if (navEntry.getTab() != null) {
+            addParameter(parameters, "c", navEntry.getTab());
+        }
 
-        sb.append("c=").append(tab);
-
         if (!navEntry.isExcludeQuery()) {
-            addParameter(sb, "q", datamodel.getQuery().getUtf8UrlEncoded());
+            addParameter(parameters, "q", 
datamodel.getQuery().getUtf8UrlEncoded());
         }
         if (value != null && value.length() > 0) {
-            addParameter(sb, enc(navEntry.getField()), enc(value));
+            addParameter(parameters, enc(navEntry.getField()), enc(value));
             if (navEntry.isRealNavigator() && navigatorName != null) {
-                addParameter(sb, "nav_" + enc(navEntry.getId()), 
enc(navigatorName));
+                addParameter(parameters, "nav_" + enc(navEntry.getId()), 
enc(navigatorName));
             }
         }
         if (!navEntry.isOut()) {
-            addParentFragment(datamodel, sb, navEntry);
+            addParentFragment(datamodel, parameters, navEntry);
             for (NavigationConfig.Navigation navigation : 
getConfig(datamodel).getNavigationList()) {
                 if (navigation != navEntry.getNavigation()) {
-                    addNavigationFragments(datamodel, navigation, sb, 
navEntry);
+                    addNavigationFragments(datamodel, navigation, parameters, 
navEntry);
                 }
             }
         }
         for (String key : navEntry.getStaticParameters().keySet()) {
-            addFragment(sb, navEntry, key, 
navEntry.getStaticParameters().get(key));
+            addFragment(parameters, navEntry, key, 
navEntry.getStaticParameters().get(key));
         }
-        return sb.toString();
+
+        if (!parameters.containsKey("c")) {
+            addParameter(parameters, "c", 
datamodel.getParameters().getValue("c").getUtf8UrlEncoded());
+        }
+
+        return parameters;
     }
 
-    private static void addParameter(final StringBuilder sb, final String 
parameter, final String value) {
-        if (sb.length() > 0) {
-            sb.append("&amp;");
+    public static String getUrlFragment(final Map<String, String> parameters) {
+        final StringBuilder builder = new StringBuilder();
+
+        for (final String parameterName : parameters.keySet()) {
+            
builder.append(parameterName).append("=").append(parameters.get(parameterName));
+            builder.append("&amp;");
         }
 
-        sb.append(parameter).append('=').append(value);
+        return builder.toString().substring(0, builder.lastIndexOf("&"));
     }
 
+    private static void addParameter(final Map parameters, final String 
parameter, final String value) {
+        parameters.put(parameter, value);
+    }
+
     public static NavigationConfig getConfig(final DataModel datamodel){
 
         return datamodel.getNavigation().getConfiguration();
@@ -127,12 +159,12 @@
     private static void addNavigationFragments(
             final DataModel datamodel,
             final NavigationConfig.Navigation navigation,
-            final StringBuilder sb,
+            final Map parameters,
             final NavigationConfig.Nav navEntry) {
 
         final Set<String> fieldFilterSet = new HashSet<String>();
         for (NavigationConfig.Nav nav : navigation.getNavList()) {
-            addNavigationFragment(datamodel, fieldFilterSet, nav, sb, 
navEntry);
+            addNavigationFragment(datamodel, fieldFilterSet, nav, parameters, 
navEntry);
         }
     }
 
@@ -140,21 +172,23 @@
             final DataModel datamodel,
             final Set<String> fieldFilterSet,
             final NavigationConfig.Nav nav,
-            final StringBuilder sb,
+            final Map parameters,
             final NavigationConfig.Nav navEntry) {
 
         StringDataObject fieldValue = 
datamodel.getParameters().getValue(nav.getField());
         if (!fieldFilterSet.contains(nav.getField())) {
-            addPreviousField(datamodel, fieldValue, sb, navEntry, 
nav.getField());
+            if (! nav.isOut()) {
+                addPreviousField(datamodel, fieldValue, parameters, navEntry, 
nav.getField());
+            }
             fieldFilterSet.add(nav.getField());
             for (String staticKey : nav.getStaticParameters().keySet()) {
                 fieldValue = datamodel.getParameters().getValue(staticKey);
                 if (!fieldFilterSet.contains(staticKey)) {
-                    addPreviousField(datamodel, fieldValue, sb, navEntry, 
staticKey);
+                    addPreviousField(datamodel, fieldValue, parameters, 
navEntry, staticKey);
                 }
             }
             for (NavigationConfig.Nav childNav : nav.getChildNavs()) {
-                addNavigationFragment(datamodel, fieldFilterSet, childNav, sb, 
navEntry);
+                addNavigationFragment(datamodel, fieldFilterSet, childNav, 
parameters, navEntry);
             }
         }
     }
@@ -162,26 +196,26 @@
     private static void addPreviousField(
             final DataModel datamodel,
             StringDataObject fieldValue,
-            final StringBuilder sb,
+            final Map parameters,
             final NavigationConfig.Nav navEntry,
             final String fieldName) {
 
-        if (fieldValue != null && addFragment(sb, navEntry, fieldName, 
fieldValue.getString())) {
+        if (fieldValue != null && addFragment(parameters, navEntry, fieldName, 
fieldValue.getString())) {
             fieldValue = datamodel.getParameters().getValue("nav_" + 
fieldName);
             if (fieldValue != null) {
-                addFragment(sb, navEntry, "nav_" + fieldName, 
fieldValue.getString());
+                addFragment(parameters, navEntry, "nav_" + fieldName, 
fieldValue.getString());
             }
         }
     }
 
     private static boolean addFragment(
 
-            final StringBuilder sb,final NavigationConfig.Nav nav,
+            final Map parameters, final NavigationConfig.Nav nav,
             final String id,
             final String value) {
 
         if (!nav.getNavigation().getResetNavSet().contains(id)) {
-            addParameter(sb, enc(id), enc(value));
+            addParameter(parameters, enc(id), enc(value));
             return true;
         }
         return false;
@@ -189,14 +223,14 @@
 
     private static void addParentFragment(
             final DataModel datamodel,
-            final StringBuilder sb,
+            final Map parameters,
             final NavigationConfig.Nav navEntry) {
 
         NavigationConfig.Nav parentNav = navEntry.getParent();
         if (parentNav != null) {
             StringDataObject fieldValue = 
datamodel.getParameters().getValue(parentNav.getField());
-            addPreviousField(datamodel, fieldValue, sb, navEntry, 
parentNav.getField());
-            addParentFragment(datamodel, sb, parentNav);
+            addPreviousField(datamodel, fieldValue, parameters, navEntry, 
parentNav.getField());
+            addParentFragment(datamodel, parameters, parentNav);
         }
     }
 

Modified: 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/OptionNavigationController.java
===================================================================
--- 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/OptionNavigationController.java
        2007-08-21 12:19:29 UTC (rev 5647)
+++ 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/OptionNavigationController.java
        2007-08-21 13:24:32 UTC (rev 5648)
@@ -8,18 +8,19 @@
  */
 package no.sesat.search.view.navigation;
 
+import no.sesat.search.datamodel.DataModel;
+import no.sesat.search.datamodel.generic.StringDataObject;
+import no.sesat.search.datamodel.generic.StringDataObjectSupport;
+import no.sesat.search.result.BasicNavigationItem;
 import no.sesat.search.result.NavigationItem;
 import no.sesat.search.result.ResultItem;
 import no.sesat.search.result.ResultList;
-import no.sesat.search.result.BasicNavigationItem;
-import no.sesat.search.datamodel.DataModel;
-import no.sesat.search.datamodel.generic.StringDataObject;
-import no.sesat.search.datamodel.generic.StringDataObjectSupport;
 
-import java.util.List;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
 
 /**
  *
@@ -121,9 +122,15 @@
                 }
             }
             if (value != null) {
+                final Map<String, String> urlParameters = 
NavigationHelper.getUrlParameters(dataModel, config.getParent(), value, null);
+
+                if (option.getTab() != null) {
+                    urlParameters.put("c", option.getTab());
+                }
+
                 final NavigationItem navigator = new BasicNavigationItem(
                         option.getDisplayName(),
-                        NavigationHelper.getUrlFragment(dataModel, 
config.getParent(), value, null),
+                        NavigationHelper.getUrlFragment(urlParameters),
                         -1);
                 parentResult.addResult(navigator);
                 if (optionSelectedValue == null && 
isOptionDefaultSelected(searchResult, option)) {

Modified: 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/ResultPagingNavigationController.java
===================================================================
--- 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/ResultPagingNavigationController.java
  2007-08-21 12:19:29 UTC (rev 5647)
+++ 
trunk/view-control-spi/src/main/java/no/sesat/search/view/navigation/ResultPagingNavigationController.java
  2007-08-21 13:24:32 UTC (rev 5648)
@@ -84,7 +84,7 @@
 
         public int getFirstVisiblePage() {
 
-            int firstPage = 0;
+            int firstPage;
             int n = (offset/pageSize);
             if (n > 5)
                 if ( ( getNumberOfPages() - getCurrentPage() ) < 5) {

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

Reply via email to