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> 


Reply via email to