Author: snoopdave
Date: Mon Aug 19 12:23:35 2013
New Revision: 1515383
URL: http://svn.apache.org/r1515383
Log:
Use proper escaping
Modified:
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
roller/branches/roller_5.0/weblogger-webapp/src/main/webapp/WEB-INF/velocity/feeds.vm
Modified:
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java
URL:
http://svn.apache.org/viewvc/roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java?rev=1515383&r1=1515382&r2=1515383&view=diff
==============================================================================
---
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java
(original)
+++
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java
Mon Aug 19 12:23:35 2013
@@ -26,23 +26,25 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import org.apache.commons.lang.StringEscapeUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.lucene.document.Document;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.TopFieldDocs;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.URLStrategy;
+import org.apache.roller.weblogger.business.WeblogEntryManager;
import org.apache.roller.weblogger.business.Weblogger;
import org.apache.roller.weblogger.business.WebloggerFactory;
-import org.apache.roller.weblogger.business.WeblogEntryManager;
import org.apache.roller.weblogger.business.search.FieldConstants;
import org.apache.roller.weblogger.business.search.IndexManager;
import org.apache.roller.weblogger.business.search.operations.SearchOperation;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
-import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.Weblog;
+import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.wrapper.WeblogCategoryWrapper;
import org.apache.roller.weblogger.pojos.wrapper.WeblogEntryWrapper;
import org.apache.roller.weblogger.pojos.wrapper.WeblogWrapper;
@@ -50,225 +52,252 @@ import org.apache.roller.weblogger.ui.re
import org.apache.roller.weblogger.ui.rendering.pagers.SearchResultsFeedPager;
import org.apache.roller.weblogger.ui.rendering.util.WeblogFeedRequest;
import org.apache.roller.weblogger.ui.rendering.util.WeblogRequest;
-
+import org.apache.roller.weblogger.util.Utilities;
/**
- * Extends normal page renderer model to represent search results for Atom
feeds.
- *
+ * Extends normal page renderer model to represent search results for Atom
+ * feeds.
+ *
* Also adds some new methods which are specific only to search results.
*/
public class SearchResultsFeedModel implements Model {
- private static Log log = LogFactory.getLog(SearchResultsFeedModel.class);
-
- private WeblogFeedRequest feedRequest = null;
- private URLStrategy urlStrategy = null;
- private Weblog weblog = null;
-
- // the pager used by the 3.0+ rendering system
- private SearchResultsFeedPager pager = null;
-
- private List results = new LinkedList();
-
- private Set categories = new TreeSet();
-
- private boolean websiteSpecificSearch = true;
-
- private int hits = 0;
- private int offset = 0;
- private int limit = 0;
-
- private int entryCount = 0;
-
-
- public String getModelName() {
- return "model";
- }
-
-
- public void init(Map initData) throws WebloggerException {
-
- // we expect the init data to contain a weblogRequest object
- WeblogRequest weblogRequest = (WeblogRequest)
initData.get("parsedRequest");
- if(weblogRequest == null) {
- throw new WebloggerException("expected weblogRequest from init
data");
- }
-
- if(weblogRequest instanceof WeblogFeedRequest) {
- this.feedRequest = (WeblogFeedRequest) weblogRequest;
- } else {
- throw new WebloggerException("weblogRequest is not a
WeblogFeedRequest."+
- " FeedModel only supports feed requests.");
- }
-
- // look for url strategy
- urlStrategy = (URLStrategy) initData.get("urlStrategy");
- if(urlStrategy == null) {
- urlStrategy = WebloggerFactory.getWeblogger().getUrlStrategy();
- }
-
- // extract weblog object
- weblog = feedRequest.getWeblog();
-
- String pagerUrl = urlStrategy.getWeblogFeedURL(weblog,
- feedRequest.getLocale(), feedRequest.getType(),
- feedRequest.getFormat(), null, null, /* cat and term are null
but added to the url in the pager */
- null, false, true);
-
- // if there is no query, then we are done
- if(feedRequest.getTerm() == null) {
- pager = new SearchResultsFeedPager(urlStrategy, pagerUrl,
feedRequest.getPage(),
- feedRequest, results, false);
- return;
- }
-
- this.entryCount =
WebloggerRuntimeConfig.getIntProperty("site.newsfeeds.defaultEntries");
-
- // setup the search
- IndexManager indexMgr =
WebloggerFactory.getWeblogger().getIndexManager();
-
- SearchOperation search = new SearchOperation(indexMgr);
- search.setTerm(feedRequest.getTerm());
-
-
if(WebloggerRuntimeConfig.isSiteWideWeblog(feedRequest.getWeblogHandle())) {
- this.websiteSpecificSearch = false;
- } else {
- search.setWebsiteHandle(feedRequest.getWeblogHandle());
- }
-
- if(StringUtils.isNotEmpty(feedRequest.getWeblogCategoryName())) {
- search.setCategory(feedRequest.getWeblogCategoryName());
- }
-
- // execute search
- indexMgr.executeIndexOperationNow(search);
-
- if (search.getResultsCount() > -1) {
- Hits hits = search.getResults();
- this.hits = search.getResultsCount();
-
- // Convert the Hits into WeblogEntryData instances.
- convertHitsToEntries(hits);
- }
-
- // search completed, setup pager based on results
- pager = new SearchResultsFeedPager(urlStrategy, pagerUrl,
feedRequest.getPage(),
- feedRequest, results, (hits > (offset+limit)));
- }
-
- public Pager getSearchResultsPager() {
- return pager;
- }
-
- private void convertHitsToEntries(Hits hits) throws WebloggerException {
-
- // determine offset
- this.offset = feedRequest.getPage() * this.entryCount;
- if(this.offset >= hits.length()) {
- this.offset = 0;
- }
-
- // determine limit
- this.limit = this.entryCount;
- if(this.offset + this.limit > hits.length()) {
- this.limit = hits.length() - this.offset;
- }
-
- try {
- TreeSet categories = new TreeSet();
- Weblogger roller = WebloggerFactory.getWeblogger();
- WeblogEntryManager weblogMgr = roller.getWeblogEntryManager();
-
- WeblogEntry entry = null;
- Document doc = null;
- String handle = null;
- Timestamp now = new Timestamp(new Date().getTime());
- for(int i = offset; i < offset+limit; i++) {
-
- entry = null; // reset for each iteration
-
- doc = hits.doc(i);
- handle =
doc.getField(FieldConstants.WEBSITE_HANDLE).stringValue();
-
- if(websiteSpecificSearch &&
- handle.equals(feedRequest.getWeblogHandle())) {
-
- entry = weblogMgr.getWeblogEntry(
- doc.getField(FieldConstants.ID).stringValue());
- } else {
-
- entry = weblogMgr.getWeblogEntry(
- doc.getField(FieldConstants.ID).stringValue());
-
- if (doc.getField(FieldConstants.CATEGORY) != null) {
- categories.add(
-
doc.getField(FieldConstants.CATEGORY).stringValue());
- }
- }
-
- // maybe null if search result returned inactive user
- // or entry's user is not the requested user.
- // but don't return future posts
- if (entry != null && entry.getPubTime().before(now)) {
- results.add(WeblogEntryWrapper.wrap(entry, urlStrategy));
- }
- }
-
- if(categories.size() > 0) {
- this.categories = categories;
- }
- } catch(IOException e) {
- throw new WebloggerException(e);
- }
- }
-
- /**
- * Get weblog being displayed.
- */
- public WeblogWrapper getWeblog() {
- return WeblogWrapper.wrap(weblog, urlStrategy);
- }
-
- public String getTerm() {
- return (feedRequest.getTerm() == null) ? "" : feedRequest.getTerm();
- }
-
- public int getHits() {
- return hits;
- }
-
- public int getOffset() {
- return offset;
- }
-
- public int getPage() {
- return feedRequest.getPage();
- }
-
- public int getLimit() {
- return limit;
- }
-
- public List getResults() {
- return results;
- }
-
- public Set getCategories() {
- return categories;
- }
-
- public boolean isWebsiteSpecificSearch() {
- return websiteSpecificSearch;
- }
-
- public String getCategoryPath() {
- return feedRequest.getWeblogCategoryName();
- }
-
- public WeblogCategoryWrapper getWeblogCategory() {
- if(feedRequest.getWeblogCategory() != null) {
- return WeblogCategoryWrapper.wrap(feedRequest.getWeblogCategory(),
urlStrategy);
- }
- return null;
- }
-}
+ private static Log log =
LogFactory.getLog(SearchResultsFeedModel.class);
+
+ private WeblogFeedRequest feedRequest = null;
+ private URLStrategy urlStrategy = null;
+ private Weblog weblog = null;
+
+ // the pager used by the 3.0+ rendering system
+ private SearchResultsFeedPager pager = null;
+
+ private List results = new LinkedList();
+
+ private Set categories = new TreeSet();
+
+ private boolean websiteSpecificSearch = true;
+
+ private int hits = 0;
+ private int offset = 0;
+ private int limit = 0;
+
+ private int entryCount = 0;
+
+ public String getModelName() {
+ return "model";
+ }
+
+ public void init(Map initData) throws WebloggerException {
+
+ // we expect the init data to contain a weblogRequest object
+ WeblogRequest weblogRequest = (WeblogRequest) initData
+ .get("parsedRequest");
+ if (weblogRequest == null) {
+ throw new WebloggerException(
+ "expected weblogRequest from init
data");
+ }
+
+ if (weblogRequest instanceof WeblogFeedRequest) {
+ this.feedRequest = (WeblogFeedRequest) weblogRequest;
+ } else {
+ throw new WebloggerException(
+ "weblogRequest is not a
WeblogFeedRequest."
+ + " FeedModel only
supports feed requests.");
+ }
+
+ // look for url strategy
+ urlStrategy = (URLStrategy) initData.get("urlStrategy");
+ if (urlStrategy == null) {
+ urlStrategy =
WebloggerFactory.getWeblogger().getUrlStrategy();
+ }
+
+ // extract weblog object
+ weblog = feedRequest.getWeblog();
+
+ String pagerUrl = urlStrategy.getWeblogFeedURL(weblog,
+ feedRequest.getLocale(), feedRequest.getType(),
+ feedRequest.getFormat(), null, null, /*
+
* cat and term are null but
+
* added to the url in the
+
* pager
+
*/
+ null, false, true);
+
+ // if there is no query, then we are done
+ if (feedRequest.getTerm() == null) {
+ pager = new SearchResultsFeedPager(urlStrategy,
pagerUrl,
+ feedRequest.getPage(), feedRequest,
results, false);
+ return;
+ }
+
+ this.entryCount = WebloggerRuntimeConfig
+
.getIntProperty("site.newsfeeds.defaultEntries");
+
+ // setup the search
+ IndexManager indexMgr = WebloggerFactory.getWeblogger()
+ .getIndexManager();
+
+ SearchOperation search = new SearchOperation(indexMgr);
+ search.setTerm(feedRequest.getTerm());
+
+ if (WebloggerRuntimeConfig.isSiteWideWeblog(feedRequest
+ .getWeblogHandle())) {
+ this.websiteSpecificSearch = false;
+ } else {
+ search.setWebsiteHandle(feedRequest.getWeblogHandle());
+ }
+
+ if
(StringUtils.isNotEmpty(feedRequest.getWeblogCategoryName())) {
+ search.setCategory(feedRequest.getWeblogCategoryName());
+ }
+
+ // execute search
+ indexMgr.executeIndexOperationNow(search);
+
+ if (search.getResultsCount() > -1) {
+
+ TopFieldDocs docs = search.getResults();
+ ScoreDoc[] hits = docs.scoreDocs;
+ this.hits = search.getResultsCount();
+
+ // Convert the Hits into WeblogEntryData instances.
+ convertHitsToEntries(hits, search);
+ }
+
+ // search completed, setup pager based on results
+ pager = new SearchResultsFeedPager(urlStrategy, pagerUrl,
+ feedRequest.getPage(), feedRequest, results,
+ (hits > (offset + limit)));
+ }
+
+ public Pager getSearchResultsPager() {
+ return pager;
+ }
+
+ /**
+ * Convert hits to entries.
+ *
+ * @param hits
+ * the hits
+ * @param search
+ * the search
+ * @throws WebloggerException
+ * the weblogger exception
+ */
+ private void convertHitsToEntries(ScoreDoc[] hits, SearchOperation
search)
+ throws WebloggerException {
+
+ // determine offset
+ this.offset = feedRequest.getPage() * this.entryCount;
+ if (this.offset >= hits.length) {
+ this.offset = 0;
+ }
+
+ // determine limit
+ this.limit = this.entryCount;
+ if (this.offset + this.limit > hits.length) {
+ this.limit = hits.length - this.offset;
+ }
+
+ try {
+ TreeSet categories = new TreeSet();
+ Weblogger roller = WebloggerFactory.getWeblogger();
+ WeblogEntryManager weblogMgr =
roller.getWeblogEntryManager();
+
+ WeblogEntry entry = null;
+ Document doc = null;
+ String handle = null;
+ Timestamp now = new Timestamp(new Date().getTime());
+ for (int i = offset; i < offset + limit; i++) {
+
+ entry = null; // reset for each iteration
+
+ doc = search.getSearcher().doc(hits[i].doc);
+ handle =
doc.getField(FieldConstants.WEBSITE_HANDLE)
+ .stringValue();
+
+ if (websiteSpecificSearch
+ &&
handle.equals(feedRequest.getWeblogHandle())) {
+
+ entry =
weblogMgr.getWeblogEntry(doc.getField(
+
FieldConstants.ID).stringValue());
+ } else {
+
+ entry =
weblogMgr.getWeblogEntry(doc.getField(
+
FieldConstants.ID).stringValue());
+
+ if
(doc.getField(FieldConstants.CATEGORY) != null) {
+
categories.add(doc.getField(FieldConstants.CATEGORY)
+ .stringValue());
+ }
+ }
+
+ // maybe null if search result returned
inactive user
+ // or entry's user is not the requested user.
+ // but don't return future posts
+ if (entry != null &&
entry.getPubTime().before(now)) {
+
results.add(WeblogEntryWrapper.wrap(entry, urlStrategy));
+ }
+ }
+
+ if (categories.size() > 0) {
+ this.categories = categories;
+ }
+ } catch (IOException e) {
+ throw new WebloggerException(e);
+ }
+ }
+
+ /**
+ * Get weblog being displayed.
+ */
+ public WeblogWrapper getWeblog() {
+ return WeblogWrapper.wrap(weblog, urlStrategy);
+ }
+
+ public String getTerm() {
+ String query =feedRequest.getTerm() ;
+ return (query == null)
+ ? "" :
StringEscapeUtils.escapeXml(Utilities.escapeHTML(query));
+ }
+
+ public int getHits() {
+ return hits;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public int getPage() {
+ return feedRequest.getPage();
+ }
+
+ public int getLimit() {
+ return limit;
+ }
+
+ public List getResults() {
+ return results;
+ }
+
+ public Set getCategories() {
+ return categories;
+ }
+
+ public boolean isWebsiteSpecificSearch() {
+ return websiteSpecificSearch;
+ }
+
+ public String getCategoryPath() {
+ return feedRequest.getWeblogCategoryName();
+ }
+
+ public WeblogCategoryWrapper getWeblogCategory() {
+ if (feedRequest.getWeblogCategory() != null) {
+ return
WeblogCategoryWrapper.wrap(feedRequest.getWeblogCategory(),
+ urlStrategy);
+ }
+ return null;
+ }
+}
\ No newline at end of file
Modified:
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
URL:
http://svn.apache.org/viewvc/roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java?rev=1515383&r1=1515382&r2=1515383&view=diff
==============================================================================
---
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
(original)
+++
roller/branches/roller_5.0/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
Mon Aug 19 12:23:35 2013
@@ -25,19 +25,23 @@ import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
import java.util.TreeSet;
+
import org.apache.commons.collections.comparators.ReverseComparator;
-import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.StringEscapeUtils;
+import org.apache.commons.lang.StringUtils;
import org.apache.lucene.document.Document;
-import org.apache.lucene.search.Hits;
+import org.apache.lucene.search.ScoreDoc;
+import org.apache.lucene.search.TopFieldDocs;
+import org.apache.roller.util.DateUtil;
import org.apache.roller.weblogger.WebloggerException;
+import org.apache.roller.weblogger.business.URLStrategy;
+import org.apache.roller.weblogger.business.WeblogEntryManager;
+import org.apache.roller.weblogger.business.Weblogger;
+import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.search.FieldConstants;
+import org.apache.roller.weblogger.business.search.IndexManager;
import org.apache.roller.weblogger.business.search.operations.SearchOperation;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
-import org.apache.roller.weblogger.business.search.IndexManager;
-import org.apache.roller.weblogger.business.Weblogger;
-import org.apache.roller.weblogger.business.WebloggerFactory;
-import org.apache.roller.weblogger.business.WeblogEntryManager;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.WeblogEntryWrapperComparator;
import org.apache.roller.weblogger.pojos.wrapper.WeblogCategoryWrapper;
@@ -45,240 +49,263 @@ import org.apache.roller.weblogger.pojos
import org.apache.roller.weblogger.ui.rendering.pagers.SearchResultsPager;
import org.apache.roller.weblogger.ui.rendering.pagers.WeblogEntriesPager;
import org.apache.roller.weblogger.ui.rendering.util.WeblogSearchRequest;
-import org.apache.roller.util.DateUtil;
-import org.apache.roller.weblogger.business.URLStrategy;
import org.apache.roller.weblogger.util.I18nMessages;
import org.apache.roller.weblogger.util.Utilities;
-
/**
* Extends normal page renderer model to represent search results.
- *
+ *
* Also adds some new methods which are specific only to search results.
*/
public class SearchResultsModel extends PageModel {
-
- public static final int RESULTS_PER_PAGE = 10;
-
-
- // the original search request
- WeblogSearchRequest searchRequest = null;
- private URLStrategy urlStrategy = null;
-
- // the actual search results mapped by Day -> Set of entries
- private TreeMap results = new TreeMap(new ReverseComparator());
-
- // the pager used by the 3.0+ rendering system
- private SearchResultsPager pager = null;
-
- private int hits = 0;
- private int offset = 0;
- private int limit = 0;
- private Set categories = new TreeSet();
- private boolean websiteSpecificSearch = true;
- private String errorMessage = null;
-
-
- public void init(Map initData) throws WebloggerException {
-
- // we expect the init data to contain a searchRequest object
- searchRequest = (WeblogSearchRequest) initData.get("searchRequest");
- if(searchRequest == null) {
- throw new WebloggerException("expected searchRequest from init
data");
- }
-
- // look for url strategy
- urlStrategy = (URLStrategy) initData.get("urlStrategy");
- if(urlStrategy == null) {
- urlStrategy = WebloggerFactory.getWeblogger().getUrlStrategy();
- }
-
- // let parent initialize
- super.init(initData);
-
- // if there is no query, then we are done
- if(searchRequest.getQuery() == null) {
- pager = new SearchResultsPager(urlStrategy, searchRequest,
results, false);
- return;
- }
-
- // setup the search
- IndexManager indexMgr =
WebloggerFactory.getWeblogger().getIndexManager();
-
- SearchOperation search = new SearchOperation(indexMgr);
- search.setTerm(searchRequest.getQuery());
-
-
if(WebloggerRuntimeConfig.isSiteWideWeblog(searchRequest.getWeblogHandle())) {
- this.websiteSpecificSearch = false;
- } else {
- search.setWebsiteHandle(searchRequest.getWeblogHandle());
- }
-
- if(StringUtils.isNotEmpty(searchRequest.getWeblogCategoryName())) {
- search.setCategory(searchRequest.getWeblogCategoryName());
- }
-
- // execute search
- indexMgr.executeIndexOperationNow(search);
-
- if (search.getResultsCount() == -1) {
- // this means there has been a parsing (or IO) error
- this.errorMessage =
I18nMessages.getMessages(searchRequest.getLocaleInstance()).getString("error.searchProblem");
- } else {
- Hits hits = search.getResults();
- this.hits = search.getResultsCount();
-
- // Convert the Hits into WeblogEntryData instances.
- convertHitsToEntries(hits);
- }
-
- // search completed, setup pager based on results
- pager = new SearchResultsPager(urlStrategy, searchRequest, results,
(hits > (offset+limit)));
- }
-
- /**
- * Is this page showing search results?
- */
- public boolean isSearchResults() {
- return true;
- }
-
- // override page model and return search results pager
- public WeblogEntriesPager getWeblogEntriesPager() {
- return pager;
- }
-
- // override page model and return search results pager
- public WeblogEntriesPager getWeblogEntriesPager(String category) {
- return pager;
- }
-
- private void convertHitsToEntries(Hits hits) throws WebloggerException {
-
- // determine offset
- this.offset = searchRequest.getPageNum() * RESULTS_PER_PAGE;
- if(this.offset >= hits.length()) {
- this.offset = 0;
- }
-
- // determine limit
- this.limit = RESULTS_PER_PAGE;
- if(this.offset + this.limit > hits.length()) {
- this.limit = hits.length() - this.offset;
- }
-
- try {
- TreeSet categories = new TreeSet();
- Weblogger roller = WebloggerFactory.getWeblogger();
- WeblogEntryManager weblogMgr = roller.getWeblogEntryManager();
-
- WeblogEntry entry = null;
- Document doc = null;
- String handle = null;
- Timestamp now = new Timestamp(new Date().getTime());
- for(int i = offset; i < offset+limit; i++) {
-
- entry = null; // reset for each iteration
-
- doc = hits.doc(i);
- handle =
doc.getField(FieldConstants.WEBSITE_HANDLE).stringValue();
-
- if(websiteSpecificSearch &&
- handle.equals(searchRequest.getWeblogHandle())) {
-
- entry = weblogMgr.getWeblogEntry(
- doc.getField(FieldConstants.ID).stringValue());
- } else {
-
- entry = weblogMgr.getWeblogEntry(
- doc.getField(FieldConstants.ID).stringValue());
-
- if (doc.getField(FieldConstants.CATEGORY) != null) {
- categories.add(
-
doc.getField(FieldConstants.CATEGORY).stringValue());
- }
- }
-
- // maybe null if search result returned inactive user
- // or entry's user is not the requested user.
- // but don't return future posts
- if (entry != null && entry.getPubTime().before(now)) {
- addEntryToResults(WeblogEntryWrapper.wrap(entry,
urlStrategy));
- }
- }
-
- if(categories.size() > 0) {
- this.categories = categories;
- }
- } catch(IOException e) {
- throw new WebloggerException(e);
- }
- }
-
-
- private void addEntryToResults(WeblogEntryWrapper entry) {
-
- // convert entry's each date to midnight (00m 00h 00s)
- Date midnight = DateUtil.getStartOfDay(entry.getPubTime());
-
- // ensure we do not get duplicates from Lucene by
- // using a Set Collection. Entries sorted by pubTime.
- TreeSet set = (TreeSet) this.results.get(midnight);
- if (set == null) {
- // date is not mapped yet, so we need a new Set
- set = new TreeSet( new WeblogEntryWrapperComparator());
- this.results.put(midnight, set);
- }
- set.add(entry);
- }
-
-
- public String getTerm() {
- String query = searchRequest.getQuery();
- return (query == null) ? "" :
StringEscapeUtils.escapeXml(Utilities.escapeHTML(query));
- }
-
- public String getRawTerm() {
- return (searchRequest.getQuery() == null) ? "" :
searchRequest.getQuery();
- }
-
- public int getHits() {
- return hits;
- }
-
- public int getOffset() {
- return offset;
- }
-
- public int getLimit() {
- return limit;
- }
-
- public TreeMap getResults() {
- return results;
- }
-
- public Set getCategories() {
- return categories;
- }
-
- public boolean isWebsiteSpecificSearch() {
- return websiteSpecificSearch;
- }
-
- public String getErrorMessage() {
- return errorMessage;
- }
-
- public String getWeblogCategoryName() {
- return searchRequest.getWeblogCategoryName();
- }
-
- public WeblogCategoryWrapper getWeblogCategory() {
- if(searchRequest.getWeblogCategory() != null) {
- return
WeblogCategoryWrapper.wrap(searchRequest.getWeblogCategory(), urlStrategy);
- }
- return null;
- }
-
-}
+
+ public static final int RESULTS_PER_PAGE = 10;
+
+ // the original search request
+ WeblogSearchRequest searchRequest = null;
+ private URLStrategy urlStrategy = null;
+
+ // the actual search results mapped by Day -> Set of entries
+ private TreeMap results = new TreeMap(new ReverseComparator());
+
+ // the pager used by the 3.0+ rendering system
+ private SearchResultsPager pager = null;
+
+ private int hits = 0;
+ private int offset = 0;
+ private int limit = 0;
+ private Set categories = new TreeSet();
+ private boolean websiteSpecificSearch = true;
+ private String errorMessage = null;
+
+ public void init(Map initData) throws WebloggerException {
+
+ // we expect the init data to contain a searchRequest object
+ searchRequest = (WeblogSearchRequest)
initData.get("searchRequest");
+ if (searchRequest == null) {
+ throw new WebloggerException(
+ "expected searchRequest from init
data");
+ }
+
+ // look for url strategy
+ urlStrategy = (URLStrategy) initData.get("urlStrategy");
+ if (urlStrategy == null) {
+ urlStrategy =
WebloggerFactory.getWeblogger().getUrlStrategy();
+ }
+
+ // let parent initialize
+ super.init(initData);
+
+ // if there is no query, then we are done
+ if (searchRequest.getQuery() == null) {
+ pager = new SearchResultsPager(urlStrategy,
searchRequest, results,
+ false);
+ return;
+ }
+
+ // setup the search
+ IndexManager indexMgr = WebloggerFactory.getWeblogger()
+ .getIndexManager();
+
+ SearchOperation search = new SearchOperation(indexMgr);
+ search.setTerm(searchRequest.getQuery());
+
+ if (WebloggerRuntimeConfig.isSiteWideWeblog(searchRequest
+ .getWeblogHandle())) {
+ this.websiteSpecificSearch = false;
+ } else {
+
search.setWebsiteHandle(searchRequest.getWeblogHandle());
+ }
+
+ if
(StringUtils.isNotEmpty(searchRequest.getWeblogCategoryName())) {
+
search.setCategory(searchRequest.getWeblogCategoryName());
+ }
+
+ if (searchRequest.getLocale() != null) {
+ search.setLocale(searchRequest.getLocale());
+ }
+
+ // execute search
+ indexMgr.executeIndexOperationNow(search);
+
+ if (search.getResultsCount() == -1) {
+ // this means there has been a parsing (or IO) error
+ this.errorMessage = I18nMessages.getMessages(
+
searchRequest.getLocaleInstance()).getString(
+ "error.searchProblem");
+ } else {
+
+ TopFieldDocs docs = search.getResults();
+ ScoreDoc[] hits = docs.scoreDocs;
+ this.hits = search.getResultsCount();
+
+ // Convert the Hits into WeblogEntryData instances.
+ convertHitsToEntries(hits, search);
+
+ }
+
+ // search completed, setup pager based on results
+ pager = new SearchResultsPager(urlStrategy, searchRequest,
results,
+ (hits > (offset + limit)));
+ }
+
+ /**
+ * Is this page showing search results?
+ */
+ public boolean isSearchResults() {
+ return true;
+ }
+
+ // override page model and return search results pager
+ public WeblogEntriesPager getWeblogEntriesPager() {
+ return pager;
+ }
+
+ // override page model and return search results pager
+ public WeblogEntriesPager getWeblogEntriesPager(String category) {
+ return pager;
+ }
+
+ /**
+ * Convert hits to entries.
+ *
+ * @param hits
+ * the hits
+ * @param search
+ * the search
+ * @throws WebloggerException
+ * the weblogger exception
+ */
+ private void convertHitsToEntries(ScoreDoc[] hits, SearchOperation
search)
+ throws WebloggerException {
+
+ // determine offset
+ this.offset = searchRequest.getPageNum() * RESULTS_PER_PAGE;
+ if (this.offset >= hits.length) {
+ this.offset = 0;
+ }
+
+ // determine limit
+ this.limit = RESULTS_PER_PAGE;
+ if (this.offset + this.limit > hits.length) {
+ this.limit = hits.length - this.offset;
+ }
+
+ try {
+ TreeSet categories = new TreeSet();
+ Weblogger roller = WebloggerFactory.getWeblogger();
+ WeblogEntryManager weblogMgr =
roller.getWeblogEntryManager();
+
+ WeblogEntry entry = null;
+ Document doc = null;
+ String handle = null;
+ Timestamp now = new Timestamp(new Date().getTime());
+ for (int i = offset; i < offset + limit; i++) {
+
+ entry = null; // reset for each iteration
+
+ doc = search.getSearcher().doc(hits[i].doc);
+ handle =
doc.getField(FieldConstants.WEBSITE_HANDLE)
+ .stringValue();
+
+ if (websiteSpecificSearch
+ &&
handle.equals(searchRequest.getWeblogHandle())) {
+
+ entry =
weblogMgr.getWeblogEntry(doc.getField(
+
FieldConstants.ID).stringValue());
+ } else {
+
+ entry =
weblogMgr.getWeblogEntry(doc.getField(
+
FieldConstants.ID).stringValue());
+
+ if
(doc.getField(FieldConstants.CATEGORY) != null) {
+
categories.add(doc.getField(FieldConstants.CATEGORY)
+ .stringValue());
+ }
+ }
+
+ // maybe null if search result returned
inactive user
+ // or entry's user is not the requested user.
+ // but don't return future posts
+ if (entry != null &&
entry.getPubTime().before(now)) {
+
addEntryToResults(WeblogEntryWrapper.wrap(entry,
+ urlStrategy));
+ }
+ }
+
+ if (categories.size() > 0) {
+ this.categories = categories;
+ }
+ } catch (IOException e) {
+ throw new WebloggerException(e);
+ }
+ }
+
+ private void addEntryToResults(WeblogEntryWrapper entry) {
+
+ // convert entry's each date to midnight (00m 00h 00s)
+ Date midnight = DateUtil.getStartOfDay(entry.getPubTime());
+
+ // ensure we do not get duplicates from Lucene by
+ // using a Set Collection. Entries sorted by pubTime.
+ TreeSet set = (TreeSet) this.results.get(midnight);
+ if (set == null) {
+ // date is not mapped yet, so we need a new Set
+ set = new TreeSet(new WeblogEntryWrapperComparator());
+ this.results.put(midnight, set);
+ }
+ set.add(entry);
+ }
+
+ public String getTerm() {
+ String query = searchRequest.getQuery();
+ return (query == null)
+ ? "" :
StringEscapeUtils.escapeXml(Utilities.escapeHTML(query));
+ }
+
+ public String getRawTerm() {
+ return (searchRequest.getQuery() == null) ? "" : searchRequest
+ .getQuery();
+ }
+
+ public int getHits() {
+ return hits;
+ }
+
+ public int getOffset() {
+ return offset;
+ }
+
+ public int getLimit() {
+ return limit;
+ }
+
+ public TreeMap getResults() {
+ return results;
+ }
+
+ public Set getCategories() {
+ return categories;
+ }
+
+ public boolean isWebsiteSpecificSearch() {
+ return websiteSpecificSearch;
+ }
+
+ public String getErrorMessage() {
+ return errorMessage;
+ }
+
+ public String getWeblogCategoryName() {
+ return searchRequest.getWeblogCategoryName();
+ }
+
+ public WeblogCategoryWrapper getWeblogCategory() {
+ if (searchRequest.getWeblogCategory() != null) {
+ return WeblogCategoryWrapper.wrap(
+ searchRequest.getWeblogCategory(),
urlStrategy);
+ }
+ return null;
+ }
+
+}
\ No newline at end of file
Modified:
roller/branches/roller_5.0/weblogger-webapp/src/main/webapp/WEB-INF/velocity/feeds.vm
URL:
http://svn.apache.org/viewvc/roller/branches/roller_5.0/weblogger-webapp/src/main/webapp/WEB-INF/velocity/feeds.vm?rev=1515383&r1=1515382&r2=1515383&view=diff
==============================================================================
---
roller/branches/roller_5.0/weblogger-webapp/src/main/webapp/WEB-INF/velocity/feeds.vm
(original)
+++
roller/branches/roller_5.0/weblogger-webapp/src/main/webapp/WEB-INF/velocity/feeds.vm
Mon Aug 19 12:23:35 2013
@@ -118,7 +118,7 @@
<entry>
<id>$file.permalink</id>
<title type="html">$utils.escapeXML($file.name)</title>
- <author><name>$file.creator.screenName</name></author>
+
<author><name>$utils.escapeXML($utils.removeHTML($file.creator.screenName))</name></author>
<link rel="alternate" type="text/html" href="$file.permalink"/>
<published>$utils.formatIso8601Date($file.dateUploaded)</published>
<updated>$utils.formatIso8601Date($file.lastUpdated)</updated>