blob: 040c2a551d16c777fa34961194e80dd3cd1572e3 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. The ASF licenses this file to You
* under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License. For additional information regarding
* copyright in this work, please see the NOTICE file in the top level
* directory of this distribution.
*/
package org.apache.roller.weblogger.ui.struts2.editor;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.business.WeblogEntryManager;
import org.apache.roller.weblogger.pojos.WeblogCategory;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.WeblogEntrySearchCriteria;
import org.apache.roller.weblogger.pojos.WeblogPermission;
import org.apache.roller.weblogger.ui.struts2.pagers.EntriesPager;
import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
import org.apache.struts2.convention.annotation.AllowedMethods;
/**
* A list view of entries in a weblog.
*/
// TODO: make this work @AllowedMethods({"execute"})
public class Entries extends UIAction {
private static Log log = LogFactory.getLog(Entries.class);
// number of comments to show per page
private static final int COUNT = 30;
// bean for managing submitted data
private EntriesBean bean = new EntriesBean();
// pager for the entries we are viewing
private EntriesPager pager = null;
// first entry in the list
private WeblogEntry firstEntry = null;
// last entry in the list
private WeblogEntry lastEntry = null;
public Entries() {
this.actionName = "entries";
this.desiredMenu = "editor";
this.pageTitle = "weblogEntryQuery.title";
}
@Override
public List<String> requiredWeblogPermissionActions() {
return Collections.singletonList(WeblogPermission.POST);
}
@Override
public String execute() {
if (log.isDebugEnabled()) {
log.debug("entries bean is ...\n"+getBean().toString());
}
List<WeblogEntry> entries = null;
boolean hasMore = false;
try {
String status = getBean().getStatus();
WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
WeblogEntrySearchCriteria wesc = new WeblogEntrySearchCriteria();
wesc.setWeblog(getActionWeblog());
wesc.setStartDate(getBean().getStartDate());
wesc.setEndDate(getBean().getEndDate());
wesc.setCatName(getBean().getCategoryName());
wesc.setTags(getBean().getTags());
wesc.setStatus("ALL".equals(status) ? null : WeblogEntry.PubStatus.valueOf(status));
wesc.setText(getBean().getText());
wesc.setSortBy(getBean().getSortBy());
wesc.setOffset(getBean().getPage() * COUNT);
wesc.setMaxResults(COUNT + 1);
List<WeblogEntry> rawEntries = wmgr.getWeblogEntries(wesc);
entries = new ArrayList<WeblogEntry>();
entries.addAll(rawEntries);
if (entries.size() > 0) {
log.debug("query found "+rawEntries.size()+" results");
if(rawEntries.size() > COUNT) {
entries.remove(entries.size()-1);
hasMore = true;
}
setFirstEntry(entries.get(0));
setLastEntry(entries.get(entries.size()-1));
}
} catch (WebloggerException ex) {
log.error("Error looking up entries", ex);
addError("Error looking up entries");
}
// build entries pager
String baseUrl = buildBaseUrl();
setPager(new EntriesPager(baseUrl, getBean().getPage(), entries, hasMore));
return LIST;
}
// use the action data to build a url representing this action, including query data
private String buildBaseUrl() {
Map<String, String> params = new HashMap<String, String>();
if(!StringUtils.isEmpty(getBean().getCategoryName())) {
params.put("bean.categoryPath", getBean().getCategoryName());
}
if(!StringUtils.isEmpty(getBean().getTagsAsString())) {
params.put("bean.tagsAsString", getBean().getTagsAsString());
}
if(!StringUtils.isEmpty(getBean().getText())) {
params.put("bean.text", getBean().getText());
}
if(!StringUtils.isEmpty(getBean().getStartDateString())) {
params.put("bean.startDateString", getBean().getStartDateString());
}
if(!StringUtils.isEmpty(getBean().getEndDateString())) {
params.put("bean.endDateString", getBean().getEndDateString());
}
if(!StringUtils.isEmpty(getBean().getStatus())) {
params.put("bean.status", getBean().getStatus());
}
if(getBean().getSortBy() != null) {
params.put("bean.sortBy", getBean().getSortBy().toString());
}
return WebloggerFactory.getWeblogger().getUrlStrategy().getActionURL("entries", "/roller-ui/authoring",
getActionWeblog().getHandle(), params, false);
}
/**
* Get the list of all categories for the action weblog, not including root.
*/
public List<WeblogCategory> getCategories() {
// make list of categories with first option being being a transient
// category just meant to represent the default option of any category
List<WeblogCategory> cats = new ArrayList<WeblogCategory>();
WeblogCategory tmpCat = new WeblogCategory();
tmpCat.setName("Any");
cats.add(tmpCat);
List<WeblogCategory> weblogCats = Collections.emptyList();
try {
WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
weblogCats = wmgr.getWeblogCategories(getActionWeblog());
} catch (WebloggerException ex) {
log.error("Error getting category list for weblog - " + getWeblog(), ex);
}
cats.addAll(weblogCats);
return cats;
}
public List<KeyValueObject> getSortByOptions() {
List<KeyValueObject> opts = new ArrayList<KeyValueObject>();
opts.add(new KeyValueObject(WeblogEntrySearchCriteria.SortBy.PUBLICATION_TIME.name(), getText("weblogEntryQuery.label.pubTime")));
opts.add(new KeyValueObject(WeblogEntrySearchCriteria.SortBy.UPDATE_TIME.name(), getText("weblogEntryQuery.label.updateTime")));
return opts;
}
public List<KeyValueObject> getStatusOptions() {
List<KeyValueObject> opts = new ArrayList<KeyValueObject>();
opts.add(new KeyValueObject("ALL", getText("weblogEntryQuery.label.allEntries")));
opts.add(new KeyValueObject("DRAFT", getText("weblogEntryQuery.label.draftOnly")));
opts.add(new KeyValueObject("PUBLISHED", getText("weblogEntryQuery.label.publishedOnly")));
opts.add(new KeyValueObject("PENDING", getText("weblogEntryQuery.label.pendingOnly")));
opts.add(new KeyValueObject("SCHEDULED", getText("weblogEntryQuery.label.scheduledOnly")));
return opts;
}
public EntriesBean getBean() {
return bean;
}
public void setBean(EntriesBean bean) {
this.bean = bean;
}
public WeblogEntry getFirstEntry() {
return firstEntry;
}
public void setFirstEntry(WeblogEntry firstEntry) {
this.firstEntry = firstEntry;
}
public WeblogEntry getLastEntry() {
return lastEntry;
}
public void setLastEntry(WeblogEntry lastEntry) {
this.lastEntry = lastEntry;
}
public EntriesPager getPager() {
return pager;
}
public void setPager(EntriesPager pager) {
this.pager = pager;
}
}