blob: dd309ebb393c38f721c71e2d28cea3e614b1b548 [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.pagers;
import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import org.apache.commons.lang3.StringUtils;
import org.apache.roller.weblogger.config.WebloggerRuntimeConfig;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.util.DateUtil;
import org.apache.roller.weblogger.business.URLStrategy;
import org.apache.roller.weblogger.util.I18nMessages;
/**
* An abstract implementation of a WeblogEntriesPager.
*
* This implementation lays out the basic functionality of an entries pager so
* that subclasses can easily tweak only the few things necessary to handle
* paging their own way.
*/
public abstract class AbstractWeblogEntriesPager implements WeblogEntriesPager {
// message utils for doing i18n messages
I18nMessages messageUtils = null;
// url strategy for building urls
URLStrategy urlStrategy = null;
Weblog weblog = null;
String locale = null;
String pageLink = null;
String entryAnchor = null;
String dateString = null;
String catName = null;
List tags = new ArrayList();
int offset = 0;
int page = 0;
int length = 0;
public AbstractWeblogEntriesPager(
URLStrategy strat,
Weblog weblog,
String locale,
String pageLink,
String entryAnchor,
String dateString,
String catName,
List tags,
int page) {
this.urlStrategy = strat;
this.weblog = weblog;
this.locale = locale;
this.pageLink = pageLink;
this.entryAnchor = entryAnchor;
this.dateString = dateString;
this.catName = catName;
if (tags != null) {
this.tags = tags;
}
// make sure offset, length, and page are valid
int maxLength = WebloggerRuntimeConfig.getIntProperty("site.pages.maxEntries");
length = weblog.getEntryDisplayCount();
if(length > maxLength) {
length = maxLength;
}
if(page > 0) {
this.page = page;
}
this.offset = length * page;
// get a message utils instance to handle i18n of messages
Locale viewLocale = null;
if(locale != null) {
String[] langCountry = locale.split("_");
if(langCountry.length == 1) {
viewLocale = new Locale(langCountry[0]);
} else if(langCountry.length == 2) {
viewLocale = new Locale(langCountry[0], langCountry[1]);
}
} else {
viewLocale = weblog.getLocaleInstance();
}
this.messageUtils = I18nMessages.getMessages(viewLocale);
}
public boolean hasMoreEntries() {
return false;
}
public String getHomeLink() {
return createURL(0, 0, weblog, locale, pageLink, entryAnchor, dateString, catName, tags);
}
public String getHomeName() {
return messageUtils.getString("weblogEntriesPager.latest.home");
}
public String getNextLink() {
if (hasMoreEntries()) {
return createURL(page, 1, weblog, locale, pageLink, entryAnchor, dateString, catName, tags);
}
return null;
}
public String getNextName() {
if (hasMoreEntries()) {
return messageUtils.getString("weblogEntriesPager.latest.next");
}
return null;
}
public String getPrevLink() {
if (page > 0) {
return createURL(page, -1, weblog, locale, pageLink, entryAnchor, dateString, catName, tags);
}
return null;
}
public String getPrevName() {
if (page > 0) {
return messageUtils.getString("weblogEntriesPager.latest.prev");
}
return null;
}
public String getNextCollectionLink() {
return null;
}
public String getNextCollectionName() {
return null;
}
public String getPrevCollectionLink() {
return null;
}
public String getPrevCollectionName() {
return null;
}
/**
* Parse data as either 6-char or 8-char format.
*/
protected Date parseDate(String dateString) {
Date ret = null;
SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
Calendar cal = Calendar.getInstance(
weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
if ( dateString!=null
&& dateString.length()==8
&& StringUtils.isNumeric(dateString) ) {
char8DateFormat.setCalendar(cal);
ParsePosition pos = new ParsePosition(0);
ret = char8DateFormat.parse( dateString, pos );
// make sure the requested date is not in the future
Date today = getToday();
if (ret.after(today)) {
ret = today;
}
}
if ( dateString!=null
&& dateString.length()==6
&& StringUtils.isNumeric(dateString) ) {
char6DateFormat.setCalendar(cal);
ParsePosition pos = new ParsePosition(0);
ret = char6DateFormat.parse( dateString, pos );
// make sure the requested date is not in the future
Date today = getToday();
if (ret.after(today)) {
ret = today;
}
}
return ret;
}
/**
* Return today based on current blog's timezone/locale.
*/
protected Date getToday() {
Calendar todayCal = Calendar.getInstance();
todayCal = Calendar.getInstance(
weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
todayCal.setTime(new Date());
return todayCal.getTime();
}
/**
* Create URL that encodes pager state using most appropriate forms of URL.
* @param pageAdd To be added to page number, or 0 for no page number
*/
protected String createURL(
int page,
int pageAdd,
Weblog website,
String locale,
String pageLink,
String entryAnchor,
String dateString,
String catName,
List tags) {
int pageNum = page + pageAdd;
if (pageLink != null) {
return urlStrategy.getWeblogPageURL(website, locale, pageLink, entryAnchor, catName, dateString, tags, pageNum, false);
} else if (entryAnchor != null) {
return urlStrategy.getWeblogEntryURL(website, locale, entryAnchor, true);
}
return urlStrategy.getWeblogCollectionURL(website, locale, catName, dateString, tags, pageNum, false);
}
}