blob: c67c6dfb97c198ef51bb2ee2a65e97779ed5aa33 [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.Arrays;
import java.util.List;
import java.util.Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.business.WeblogEntryManager;
import org.apache.roller.weblogger.config.WebloggerConfig;
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.ui.rendering.util.WeblogRequest;
/**
* Provides access to URL building functionality.
*
* NOTE: we purposely go against the standard getter/setter bean standard
* for methods that take arguments so that users get a consistent way to
* access those methods in their templates. i.e.
*
* $url.category("foo")
*
* instead of
*
* $url.getCategory("foo")
*/
public class URLModel implements Model {
private static Log log = LogFactory.getLog(URLModel.class);
protected Weblog weblog = null;
protected String locale = null;
protected URLStrategy urlStrategy = null;
public URLModel() {}
public String getModelName() {
return "url";
}
public void init(Map initData) throws WebloggerException {
// need a weblog request so that we can know the weblog and locale
WeblogRequest weblogRequest = (WeblogRequest) initData.get("parsedRequest");
if(weblogRequest == null) {
throw new WebloggerException("Expected 'weblogRequest' init param!");
}
this.weblog = weblogRequest.getWeblog();
this.locale = weblogRequest.getLocale();
// look for url strategy
urlStrategy = (URLStrategy) initData.get("urlStrategy");
if(urlStrategy == null) {
urlStrategy = WebloggerFactory.getWeblogger().getUrlStrategy();
}
}
/** Relative URL of Roller, e.g. /roller */
public String getSite() {
return WebloggerRuntimeConfig.getRelativeContextURL();
}
/** Absolute URL of Roller, e.g. http://localhost:8080/roller */
public String getAbsoluteSite() {
String weblogAbsoluteURL =
WebloggerConfig.getProperty("weblog.absoluteurl." + weblog.getHandle());
if (weblogAbsoluteURL != null) {
return weblogAbsoluteURL;
} else {
return WebloggerRuntimeConfig.getAbsoluteContextURL();
}
}
/** URL for logging in */
public String getLogin() {
return urlStrategy.getLoginURL(false);
}
/** URL for logging out */
public String getLogout() {
return urlStrategy.getLogoutURL(false);
}
/** URL for registering */
public String getRegister() {
return urlStrategy.getRegisterURL(false);
}
/** URL for a specific UI action */
public String action(String action, String namespace) {
if(namespace != null) {
if("/roller-ui".equals(namespace)) {
return urlStrategy.getActionURL(action, namespace, null, null, true);
} else if("/roller-ui/authoring".equals(namespace)) {
return urlStrategy.getActionURL(action, namespace, weblog.getHandle(), null, true);
} else if("/roller-ui/admin".equals(namespace)) {
return urlStrategy.getActionURL(action, namespace, null, null, true);
}
}
return null;
}
public String getCommentAuthenticator() {
return getSite()+"/CommentAuthenticatorServlet?weblog="+weblog.getHandle();
}
public String themeResource(String theme, String filePath) {
return getSite()+"/themes/"+theme+"/"+filePath;
}
public String themeResource(String theme, String filePath, boolean absolute) {
if (absolute) {
return getAbsoluteSite()+"/themes/"+theme+"/"+filePath;
}
return themeResource(theme, filePath);
}
public String getHome() {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, null, -1, true);
}
public String home(int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, null, pageNum, true);
}
public String home(String customLocale) {
return urlStrategy.getWeblogCollectionURL(weblog, customLocale, null, null, null, -1, true);
}
public String home(String customLocale, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, customLocale, null, null, null, pageNum, true);
}
public String entry(String anchor) {
return urlStrategy.getWeblogEntryURL(weblog, locale, anchor, true);
}
public String comment(String anchor, String timeStamp) {
return urlStrategy.getWeblogCommentURL(weblog, locale, anchor, timeStamp, true);
}
public String comments(String anchor) {
return urlStrategy.getWeblogCommentsURL(weblog, locale, anchor, true);
}
public String trackback(String anchor) {
return urlStrategy.getWeblogEntryURL(weblog, locale, anchor, true);
}
public String date(String dateString) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, dateString, null, -1, true);
}
public String date(String dateString, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, dateString, null, pageNum, true);
}
public String category(String catName) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, catName, null, null, -1, true);
}
public String category(String catName, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, catName, null, null, pageNum, true);
}
public String tag(String tag) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, Arrays.asList(new String[]{tag}) , -1, true);
}
public String tag(String tag, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, Arrays.asList(new String[]{tag}), pageNum, true);
}
public String tags(List tags) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, tags , -1, true);
}
public String tags(List tags, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, null, null, tags, -1, true);
}
public String collection(String dateString, String catName) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, catName, dateString, null, -1, true);
}
public String collection(String dateString, String catName, int pageNum) {
return urlStrategy.getWeblogCollectionURL(weblog, locale, catName, dateString, null, pageNum, true);
}
public String getSearch() {
return urlStrategy.getWeblogSearchURL(weblog, locale, null, null, -1, false);
}
public String search(String query, int pageNum) {
return urlStrategy.getWeblogSearchURL(weblog, locale, query, null, pageNum, false);
}
public String search(String query, String catName, int pageNum) {
return urlStrategy.getWeblogSearchURL(weblog, locale, query, catName, pageNum, false);
}
public String absoluteSearch(String query, String catName, int pageNum) {
return urlStrategy.getWeblogSearchURL(weblog, locale, query, catName, pageNum, true);
}
public String getOpenSearchSite() {
return urlStrategy.getOpenSearchSiteURL();
}
public String getOpenSearchWeblog() {
return urlStrategy.getOpenSearchWeblogURL(weblog.getHandle());
}
public String page(String pageLink) {
return urlStrategy.getWeblogPageURL(weblog, locale, pageLink, null, null, null, null, -1, true);
}
public String page(String pageLink, String dateString, String catName, int pageNum) {
return urlStrategy.getWeblogPageURL(weblog, locale, pageLink, null, catName, dateString, null, pageNum, true);
}
public String resource(String filePath) {
return urlStrategy.getWeblogResourceURL(weblog, filePath, true);
}
public String getRsd() {
return urlStrategy.getWeblogRsdURL(weblog, true);
}
public FeedURLS getFeed() {
return new FeedURLS();
}
/** URL for editing a weblog entry */
public String editEntry(String anchor) {
try {
// need to determine entryId from anchor
WeblogEntryManager wmgr = WebloggerFactory.getWeblogger().getWeblogEntryManager();
WeblogEntry entry = wmgr.getWeblogEntryByAnchor(weblog, anchor);
if(entry != null) {
return urlStrategy.getEntryEditURL(weblog.getHandle(), entry.getId(), false);
}
} catch (WebloggerException ex) {
log.error("Error looking up entry by anchor - "+anchor, ex);
}
return null;
}
/** URL for creating a new weblog entry */
public String getCreateEntry() {
return urlStrategy.getEntryAddURL(weblog.getHandle(), false);
}
/** URL for editing weblog settings */
public String getEditSettings() {
return urlStrategy.getWeblogConfigURL(weblog.getHandle(), false);
}
/////// Inner Classes ///////
public class FeedURLS {
public EntryFeedURLS getEntries() {
return new EntryFeedURLS();
}
public CommentFeedURLS getComments() {
return new CommentFeedURLS();
}
public MediaFileFeedURLS getMediaFiles() {
return new MediaFileFeedURLS();
}
}
public class EntryFeedURLS {
public String getRss() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "rss", null, null, null, false, true);
}
public String rss(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "rss", catName, null, null, excerpts, true);
}
public String rssByTags(List tags, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "rss", null, null, tags, excerpts, true);
}
public String getAtom() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "atom", null, null, null, false, true);
}
public String atom(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "atom", catName, null, null, excerpts, true);
}
public String search(String term, String catName) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "atom", catName, term, null, false, true);
}
public String atomByTags(List tags, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "entries", "atom", null, null, tags, excerpts, true);
}
}
public class CommentFeedURLS {
public String getRss() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "comments", "rss", null, null, null, false, true);
}
public String rss(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "comments", "rss", catName, null, null, excerpts, true);
}
public String getAtom() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "comments", "atom", null, null, null, false, true);
}
public String atom(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "comments", "atom", catName, null, null, excerpts, true);
}
}
public class MediaFileFeedURLS {
public String getRss() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "files", "rss", null, null, null, false, true);
}
public String rss(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "files", "rss", catName, null, null, excerpts, true);
}
public String getAtom() {
return urlStrategy.getWeblogFeedURL(weblog, locale, "files", "atom", null, null, null, false, true);
}
public String atom(String catName, boolean excerpts) {
return urlStrategy.getWeblogFeedURL(weblog, locale, "files", "atom", catName, null, null, excerpts, true);
}
}
}