blob: bf4eaeda3e840f2b6e344699faf1981bea89965f [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.rendering.model;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.roller.weblogger.WebloggerException;
import org.apache.roller.weblogger.business.URLStrategy;
import org.apache.roller.weblogger.business.WebloggerFactory;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.pojos.wrapper.WeblogWrapper;
import org.apache.roller.weblogger.ui.rendering.pagers.CommentsPager;
import org.apache.roller.weblogger.ui.rendering.pagers.MediaFilesPager;
import org.apache.roller.weblogger.ui.rendering.pagers.Pager;
import org.apache.roller.weblogger.ui.rendering.pagers.WeblogEntriesListPager;
import org.apache.roller.weblogger.ui.rendering.util.WeblogFeedRequest;
import org.apache.roller.weblogger.ui.rendering.util.WeblogRequest;
import org.apache.roller.weblogger.util.URLUtilities;
/**
* Model which provides information needed to render a feed.
*/
public class FeedModel implements Model {
private static int DEFAULT_ENTRIES = WebloggerRuntimeConfig.getIntProperty("site.newsfeeds.defaultEntries");
private WeblogFeedRequest feedRequest = null;
private URLStrategy urlStrategy = null;
private Weblog weblog = null;
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");
}
// PageModel only works on page requests, so cast weblogRequest
// into a WeblogPageRequest and if it fails then throw exception
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();
}
/** Template context name to be used for model */
public String getModelName() {
return "model";
}
/**
* Get the weblog locale used to render this page, null if no locale.
*/
public String getLocale() {
return feedRequest.getLocale();
}
/**
* Get weblog being displayed.
*/
public WeblogWrapper getWeblog() {
return WeblogWrapper.wrap(weblog, urlStrategy);
}
/**
* Get category path or name specified by request.
*/
public boolean getExcerpts() {
return feedRequest.isExcerpts();
}
/**
* Get category path or name specified by request.
*/
public String getCategoryName() {
return feedRequest.getWeblogCategoryName();
}
/**
* Gets most recent entries limited by: weblog and category specified in
* request plus the weblog.entryDisplayCount.
*/
public Pager getWeblogEntriesPager() {
return new FeedEntriesPager(feedRequest);
}
/**
* Gets most recent comments limited by: weblog specified in request and
* the weblog.entryDisplayCount.
*/
public Pager getCommentsPager() {
return new FeedCommentsPager(feedRequest);
}
/**
* Gets most recently uploaded media files limited by: weblog specified
* in request and the weblog.entryDisplayCount.
*/
public Pager getMediaFilesPager() {
return new FeedFilesPager(feedRequest);
}
/**
* Returns the list of tags specified in the request /?tags=foo+bar
* @return
*/
public List getTags() {
return feedRequest.getTags();
}
public class FeedEntriesPager extends WeblogEntriesListPager {
private WeblogFeedRequest feedRequest;
public FeedEntriesPager(WeblogFeedRequest feedRequest) {
super(urlStrategy, urlStrategy.getWeblogFeedURL(feedRequest.getWeblog(),
feedRequest.getLocale(), feedRequest.getType(),
feedRequest.getFormat(), null, null, null, false, true),
feedRequest.getWeblog(), null, feedRequest.getWeblogCategoryName(), feedRequest.getTags(),
feedRequest.getLocale(), -1, feedRequest.getPage(), DEFAULT_ENTRIES);
this.feedRequest = feedRequest;
}
@Override
protected String createURL(String url, Map params) {
List tags = feedRequest.getTags();
if(tags != null && tags.size() > 0) {
params.put("tags", URLUtilities.getEncodedTagsString(tags));
}
String category = feedRequest.getWeblogCategoryName();
if(category != null && category.trim().length() > 0) {
params.put("cat", URLUtilities.encode(category));
}
if(feedRequest.isExcerpts()) {
params.put("excerpts", "true");
}
return super.createURL(url, params);
}
@Override
public String getUrl() {
return createURL(super.getUrl(), new HashMap());
}
}
public class FeedCommentsPager extends CommentsPager {
private WeblogFeedRequest feedRequest;
public FeedCommentsPager(WeblogFeedRequest feedRequest) {
super(urlStrategy, urlStrategy.getWeblogFeedURL(feedRequest.getWeblog(),
feedRequest.getLocale(), feedRequest.getType(),
feedRequest.getFormat(), null, null,
null, false, true), feedRequest.getWeblog(), -1, feedRequest.getPage(), DEFAULT_ENTRIES);
this.feedRequest = feedRequest;
}
@Override
protected String createURL(String url, Map params) {
List tags = feedRequest.getTags();
if(tags != null && tags.size() > 0) {
params.put("tags", URLUtilities.getEncodedTagsString(tags));
}
String category = feedRequest.getWeblogCategoryName();
if(category != null && category.trim().length() > 0) {
params.put("cat", URLUtilities.encode(category));
}
if(feedRequest.isExcerpts()) {
params.put("excerpts", "true");
}
return super.createURL(url, params);
}
@Override
public String getUrl() {
return createURL(super.getUrl(), new HashMap());
}
}
public class FeedFilesPager extends MediaFilesPager {
private WeblogFeedRequest feedRequest;
public FeedFilesPager(WeblogFeedRequest feedRequest) {
super(urlStrategy, urlStrategy.getWeblogFeedURL(feedRequest.getWeblog(),
feedRequest.getLocale(), feedRequest.getType(),
feedRequest.getFormat(), null, null,
null, false, true), feedRequest.getPage(), 10);
this.feedRequest = feedRequest;
}
@Override
protected String createURL(String url, Map params) {
List tags = feedRequest.getTags();
if(tags != null && tags.size() > 0) {
params.put("tags", URLUtilities.getEncodedTagsString(tags));
}
String category = feedRequest.getWeblogCategoryName();
if(category != null && category.trim().length() > 0) {
params.put("cat", URLUtilities.encode(category));
}
if(feedRequest.isExcerpts()) {
params.put("excerpts", "true");
}
return super.createURL(url, params);
}
@Override
public String getUrl() {
return createURL(super.getUrl(), new HashMap());
}
}
}