You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by gh...@apache.org on 2012/05/20 13:16:26 UTC

svn commit: r1340676 [2/2] - in /roller/trunk: ./ weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/ weblogger-business/src/main/java/org/apache/roller/weblogger/business/search/operations/ weblogger-web/src/main/java/org/apa...

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsFeedModel.java Sun May 20 11:16:25 2012
@@ -31,18 +31,19 @@ import org.apache.commons.lang.StringUti
 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;
@@ -51,224 +52,248 @@ import org.apache.roller.weblogger.ui.re
 import org.apache.roller.weblogger.ui.rendering.util.WeblogFeedRequest;
 import org.apache.roller.weblogger.ui.rendering.util.WeblogRequest;
 
-
 /**
- * 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() {
+		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;
+	}
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/rendering/model/SearchResultsModel.java Sun May 20 11:16:25 2012
@@ -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,259 @@ 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());
+		}
+
+		// 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;
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAdd.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAdd.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAdd.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryAdd.java Sun May 20 11:16:25 2012
@@ -40,196 +40,210 @@ import org.apache.roller.weblogger.util.
 import org.apache.roller.weblogger.util.cache.CacheManager;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
-
 /**
  * Add a new weblog entry.
  */
 public final class EntryAdd extends EntryBase {
-    
-    private static Log log = LogFactory.getLog(EntryAdd.class);
-    
-    // bean for managing form data
-    private EntryBean bean = new EntryBean();
-    
-    
-    public EntryAdd() {
-        this.actionName = "entryAdd";
-        this.desiredMenu = "editor";
-        this.pageTitle = "weblogEdit.title.newEntry";
-    }
-    
-    
-    @Override
-    public List<String> requiredWeblogPermissionActions() {
-        return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
-    }
-    
-    
-    /**
-     * Show form for adding a new weblog entry.
-     * 
-     * @return String The result of the action.
-     */
-    @SkipValidation
-    public String execute() {
-        
-        WeblogPermission perm = null;
-        try {
-            // if user is an author then post status defaults to PUBLISHED, otherwise PENDING
-            UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
-            perm = umgr.getWeblogPermission(getActionWeblog(), getAuthenticatedUser());
-            
-        } catch (WebloggerException ex) {
-            // security interceptor should ensure this never happens
-            log.error("ERROR retrieving user's permission", ex);
-        }
-        
-        if (perm != null && perm.hasAction(WeblogPermission.ADMIN) && perm.hasAction(WeblogPermission.POST)) {
-            getBean().setStatus(WeblogEntry.PUBLISHED);
-        } else {
-            getBean().setStatus(WeblogEntry.PENDING);
-        }
-
-        // set entry locale based on weblog locale
-        getBean().setLocale(getActionWeblog().getLocale());
-
-        // set comment defaults
-        getBean().setAllowComments(getActionWeblog().getDefaultAllowComments());
-        getBean().setCommentDays(new Integer(getActionWeblog().getDefaultCommentDays()));
-
-        // apply weblog default plugins
-        if (getActionWeblog().getDefaultPlugins() != null) {
-            getBean().setPlugins(StringUtils.split(getActionWeblog().getDefaultPlugins(), ","));
-        }
-
-        return INPUT;
-    }
-    
-    
-    /**
-     * Save a new weblog entry.
-     * 
-     * @return String The result of the action.
-     */
-    public String save() {
-        
-        if(!hasActionErrors()) try {
-            UserManager userMgr = WebloggerFactory.getWeblogger().getUserManager();
-            WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            
-            WeblogEntry entry = new WeblogEntry();
-            entry.setCreatorUserName(getAuthenticatedUser().getUserName());
-            entry.setWebsite(getActionWeblog());
-            
-            // set updatetime & pubtime if it was specified
-            entry.setUpdateTime(new Timestamp(new Date().getTime()));
-            entry.setPubTime(getBean().getPubTime(getLocale(), getActionWeblog().getTimeZoneInstance()));
-            
-            // copy data to new entry pojo
-            getBean().copyTo(entry);
-            
-            // handle pubtime auto set
-            if(entry.isPublished()) {
-                if(entry.getPubTime() == null) {
-                    // no time specified, use current time
-                    entry.setPubTime(entry.getUpdateTime());
-                }
-                
-                // if user does not have author perms then force PENDING status
-                if(!getActionWeblog().hasUserPermission(getAuthenticatedUser(),WeblogPermission.POST)) {
-                    entry.setStatus(WeblogEntry.PENDING);
-                }
-            }
-            
-            // if user is an admin then apply pinned to main value as well
-            GlobalPermission adminPerm = 
-                new GlobalPermission(Collections.singletonList(GlobalPermission.ADMIN));
-            if (userMgr.checkPermission(adminPerm, getAuthenticatedUser())) {
-                entry.setPinnedToMain(getBean().getPinnedToMain());
-            }
-            
-            if(!StringUtils.isEmpty(getBean().getEnclosureURL())) try {
-                // Fetch MediaCast resource
-                log.debug("Checking MediaCast attributes");
-                MediacastResource mediacast = MediacastUtil.lookupResource(getBean().getEnclosureURL());
-                
-                // set mediacast attributes
-                entry.putEntryAttribute("att_mediacast_url", mediacast.getUrl());
-                entry.putEntryAttribute("att_mediacast_type", mediacast.getContentType());
-                entry.putEntryAttribute("att_mediacast_length", ""+mediacast.getLength());
-                
-            } catch (MediacastException ex) {
-                addMessage(getText(ex.getErrorKey()));
-            }
-            
-            if(log.isDebugEnabled()) {
-                log.debug("entry bean is ...\n"+getBean().toString());
-                log.debug("final status = "+entry.getStatus());
-                log.debug("updtime = "+entry.getUpdateTime());
-                log.debug("pubtime = "+entry.getPubTime());
-            }
-            
-            log.debug("Saving entry");
-            weblogMgr.saveWeblogEntry(entry);
-            WebloggerFactory.getWeblogger().flush();
-            
-            // notify search of the new entry
-            reindexEntry(entry);
-            
-            // notify caches
-            CacheManager.invalidate(entry);
-            
-            // Queue applicable pings for this update.
-            if(entry.isPublished()) {
-                WebloggerFactory.getWeblogger().getAutopingManager().queueApplicableAutoPings(entry);
-            }
-            
-            if(entry.isPending()) {
-                // implies that entry just changed to pending
-                MailUtil.sendPendingEntryNotice(entry);
-                addMessage("weblogEdit.submittedForReview");
-            } else {
-                addMessage("weblogEdit.changesSaved");
-            }
-            
-            // now that entry is saved we want to store the id in the bean
-            // so that our success action can use it properly
-            getBean().setId(entry.getId());
-            
-            return SUCCESS;
-            
-        } catch (Exception e) {
-            log.error("Error saving new entry", e);
-            // TODO: i18n
-            addError("Error saving new entry");
-        }
-
-
-        
-        return INPUT;
-    }
-    
-    
-    /**
-     * Get the list of all categories for the action weblog, not including root.
-     */
-    public List<WeblogCategory> getCategories() {
-        try {
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            return wmgr.getWeblogCategories(getActionWeblog(), false);
-        } catch (WebloggerException ex) {
-            log.error("Error getting category list for weblog - "+getWeblog(), ex);
-            return Collections.EMPTY_LIST;
-        }
-    }
-    
-    
-    public EntryBean getBean() {
-        return bean;
-    }
-
-    public void setBean(EntryBean bean) {
-        this.bean = bean;
-    }
-    
+
+	private static Log log = LogFactory.getLog(EntryAdd.class);
+
+	// bean for managing form data
+	private EntryBean bean = new EntryBean();
+
+	public EntryAdd() {
+		this.actionName = "entryAdd";
+		this.desiredMenu = "editor";
+		this.pageTitle = "weblogEdit.title.newEntry";
+	}
+
+	@Override
+	public List<String> requiredWeblogPermissionActions() {
+		return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
+	}
+
+	/**
+	 * Show form for adding a new weblog entry.
+	 * 
+	 * @return String The result of the action.
+	 */
+	@SkipValidation
+	public String execute() {
+
+		WeblogPermission perm = null;
+		try {
+			// if user is an author then post status defaults to PUBLISHED,
+			// otherwise PENDING
+			UserManager umgr = WebloggerFactory.getWeblogger().getUserManager();
+			perm = umgr.getWeblogPermission(getActionWeblog(),
+					getAuthenticatedUser());
+
+		} catch (WebloggerException ex) {
+			// security interceptor should ensure this never happens
+			log.error("ERROR retrieving user's permission", ex);
+		}
+
+		if (perm != null && perm.hasAction(WeblogPermission.ADMIN)
+				&& perm.hasAction(WeblogPermission.POST)) {
+			getBean().setStatus(WeblogEntry.PUBLISHED);
+		} else {
+			getBean().setStatus(WeblogEntry.PENDING);
+		}
+
+		// set entry locale based on weblog locale
+		getBean().setLocale(getActionWeblog().getLocale());
+
+		// set comment defaults
+		getBean().setAllowComments(getActionWeblog().getDefaultAllowComments());
+		getBean().setCommentDays(
+				new Integer(getActionWeblog().getDefaultCommentDays()));
+
+		// apply weblog default plugins
+		if (getActionWeblog().getDefaultPlugins() != null) {
+			getBean().setPlugins(
+					StringUtils.split(getActionWeblog().getDefaultPlugins(),
+							","));
+		}
+
+		return INPUT;
+	}
+
+	/**
+	 * Save a new weblog entry.
+	 * 
+	 * @return String The result of the action.
+	 */
+	public String save() {
+
+		if (!hasActionErrors())
+			try {
+				UserManager userMgr = WebloggerFactory.getWeblogger()
+						.getUserManager();
+				WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+
+				WeblogEntry entry = new WeblogEntry();
+				entry.setCreatorUserName(getAuthenticatedUser().getUserName());
+				entry.setWebsite(getActionWeblog());
+
+				// set updatetime & pubtime if it was specified
+				entry.setUpdateTime(new Timestamp(new Date().getTime()));
+				entry.setPubTime(getBean().getPubTime(getLocale(),
+						getActionWeblog().getTimeZoneInstance()));
+
+				// copy data to new entry pojo
+				getBean().copyTo(entry);
+
+				// handle pubtime auto set
+				if (entry.isPublished()) {
+					if (entry.getPubTime() == null) {
+						// no time specified, use current time
+						entry.setPubTime(entry.getUpdateTime());
+					}
+
+					// if user does not have author perms then force PENDING
+					// status
+					if (!getActionWeblog().hasUserPermission(
+							getAuthenticatedUser(), WeblogPermission.POST)) {
+						entry.setStatus(WeblogEntry.PENDING);
+					}
+				}
+
+				// if user is an admin then apply pinned to main value as well
+				GlobalPermission adminPerm = new GlobalPermission(
+						Collections.singletonList(GlobalPermission.ADMIN));
+				if (userMgr.checkPermission(adminPerm, getAuthenticatedUser())) {
+					entry.setPinnedToMain(getBean().getPinnedToMain());
+				}
+
+				if (!StringUtils.isEmpty(getBean().getEnclosureURL()))
+					try {
+						// Fetch MediaCast resource
+						log.debug("Checking MediaCast attributes");
+						MediacastResource mediacast = MediacastUtil
+								.lookupResource(getBean().getEnclosureURL());
+
+						// set mediacast attributes
+						entry.putEntryAttribute("att_mediacast_url",
+								mediacast.getUrl());
+						entry.putEntryAttribute("att_mediacast_type",
+								mediacast.getContentType());
+						entry.putEntryAttribute("att_mediacast_length", ""
+								+ mediacast.getLength());
+
+					} catch (MediacastException ex) {
+						addMessage(getText(ex.getErrorKey()));
+					}
+
+				if (log.isDebugEnabled()) {
+					log.debug("entry bean is ...\n" + getBean().toString());
+					log.debug("final status = " + entry.getStatus());
+					log.debug("updtime = " + entry.getUpdateTime());
+					log.debug("pubtime = " + entry.getPubTime());
+				}
+
+				log.debug("Saving entry");
+				weblogMgr.saveWeblogEntry(entry);
+				WebloggerFactory.getWeblogger().flush();
+
+				// notify search of the new entry
+				if (entry.isPublished()) {
+					reindexEntry(entry);
+				}
+
+				// notify caches
+				CacheManager.invalidate(entry);
+
+				// Queue applicable pings for this update.
+				if (entry.isPublished()) {
+					WebloggerFactory.getWeblogger().getAutopingManager()
+							.queueApplicableAutoPings(entry);
+				}
+
+				if (entry.isPending()) {
+					// implies that entry just changed to pending
+					MailUtil.sendPendingEntryNotice(entry);
+					addMessage("weblogEdit.submittedForReview");
+				} else {
+					addMessage("weblogEdit.changesSaved");
+				}
+
+				// now that entry is saved we want to store the id in the bean
+				// so that our success action can use it properly
+				getBean().setId(entry.getId());
+
+				return SUCCESS;
+
+			} catch (Exception e) {
+				log.error("Error saving new entry", e);
+				// TODO: i18n
+				addError("Error saving new entry");
+			}
+
+		return INPUT;
+	}
+
+	/**
+	 * Get the list of all categories for the action weblog, not including root.
+	 */
+	public List<WeblogCategory> getCategories() {
+		try {
+			WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+					.getWeblogEntryManager();
+			return wmgr.getWeblogCategories(getActionWeblog(), false);
+		} catch (WebloggerException ex) {
+			log.error(
+					"Error getting category list for weblog - " + getWeblog(),
+					ex);
+			return Collections.EMPTY_LIST;
+		}
+	}
+
+	public EntryBean getBean() {
+		return bean;
+	}
+
+	public void setBean(EntryBean bean) {
+		this.bean = bean;
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryBase.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryBase.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryBase.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryBase.java Sun May 20 11:16:25 2012
@@ -36,178 +36,182 @@ import org.apache.roller.weblogger.ui.co
 import org.apache.roller.weblogger.ui.core.plugins.WeblogEntryEditor;
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 
-
 /**
  * A collection of base functionality used by entry actions.
  */
 public abstract class EntryBase extends UIAction {
-   
-    private static Log log = LogFactory.getLog(EntryBase.class);
-    
-    
-    /**
-     * Trigger reindexing of modified entry.
-     */
-    protected void reindexEntry(WeblogEntry entry) {
-        IndexManager manager = WebloggerFactory.getWeblogger().getIndexManager();
-        
-        // if published, index the entry
-        if (entry.isPublished()) {
-            try {
-                manager.addEntryReIndexOperation(entry);
-            } catch (WebloggerException ex) {
-                log.warn("Trouble triggering entry indexing", ex);
-            }
-        }
-    }
-    
-    
-    /**
-     * Get recent weblog entries using request parameters to determine
-     * username, date, and category name parameters.
-     * @return List of WeblogEntryData objects.
-     * @throws WebloggerException
-     */
-    public List<WeblogEntry> getRecentPublishedEntries() {
-        List<WeblogEntry> entries = Collections.EMPTY_LIST;
-        try {
-            entries = WebloggerFactory.getWeblogger().getWeblogEntryManager().getWeblogEntries(
-                    
-                    getActionWeblog(), // userName
-                    null,
-                    null,              // startDate
-                    null,              // endDate
-                    null,              // catName
-                    null,WeblogEntry.PUBLISHED, // status
-                    null,              // text
-                    null,              // sortby (null for pubTime)
-                    null,
-                    null,
-                    0, 20);
-        } catch (WebloggerException ex) {
-            log.error("Error getting entries list", ex);
-        }
-        return entries;
-    }
-    
-    
-    /**
-     * Get recent weblog entries using request parameters to determine
-     * username, date, and category name parameters.
-     * @return List of WeblogEntryData objects.
-     * @throws WebloggerException
-     */
-    public List<WeblogEntry> getRecentScheduledEntries() {
-        List<WeblogEntry> entries = Collections.EMPTY_LIST;
-        try {
-            entries = WebloggerFactory.getWeblogger().getWeblogEntryManager().getWeblogEntries(
-                    
-                    getActionWeblog(), // userName
-                    null,
-                    null,              // startDate
-                    null,              // endDate
-                    null,              // catName
-                    null,WeblogEntry.SCHEDULED, // status
-                    null,              // text
-                    null,              // sortby (null for pubTime)
-                    null,
-                    null,
-                    0, 20);
-        } catch (WebloggerException ex) {
-            log.error("Error getting entries list", ex);
-        }
-        return entries;
-    }
-    
-    /**
-     * Get recent weblog entries using request parameters to determine
-     * username, date, and category name parameters.
-     * @return List of WeblogEntryData objects.
-     * @throws WebloggerException
-     */
-    public List<WeblogEntry> getRecentDraftEntries() {
-        List<WeblogEntry> entries = Collections.EMPTY_LIST;
-        try {
-            entries = WebloggerFactory.getWeblogger().getWeblogEntryManager().getWeblogEntries(
-                    
-                    getActionWeblog(),
-                    null,
-                    null,              // startDate
-                    null,              // endDate
-                    null,              // catName
-                    null,WeblogEntry.DRAFT, // status
-                    null,              // text
-                    "updateTime",      // sortby
-                    null,
-                    null,
-                    0, 20);  // maxEntries
-        } catch (WebloggerException ex) {
-            log.error("Error getting entries list", ex);
-        }
-        return entries;
-    }
-    
-    /**
-     * Get recent weblog entries using request parameters to determine
-     * username, date, and category name parameters.
-     * @return List of WeblogEntryData objects.
-     * @throws WebloggerException
-     */
-    public List<WeblogEntry> getRecentPendingEntries() {
-        List<WeblogEntry> entries = Collections.EMPTY_LIST;
-        try {
-            entries = WebloggerFactory.getWeblogger().getWeblogEntryManager().getWeblogEntries(
-                    
-                    getActionWeblog(),
-                    null,
-                    null,              // startDate
-                    null,              // endDate
-                    null,              // catName
-                    null,WeblogEntry.PENDING, // status
-                    null,              // text
-                    "updateTime",      // sortby
-                    null,
-                    null,
-                    0, 20);
-        } catch (WebloggerException ex) {
-            log.error("Error getting entries list", ex);
-        }
-        return entries;
-    }
-    
-    
-    public List<WeblogEntryPlugin> getEntryPlugins() {
-        List<WeblogEntryPlugin> availablePlugins = Collections.EMPTY_LIST;
-        try {
-            PluginManager ppmgr = WebloggerFactory.getWeblogger().getPluginManager();
-            Map<String, WeblogEntryPlugin> plugins = ppmgr.getWeblogEntryPlugins(getActionWeblog());
-            
-            if(plugins.size() > 0) {
-                availablePlugins = new ArrayList();
-                for(WeblogEntryPlugin plugin : plugins.values()) {
-                    availablePlugins.add(plugin);
-                }
-            }
-        } catch (Exception ex) {
-            log.error("Error getting plugins list", ex);
-        }
-        return availablePlugins;
-    }
-    
-    
-    public WeblogEntryEditor getEditor() {
-        UIPluginManager pmgr = RollerContext.getUIPluginManager();
-        return pmgr.getWeblogEntryEditor(getActionWeblog().getEditorPage());
-    }
-    
-    
-    public boolean isUserAnAuthor() {
-        return getActionWeblog().hasUserPermission(getAuthenticatedUser(),WeblogPermission.POST);
-    }
-    
-    
-    public String getJsonAutocompleteUrl() {
-        return WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogTagsJsonURL(getActionWeblog(), false, 0);
-    }
-    
+
+	private static Log log = LogFactory.getLog(EntryBase.class);
+
+	/**
+	 * Trigger reindexing of modified entry.
+	 * 
+	 * @param entry
+	 *            the entry
+	 */
+	protected void reindexEntry(WeblogEntry entry) {
+		IndexManager manager = WebloggerFactory.getWeblogger()
+				.getIndexManager();
+		try {
+			manager.addEntryReIndexOperation(entry);
+		} catch (WebloggerException ex) {
+			log.warn("Trouble triggering entry indexing", ex);
+		}
+	}
+
+	/**
+	 * Trigger reindexing of modified entry.
+	 */
+	protected void removeEntryIndex(WeblogEntry entry) {
+		IndexManager manager = WebloggerFactory.getWeblogger()
+				.getIndexManager();
+		try {
+			manager.removeEntryIndexOperation(entry);
+		} catch (WebloggerException ex) {
+			log.warn("Trouble triggering entry indexing", ex);
+		}
+
+	}
+
+	/**
+	 * Get recent weblog entries using request parameters to determine username,
+	 * date, and category name parameters.
+	 * 
+	 * @return List of WeblogEntryData objects.
+	 * @throws WebloggerException
+	 */
+	public List<WeblogEntry> getRecentPublishedEntries() {
+		List<WeblogEntry> entries = Collections.EMPTY_LIST;
+		try {
+			entries = WebloggerFactory.getWeblogger().getWeblogEntryManager()
+					.getWeblogEntries(
+
+					getActionWeblog(), // userName
+							null, null, // startDate
+							null, // endDate
+							null, // catName
+							null, WeblogEntry.PUBLISHED, // status
+							null, // text
+							null, // sortby (null for pubTime)
+							null, null, 0, 20);
+		} catch (WebloggerException ex) {
+			log.error("Error getting entries list", ex);
+		}
+		return entries;
+	}
+
+	/**
+	 * Get recent weblog entries using request parameters to determine username,
+	 * date, and category name parameters.
+	 * 
+	 * @return List of WeblogEntryData objects.
+	 * @throws WebloggerException
+	 */
+	public List<WeblogEntry> getRecentScheduledEntries() {
+		List<WeblogEntry> entries = Collections.EMPTY_LIST;
+		try {
+			entries = WebloggerFactory.getWeblogger().getWeblogEntryManager()
+					.getWeblogEntries(
+
+					getActionWeblog(), // userName
+							null, null, // startDate
+							null, // endDate
+							null, // catName
+							null, WeblogEntry.SCHEDULED, // status
+							null, // text
+							null, // sortby (null for pubTime)
+							null, null, 0, 20);
+		} catch (WebloggerException ex) {
+			log.error("Error getting entries list", ex);
+		}
+		return entries;
+	}
+
+	/**
+	 * Get recent weblog entries using request parameters to determine username,
+	 * date, and category name parameters.
+	 * 
+	 * @return List of WeblogEntryData objects.
+	 * @throws WebloggerException
+	 */
+	public List<WeblogEntry> getRecentDraftEntries() {
+		List<WeblogEntry> entries = Collections.EMPTY_LIST;
+		try {
+			entries = WebloggerFactory.getWeblogger().getWeblogEntryManager()
+					.getWeblogEntries(
+
+					getActionWeblog(), null, null, // startDate
+							null, // endDate
+							null, // catName
+							null, WeblogEntry.DRAFT, // status
+							null, // text
+							"updateTime", // sortby
+							null, null, 0, 20); // maxEntries
+		} catch (WebloggerException ex) {
+			log.error("Error getting entries list", ex);
+		}
+		return entries;
+	}
+
+	/**
+	 * Get recent weblog entries using request parameters to determine username,
+	 * date, and category name parameters.
+	 * 
+	 * @return List of WeblogEntryData objects.
+	 * @throws WebloggerException
+	 */
+	public List<WeblogEntry> getRecentPendingEntries() {
+		List<WeblogEntry> entries = Collections.EMPTY_LIST;
+		try {
+			entries = WebloggerFactory.getWeblogger().getWeblogEntryManager()
+					.getWeblogEntries(
+
+					getActionWeblog(), null, null, // startDate
+							null, // endDate
+							null, // catName
+							null, WeblogEntry.PENDING, // status
+							null, // text
+							"updateTime", // sortby
+							null, null, 0, 20);
+		} catch (WebloggerException ex) {
+			log.error("Error getting entries list", ex);
+		}
+		return entries;
+	}
+
+	public List<WeblogEntryPlugin> getEntryPlugins() {
+		List<WeblogEntryPlugin> availablePlugins = Collections.EMPTY_LIST;
+		try {
+			PluginManager ppmgr = WebloggerFactory.getWeblogger()
+					.getPluginManager();
+			Map<String, WeblogEntryPlugin> plugins = ppmgr
+					.getWeblogEntryPlugins(getActionWeblog());
+
+			if (plugins.size() > 0) {
+				availablePlugins = new ArrayList();
+				for (WeblogEntryPlugin plugin : plugins.values()) {
+					availablePlugins.add(plugin);
+				}
+			}
+		} catch (Exception ex) {
+			log.error("Error getting plugins list", ex);
+		}
+		return availablePlugins;
+	}
+
+	public WeblogEntryEditor getEditor() {
+		UIPluginManager pmgr = RollerContext.getUIPluginManager();
+		return pmgr.getWeblogEntryEditor(getActionWeblog().getEditorPage());
+	}
+
+	public boolean isUserAnAuthor() {
+		return getActionWeblog().hasUserPermission(getAuthenticatedUser(),
+				WeblogPermission.POST);
+	}
+
+	public String getJsonAutocompleteUrl() {
+		return WebloggerFactory.getWeblogger().getUrlStrategy()
+				.getWeblogTagsJsonURL(getActionWeblog(), false, 0);
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryEdit.java Sun May 20 11:16:25 2012
@@ -45,282 +45,305 @@ import org.apache.roller.weblogger.util.
 import org.apache.roller.weblogger.util.TrackbackNotAllowedException;
 import org.apache.struts2.interceptor.validation.SkipValidation;
 
-
 /**
  * Edit an existing entry.
  */
 public final class EntryEdit extends EntryBase {
-    
-    private static Log log = LogFactory.getLog(EntryEdit.class);
-    
-    // bean for managing form data
-    private EntryBean bean = new EntryBean();
-    
-    // the entry we are editing
-    private WeblogEntry entry = null;
-    
-    // url to send trackback to
-    private String trackbackUrl = null;
-    
-    
-    public EntryEdit() {
-        this.actionName = "entryEdit";
-        this.desiredMenu = "editor";
-        this.pageTitle = "weblogEdit.title.editEntry";
-    }
-    
-    
-    @Override
-    public List<String> requiredWeblogPermissionActions() {
-        return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
-    }
-    
-    
-    public void myPrepare() {
-        if(getBean().getId() != null) {
-            try {
-                WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-                setEntry(wmgr.getWeblogEntry(getBean().getId()));
-            } catch (WebloggerException ex) {
-                log.error("Error looking up entry by id - "+getBean().getId(), ex);
-            }
-        }
-    }
-    
-    
-    /**
-     * Show form for editing an existing entry.
-     * 
-     * @return String The result of the action.
-     */
-    @SkipValidation
-    public String execute() {
-        
-        // make sure we have an entry to edit and it belongs to the action weblog
-        if(getEntry() == null) {
-            return ERROR;
-        } else if(!getEntry().getWebsite().equals(getActionWeblog())) {
-            return DENIED;
-        }
-        
-        // load bean with pojo data
-        getBean().copyFrom(getEntry(), getLocale());
-        
-        return INPUT;
-    }
-    
-    
-    /**
-     * Save weblog entry.
-     * 
-     * @return String The result of the action.
-     */
-    public String save() {
-        
-        // make sure we have an entry to edit and it belongs to the action weblog
-        if(getEntry() == null) {
-            return ERROR;
-        } else if(!getEntry().getWebsite().equals(getActionWeblog())) {
-            return DENIED;
-        }
-        
-        if(!hasActionErrors()) try {
-            WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            
-            WeblogEntry entry = getEntry();
-            
-            // set updatetime & pubtime
-            entry.setUpdateTime(new Timestamp(new Date().getTime()));
-            entry.setPubTime(getBean().getPubTime(getLocale(), getActionWeblog().getTimeZoneInstance()));
-            
-            // copy data to pojo
-            getBean().copyTo(entry);
-            
-            // handle pubtime auto set
-            if(entry.isPublished()) {
-                if(entry.getPubTime() == null) {
-                    // no time specified, use current time
-                    entry.setPubTime(entry.getUpdateTime());
-                }
-                
-                // if user does not have author perms then force PENDING status
-                if(!getActionWeblog().hasUserPermission(getAuthenticatedUser(), WeblogPermission.POST)) {
-                    entry.setStatus(WeblogEntry.PENDING);
-                }
-            }
-            
-            // if user is an admin then apply pinned to main value as well
-            GlobalPermission adminPerm = 
-                new GlobalPermission(Collections.singletonList(GlobalPermission.ADMIN));
-            if (WebloggerFactory.getWeblogger().getUserManager().checkPermission(adminPerm, getAuthenticatedUser())) {
-                entry.setPinnedToMain(getBean().getPinnedToMain());
-            }
-            
-            if (!StringUtils.isEmpty(getBean().getEnclosureURL())) {
-                try {
-                    // Fetch MediaCast resource
-                    log.debug("Checking MediaCast attributes");
-                    MediacastResource mediacast = MediacastUtil.lookupResource(getBean().getEnclosureURL());
-
-                    // set mediacast attributes
-                    entry.putEntryAttribute("att_mediacast_url", mediacast.getUrl());
-                    entry.putEntryAttribute("att_mediacast_type", mediacast.getContentType());
-                    entry.putEntryAttribute("att_mediacast_length", ""+mediacast.getLength());
-
-                } catch (MediacastException ex) {
-                    addMessage(getText(ex.getErrorKey()));
-                }
-            } else {
-                try {
-                    // if MediaCast string is empty, clean out MediaCast attributes
-                    weblogMgr.removeWeblogEntryAttribute("att_mediacast_url", entry);
-                    weblogMgr.removeWeblogEntryAttribute("att_mediacast_type", entry);
-                    weblogMgr.removeWeblogEntryAttribute("att_mediacast_length", entry);
-                    
-                } catch (WebloggerException e) {
-                    addMessage(getText("weblogEdit.mediaCastErrorRemoving"));
-                }
-            }
-            
-            if(log.isDebugEnabled()) {
-                log.debug("entry bean is ...\n"+getBean().toString());
-                log.debug("final status = "+entry.getStatus());
-                log.debug("updtime = "+entry.getUpdateTime());
-                log.debug("pubtime = "+entry.getPubTime());
-            }
-            
-            log.debug("Saving entry");
-            weblogMgr.saveWeblogEntry(entry);
-            WebloggerFactory.getWeblogger().flush();
-            
-            // notify search of the new entry
-            reindexEntry(entry);
-            
-            // notify caches
-            CacheManager.invalidate(entry);
-            
-            // Queue applicable pings for this update.
-            if(entry.isPublished()) {
-                WebloggerFactory.getWeblogger().getAutopingManager().queueApplicableAutoPings(entry);
-            }
-            
-            if(entry.isPending()) {
-                // implies that entry just changed to pending
-                MailUtil.sendPendingEntryNotice(entry);
-                addMessage("weblogEdit.submittedForReview");
-            } else {
-                addMessage("weblogEdit.changesSaved");
-            }
-            
-            return INPUT;
-            
-        } catch (Exception e) {
-            log.error("Error saving new entry", e);
-            // TODO: i18n
-            addError("Error saving new entry");
-        }
-
-
-        
-        return INPUT;
-    }
-    
-    
-    /**
-     * Send trackback to a specific url.
-     */
-    @SkipValidation
-    public String trackback() {
-        
-        // make sure we have an entry to edit and it belongs to the action weblog
-        if(getEntry() == null) {
-            return ERROR;
-        } else if(!getEntry().getWebsite().equals(getActionWeblog())) {
-            return DENIED;
-        }
-        
-        if(!StringUtils.isEmpty(getTrackbackUrl())) {
-            RollerMessages results = null;
-            try {
-                Trackback trackback = new Trackback(getEntry(), getTrackbackUrl());
-                results = trackback.send();
-            } catch(TrackbackNotAllowedException ex) {
-                addError("error.trackbackNotAllowed");
-            } catch(Throwable t) {
-                log.error("Error sending trackback", t);
-                // TODO: error handling
-                addError("error.general", t.getMessage());
-            }
-            
-            if(results != null) {
-                for (Iterator mit = results.getMessages(); mit.hasNext();) {
-                    RollerMessage msg = (RollerMessage) mit.next();
-                    if(msg.getArgs() == null) {
-                        addMessage(msg.getKey());
-                    } else {
-                        addMessage(msg.getKey(), Arrays.asList(msg.getArgs()));
-                    }
-                }
-                
-                for (Iterator eit = results.getErrors(); eit.hasNext();) {
-                    RollerMessage err = (RollerMessage) eit.next();
-                    if(err.getArgs() == null) {
-                        addError(err.getKey());
-                    } else {
-                        addError(err.getKey(), Arrays.asList(err.getArgs()));
-                    }
-                }
-            }
-
-            // reset trackback url
-            setTrackbackUrl(null);
-            
-        }
-        
-        return INPUT;
-    }
-    
-    
-    /**
-     * Get the list of all categories for the action weblog, not including root.
-     */
-    public List<WeblogCategory> getCategories() {
-        try {
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            return wmgr.getWeblogCategories(getActionWeblog(), false);
-        } catch (WebloggerException ex) {
-            log.error("Error getting category list for weblog - "+getWeblog(), ex);
-            return Collections.EMPTY_LIST;
-        }
-    }
-    
-    public String getPreviewURL() {
-        return WebloggerFactory.getWeblogger().getUrlStrategy().getPreviewURLStrategy(null).getWeblogEntryURL(getActionWeblog(), null, getEntry().getAnchor(), true);
-    }
-    
-    
-    public EntryBean getBean() {
-        return bean;
-    }
-
-    public void setBean(EntryBean bean) {
-        this.bean = bean;
-    }
-
-    public WeblogEntry getEntry() {
-        return entry;
-    }
-
-    public void setEntry(WeblogEntry entry) {
-        this.entry = entry;
-    }
-
-    public String getTrackbackUrl() {
-        return trackbackUrl;
-    }
-
-    public void setTrackbackUrl(String trackbackUrl) {
-        this.trackbackUrl = trackbackUrl;
-    }
-    
+
+	private static Log log = LogFactory.getLog(EntryEdit.class);
+
+	// bean for managing form data
+	private EntryBean bean = new EntryBean();
+
+	// the entry we are editing
+	private WeblogEntry entry = null;
+
+	// url to send trackback to
+	private String trackbackUrl = null;
+
+	public EntryEdit() {
+		this.actionName = "entryEdit";
+		this.desiredMenu = "editor";
+		this.pageTitle = "weblogEdit.title.editEntry";
+	}
+
+	@Override
+	public List<String> requiredWeblogPermissionActions() {
+		return Collections.singletonList(WeblogPermission.EDIT_DRAFT);
+	}
+
+	public void myPrepare() {
+		if (getBean().getId() != null) {
+			try {
+				WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+				setEntry(wmgr.getWeblogEntry(getBean().getId()));
+			} catch (WebloggerException ex) {
+				log.error(
+						"Error looking up entry by id - " + getBean().getId(),
+						ex);
+			}
+		}
+	}
+
+	/**
+	 * Show form for editing an existing entry.
+	 * 
+	 * @return String The result of the action.
+	 */
+	@SkipValidation
+	public String execute() {
+
+		// make sure we have an entry to edit and it belongs to the action
+		// weblog
+		if (getEntry() == null) {
+			return ERROR;
+		} else if (!getEntry().getWebsite().equals(getActionWeblog())) {
+			return DENIED;
+		}
+
+		// load bean with pojo data
+		getBean().copyFrom(getEntry(), getLocale());
+
+		return INPUT;
+	}
+
+	/**
+	 * Save weblog entry.
+	 * 
+	 * @return String The result of the action.
+	 */
+	public String save() {
+
+		// make sure we have an entry to edit and it belongs to the action
+		// weblog
+		if (getEntry() == null) {
+			return ERROR;
+		} else if (!getEntry().getWebsite().equals(getActionWeblog())) {
+			return DENIED;
+		}
+
+		if (!hasActionErrors())
+			try {
+				WeblogEntryManager weblogMgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+
+				WeblogEntry entry = getEntry();
+
+				// set updatetime & pubtime
+				entry.setUpdateTime(new Timestamp(new Date().getTime()));
+				entry.setPubTime(getBean().getPubTime(getLocale(),
+						getActionWeblog().getTimeZoneInstance()));
+
+				// copy data to pojo
+				getBean().copyTo(entry);
+
+				// handle pubtime auto set
+				if (entry.isPublished()) {
+					if (entry.getPubTime() == null) {
+						// no time specified, use current time
+						entry.setPubTime(entry.getUpdateTime());
+					}
+
+					// if user does not have author perms then force PENDING
+					// status
+					if (!getActionWeblog().hasUserPermission(
+							getAuthenticatedUser(), WeblogPermission.POST)) {
+						entry.setStatus(WeblogEntry.PENDING);
+					}
+				}
+
+				// if user is an admin then apply pinned to main value as well
+				GlobalPermission adminPerm = new GlobalPermission(
+						Collections.singletonList(GlobalPermission.ADMIN));
+				if (WebloggerFactory.getWeblogger().getUserManager()
+						.checkPermission(adminPerm, getAuthenticatedUser())) {
+					entry.setPinnedToMain(getBean().getPinnedToMain());
+				}
+
+				if (!StringUtils.isEmpty(getBean().getEnclosureURL())) {
+					try {
+						// Fetch MediaCast resource
+						log.debug("Checking MediaCast attributes");
+						MediacastResource mediacast = MediacastUtil
+								.lookupResource(getBean().getEnclosureURL());
+
+						// set mediacast attributes
+						entry.putEntryAttribute("att_mediacast_url",
+								mediacast.getUrl());
+						entry.putEntryAttribute("att_mediacast_type",
+								mediacast.getContentType());
+						entry.putEntryAttribute("att_mediacast_length", ""
+								+ mediacast.getLength());
+
+					} catch (MediacastException ex) {
+						addMessage(getText(ex.getErrorKey()));
+					}
+				} else {
+					try {
+						// if MediaCast string is empty, clean out MediaCast
+						// attributes
+						weblogMgr.removeWeblogEntryAttribute(
+								"att_mediacast_url", entry);
+						weblogMgr.removeWeblogEntryAttribute(
+								"att_mediacast_type", entry);
+						weblogMgr.removeWeblogEntryAttribute(
+								"att_mediacast_length", entry);
+
+					} catch (WebloggerException e) {
+						addMessage(getText("weblogEdit.mediaCastErrorRemoving"));
+					}
+				}
+
+				if (log.isDebugEnabled()) {
+					log.debug("entry bean is ...\n" + getBean().toString());
+					log.debug("final status = " + entry.getStatus());
+					log.debug("updtime = " + entry.getUpdateTime());
+					log.debug("pubtime = " + entry.getPubTime());
+				}
+
+				log.debug("Saving entry");
+				weblogMgr.saveWeblogEntry(entry);
+				WebloggerFactory.getWeblogger().flush();
+
+				// notify search of the new entry
+				if (entry.isPublished()) {
+					reindexEntry(entry);
+				} else {
+					removeEntryIndex(entry);
+				}
+
+				// notify caches
+				CacheManager.invalidate(entry);
+
+				// Queue applicable pings for this update.
+				if (entry.isPublished()) {
+					WebloggerFactory.getWeblogger().getAutopingManager()
+							.queueApplicableAutoPings(entry);
+				}
+
+				if (entry.isPending()) {
+					// implies that entry just changed to pending
+					MailUtil.sendPendingEntryNotice(entry);
+					addMessage("weblogEdit.submittedForReview");
+				} else {
+					addMessage("weblogEdit.changesSaved");
+				}
+
+				return INPUT;
+
+			} catch (Exception e) {
+				log.error("Error saving new entry", e);
+				// TODO: i18n
+				addError("Error saving new entry");
+			}
+
+		return INPUT;
+	}
+
+	/**
+	 * Send trackback to a specific url.
+	 */
+	@SkipValidation
+	public String trackback() {
+
+		// make sure we have an entry to edit and it belongs to the action
+		// weblog
+		if (getEntry() == null) {
+			return ERROR;
+		} else if (!getEntry().getWebsite().equals(getActionWeblog())) {
+			return DENIED;
+		}
+
+		if (!StringUtils.isEmpty(getTrackbackUrl())) {
+			RollerMessages results = null;
+			try {
+				Trackback trackback = new Trackback(getEntry(),
+						getTrackbackUrl());
+				results = trackback.send();
+			} catch (TrackbackNotAllowedException ex) {
+				addError("error.trackbackNotAllowed");
+			} catch (Throwable t) {
+				log.error("Error sending trackback", t);
+				// TODO: error handling
+				addError("error.general", t.getMessage());
+			}
+
+			if (results != null) {
+				for (Iterator mit = results.getMessages(); mit.hasNext();) {
+					RollerMessage msg = (RollerMessage) mit.next();
+					if (msg.getArgs() == null) {
+						addMessage(msg.getKey());
+					} else {
+						addMessage(msg.getKey(), Arrays.asList(msg.getArgs()));
+					}
+				}
+
+				for (Iterator eit = results.getErrors(); eit.hasNext();) {
+					RollerMessage err = (RollerMessage) eit.next();
+					if (err.getArgs() == null) {
+						addError(err.getKey());
+					} else {
+						addError(err.getKey(), Arrays.asList(err.getArgs()));
+					}
+				}
+			}
+
+			// reset trackback url
+			setTrackbackUrl(null);
+
+		}
+
+		return INPUT;
+	}
+
+	/**
+	 * Get the list of all categories for the action weblog, not including root.
+	 */
+	public List<WeblogCategory> getCategories() {
+		try {
+			WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+					.getWeblogEntryManager();
+			return wmgr.getWeblogCategories(getActionWeblog(), false);
+		} catch (WebloggerException ex) {
+			log.error(
+					"Error getting category list for weblog - " + getWeblog(),
+					ex);
+			return Collections.EMPTY_LIST;
+		}
+	}
+
+	public String getPreviewURL() {
+		return WebloggerFactory
+				.getWeblogger()
+				.getUrlStrategy()
+				.getPreviewURLStrategy(null)
+				.getWeblogEntryURL(getActionWeblog(), null,
+						getEntry().getAnchor(), true);
+	}
+
+	public EntryBean getBean() {
+		return bean;
+	}
+
+	public void setBean(EntryBean bean) {
+		this.bean = bean;
+	}
+
+	public WeblogEntry getEntry() {
+		return entry;
+	}
+
+	public void setEntry(WeblogEntry entry) {
+		this.entry = entry;
+	}
+
+	public String getTrackbackUrl() {
+		return trackbackUrl;
+	}
+
+	public void setTrackbackUrl(String trackbackUrl) {
+		this.trackbackUrl = trackbackUrl;
+	}
+
 }

Modified: roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java
URL: http://svn.apache.org/viewvc/roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java?rev=1340676&r1=1340675&r2=1340676&view=diff
==============================================================================
--- roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java (original)
+++ roller/trunk/weblogger-web/src/main/java/org/apache/roller/weblogger/ui/struts2/editor/EntryRemove.java Sun May 20 11:16:25 2012
@@ -28,123 +28,107 @@ import org.apache.roller.weblogger.pojos
 import org.apache.roller.weblogger.ui.struts2.util.UIAction;
 import org.apache.roller.weblogger.util.cache.CacheManager;
 
-
 /**
  * Remove a weblog entry.
  */
-public class EntryRemove extends UIAction {
-    
-    private static Log log = LogFactory.getLog(EntryRemove.class);
-    
-    // id of entry to remove
-    private String removeId = null;
-    
-    // entry object to remove
-    private WeblogEntry removeEntry = null;
-    
-    
-    public EntryRemove() {
-        this.actionName = "entryRemove";
-        this.desiredMenu = "editor";
-        this.pageTitle = "weblogEdit.title.newEntry";
-    }
-    
-    
-    public void myPrepare() {
-        if(getRemoveId() != null) {
-            try {
-                WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-                setRemoveEntry(wmgr.getWeblogEntry(getRemoveId()));
-            } catch (WebloggerException ex) {
-                log.error("Error looking up entry by id - "+getRemoveId(), ex);
-            }
-        }
-    }
-    
-    
-    public String execute() {
-        return INPUT;
-    }
-    
-    
-    public String remove() {
-        
-        if(getRemoveEntry() != null) try {
-            
-            WeblogEntry entry = getRemoveEntry();
-            
-            try {
-                // remove the entry from the search index
-                // TODO: can we do this in a better way?
-                String originalStatus = entry.getStatus();
-                entry.setStatus(WeblogEntry.DRAFT);
-                IndexManager manager = WebloggerFactory.getWeblogger().getIndexManager();
-                manager.addEntryReIndexOperation(entry);
-                entry.setStatus(originalStatus);
-            } catch (WebloggerException ex) {
-                log.warn("Trouble triggering entry indexing", ex);
-            }
-            
-            // remove from search index
-            removeEntryIndex(entry);
-            
-            // flush caches
-            CacheManager.invalidate(entry);
-            
-            // remove entry itself
-            WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
-            wmgr.removeWeblogEntry(entry);
-            WebloggerFactory.getWeblogger().flush();
-            
-            // note to user
-            addMessage("weblogEdit.entryRemoved");
-            
-            return SUCCESS;
-            
-        } catch(Exception e) {
-            log.error("Error removing entry "+getRemoveId(), e);
-            // TODO: i18n
-            addError("Error removing entry");
-        } else {
-            addError("weblogEntry.notFound");
-            return ERROR;
-        }
-        
-        return INPUT;
-    }
-    
-    
-    /**
-     * Trigger reindexing of modified entry.
-     */
-    protected void removeEntryIndex(WeblogEntry entry) {
-        IndexManager manager = WebloggerFactory.getWeblogger().getIndexManager();
-        
-        // if published, index the entry
-        if (entry.isPublished()) {
-            try {
-                manager.removeEntryIndexOperation(entry);
-            } catch (WebloggerException ex) {
-                log.warn("Trouble triggering entry indexing", ex);
-            }
-        }
-    }
-    
-    
-    public String getRemoveId() {
-        return removeId;
-    }
-
-    public void setRemoveId(String removeId) {
-        this.removeId = removeId;
-    }
-
-    public WeblogEntry getRemoveEntry() {
-        return removeEntry;
-    }
-
-    public void setRemoveEntry(WeblogEntry removeEntry) {
-        this.removeEntry = removeEntry;
-    }
-    
+public class EntryRemove extends EntryBase {
+
+	private static Log log = LogFactory.getLog(EntryRemove.class);
+
+	// id of entry to remove
+	private String removeId = null;
+
+	// entry object to remove
+	private WeblogEntry removeEntry = null;
+
+	public EntryRemove() {
+		this.actionName = "entryRemove";
+		this.desiredMenu = "editor";
+		this.pageTitle = "weblogEdit.title.newEntry";
+	}
+
+	public void myPrepare() {
+		if (getRemoveId() != null) {
+			try {
+				WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+				setRemoveEntry(wmgr.getWeblogEntry(getRemoveId()));
+			} catch (WebloggerException ex) {
+				log.error("Error looking up entry by id - " + getRemoveId(), ex);
+			}
+		}
+	}
+
+	public String execute() {
+		return INPUT;
+	}
+
+	public String remove() {
+
+		if (getRemoveEntry() != null)
+			try {
+
+				WeblogEntry entry = getRemoveEntry();
+
+				try {
+					// remove the entry from the search index
+					// TODO: can we do this in a better way?
+					String originalStatus = entry.getStatus();
+					entry.setStatus(WeblogEntry.DRAFT);
+					IndexManager manager = WebloggerFactory.getWeblogger()
+							.getIndexManager();
+					manager.addEntryReIndexOperation(entry);
+					entry.setStatus(originalStatus);
+				} catch (WebloggerException ex) {
+					log.warn("Trouble triggering entry indexing", ex);
+				}
+
+				// remove from search index
+				if (entry.isPublished()) {
+					removeEntryIndex(entry);
+				}
+
+				// flush caches
+				CacheManager.invalidate(entry);
+
+				// remove entry itself
+				WeblogEntryManager wmgr = WebloggerFactory.getWeblogger()
+						.getWeblogEntryManager();
+				wmgr.removeWeblogEntry(entry);
+				WebloggerFactory.getWeblogger().flush();
+
+				// note to user
+				addMessage("weblogEdit.entryRemoved");
+
+				return SUCCESS;
+
+			} catch (Exception e) {
+				log.error("Error removing entry " + getRemoveId(), e);
+				// TODO: i18n
+				addError("Error removing entry");
+			}
+		else {
+			addError("weblogEntry.notFound");
+			return ERROR;
+		}
+
+		return INPUT;
+	}
+
+	public String getRemoveId() {
+		return removeId;
+	}
+
+	public void setRemoveId(String removeId) {
+		this.removeId = removeId;
+	}
+
+	public WeblogEntry getRemoveEntry() {
+		return removeEntry;
+	}
+
+	public void setRemoveEntry(WeblogEntry removeEntry) {
+		this.removeEntry = removeEntry;
+	}
+
 }