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;
+ }
+
}