001: /*
002: * Licensed to the Apache Software Foundation (ASF) under one or more
003: * contributor license agreements. The ASF licenses this file to You
004: * under the Apache License, Version 2.0 (the "License"); you may not
005: * use this file except in compliance with the License.
006: * You may obtain a copy of the License at
007: *
008: * http://www.apache.org/licenses/LICENSE-2.0
009: *
010: * Unless required by applicable law or agreed to in writing, software
011: * distributed under the License is distributed on an "AS IS" BASIS,
012: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013: * See the License for the specific language governing permissions and
014: * limitations under the License. For additional information regarding
015: * copyright in this work, please see the NOTICE file in the top level
016: * directory of this distribution.
017: */
018:
019: package org.apache.roller.ui.rendering.model;
020:
021: import java.util.Map;
022: import javax.servlet.jsp.PageContext;
023: import org.apache.commons.logging.Log;
024: import org.apache.commons.logging.LogFactory;
025: import org.apache.roller.RollerException;
026: import org.apache.roller.pojos.wrapper.WebsiteDataWrapper;
027: import org.apache.roller.ui.core.tags.calendar.BigWeblogCalendarModel;
028: import org.apache.roller.ui.core.tags.calendar.CalendarTag;
029: import org.apache.roller.ui.core.tags.calendar.WeblogCalendarModel;
030: import org.apache.roller.ui.rendering.util.WeblogPageRequest;
031: import org.apache.roller.ui.rendering.util.WeblogRequest;
032:
033: /**
034: * Model which provides functionality for displaying weblog calendar.
035: *
036: * Implemented by calling hybrid JSP tag.
037: */
038: public class CalendarModel implements Model {
039:
040: private static Log log = LogFactory.getLog(CalendarModel.class);
041:
042: private PageContext pageContext = null;
043: private WeblogPageRequest pageRequest = null;
044:
045: /** Template context name to be used for model */
046: public String getModelName() {
047: return "calendarModel";
048: }
049:
050: /** Init page model based on request */
051: public void init(Map initData) throws RollerException {
052:
053: // extract page context
054: this .pageContext = (PageContext) initData.get("pageContext");
055:
056: // we expect the init data to contain a weblogRequest object
057: WeblogRequest weblogRequest = (WeblogRequest) initData
058: .get("weblogRequest");
059: if (weblogRequest == null) {
060: throw new RollerException(
061: "expected weblogRequest from init data");
062: }
063:
064: // CalendarModel only works on page requests, so cast weblogRequest
065: // into a WeblogPageRequest and if it fails then throw exception
066: if (weblogRequest instanceof WeblogPageRequest) {
067: this .pageRequest = (WeblogPageRequest) weblogRequest;
068: } else {
069: throw new RollerException(
070: "weblogRequest is not a WeblogPageRequest."
071: + " CalendarModel only supports page requests.");
072: }
073: }
074:
075: public String showWeblogEntryCalendar(
076: WebsiteDataWrapper websiteWrapper, String catArgument) {
077: return showWeblogEntryCalendar(websiteWrapper, catArgument,
078: false);
079: }
080:
081: public String showWeblogEntryCalendarBig(
082: WebsiteDataWrapper websiteWrapper, String catArgument) {
083: return showWeblogEntryCalendar(websiteWrapper, catArgument,
084: true);
085: }
086:
087: private String showWeblogEntryCalendar(
088: WebsiteDataWrapper websiteWrapper, String catArgument,
089: boolean big) {
090:
091: if ("nil".equals(catArgument))
092: catArgument = null;
093: String ret = null;
094: try {
095: org.apache.roller.ui.core.tags.calendar.CalendarModel model = null;
096: if (big) {
097: model = new BigWeblogCalendarModel(pageRequest,
098: catArgument);
099: } else {
100: model = new WeblogCalendarModel(pageRequest,
101: catArgument);
102: }
103:
104: // save model in JSP page context so CalendarTag can find it
105: pageContext.setAttribute("calendarModel", model);
106:
107: CalendarTag calTag = new CalendarTag();
108: calTag.setPageContext(pageContext);
109: calTag.setName("calendar");
110: calTag.setModel("calendarModel");
111: calTag.setLocale(pageRequest.getLocaleInstance());
112: if (big) {
113: calTag.setClassSuffix("Big");
114: }
115: ret = calTag.emit();
116: } catch (Exception e) {
117: log.error("ERROR: initializing calendar tag", e);
118: }
119: return ret;
120: }
121:
122: }
|