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("&");
+ 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("&");
}
- 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