//# 0 errors, 549 messages
//#
/*
    //#WeblogCalendarModel.java:1:1: class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
 * 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.core.tags.calendar;

import java.text.ParsePosition;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.TimeZone;

import org.apache.commons.lang.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.WeblogManager;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.Weblog;
import org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest;
import org.apache.roller.util.DateUtil;


/**
 * Calendar model for calendar intended for use on view-weblog page.
 */
public class WeblogCalendarModel implements CalendarModel {
    
    private static Log log = LogFactory.getLog(WeblogCalendarModel.class);
    //#WeblogCalendarModel.java:48: method: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init
    //#WeblogCalendarModel.java:48: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeNextMonthUrl()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computePrevMonthUrl()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeTodayMonthUrl()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getContent(Ljava/util/Date;)Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getDay()Ljava/util/Date;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getNextMonth()Ljava/util/Date;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getParameterValue(Ljava/util/Date;)Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getPrevMonth()Ljava/util/Date;
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.initDay(Ljava/util/Date;)V
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.setDay(Ljava/lang/String;)V
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): log
    //#output(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): org/apache/roller/weblogger/ui/core/tags/calendar/CalendarModel.__Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): org/apache/roller/weblogger/ui/core/tags/calendar/CalendarModel.__Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeNextMonthUrl()Ljava/lang/String; == &computeNextMonthUrl
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computePrevMonthUrl()Ljava/lang/String; == &computePrevMonthUrl
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeTodayMonthUrl()Ljava/lang/String; == &computeTodayMonthUrl
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String; == &computeUrl
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getCalendar()Ljava/util/Calendar; == &getCalendar
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getContent(Ljava/util/Date;)Ljava/lang/String; == &getContent
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getDay()Ljava/util/Date; == &getDay
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getNextMonth()Ljava/util/Date; == &getNextMonth
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getParameterValue(Ljava/util/Date;)Ljava/lang/String; == &getParameterValue
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.getPrevMonth()Ljava/util/Date; == &getPrevMonth
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.initDay(Ljava/util/Date;)V == &initDay
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V == &loadWeblogEntries
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): __Dispatch_Table.setDay(Ljava/lang/String;)V == &setDay
    //#post(org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init): init'ed(log)
    //#WeblogCalendarModel.java:48: end of method: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel__static_init
    
    protected Map               monthMap;
    protected Date              day;
    protected String            cat = null;
    protected String            pageLink = null;
    protected String            locale = null;
    protected Calendar          calendar = null;
    protected Weblog       weblog = null;
    protected Date              prevMonth = null; // prev month or null if none
    protected Date              nextMonth = null; // next month or null if none    
    protected WeblogPageRequest pageRequest = null;
    
    
    public WeblogCalendarModel(WeblogPageRequest pRequest, String catArgument) {
    //#WeblogCalendarModel.java:62: method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#WeblogCalendarModel.java:62: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): "unable to lookup weblog: "._tainted
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Descendant_Table[others]
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Dispatch_Table.initDay(Ljava/util/Date;)V
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): __Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): catArgument
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): log
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.initDay(Ljava/util/Date;)V
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): pRequest
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this
    //#input(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.__Tag
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#1) num objects
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#3) num objects
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#5) num objects
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new HashMap(loadWeblogEntries#1) num objects
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.calendar
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.cat
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.day
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.locale
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.monthMap
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.nextMonth
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.pageLink
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.pageRequest
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.prevMonth
    //#output(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.weblog
    //#new obj(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#1)
    //#new obj(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#3)
    //#new obj(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#5)
    //#new obj(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new HashMap(loadWeblogEntries#1)
    //#pre[2] (void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): (soft) log != null
    //#pre[4] (void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): (soft) pRequest != null
    //#pre[6] (void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): (soft) this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#presumption(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblog(...)@66 != null
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.calendar)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.cat)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): possibly_updated(this.day)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.locale)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): possibly_updated(this.monthMap)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.nextMonth)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.pageLink)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): this.pageRequest == pRequest
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): (soft) this.pageRequest != null
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): init'ed(this.prevMonth)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): (soft) init'ed(this.weblog)
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#1) num objects <= 1
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#3) num objects <= 1
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new Date(parseWeblogURLDateString#5) num objects <= 1
    //#post(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): new HashMap(loadWeblogEntries#1) num objects <= 1
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.Date
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.Calendar:getInstance
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.lang.String:length
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.commons.lang.StringUtils:isNumeric
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.util.DateUtil:get8charDateFormat
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.text.SimpleDateFormat:setCalendar
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.text.ParsePosition
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.text.SimpleDateFormat:parse
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.Date:after
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.util.DateUtil:get6charDateFormat
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.Calendar:clone
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryStringMap
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.util.DateUtil:getStartOfMonth
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.util.DateUtil:getEndOfMonth
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:java.sql.Timestamp:getTime
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:loadWeblogEntries
    //#unanalyzed(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap
    //#test_vector(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): catArgument: Addr_Set{null}, Inverse{null}
    //#test_vector(void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)): org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogCategoryName(...)@83: Addr_Set{null}, Inverse{null}
        
        this.pageRequest = pRequest;
        try {
            this.weblog = pageRequest.getWeblog();            
    //#WeblogCalendarModel.java:66: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblog()
            if(weblog == null) {
                throw new WebloggerException("unable to lookup weblog: "+
                        pageRequest.getWeblogHandle());
            }
            pageLink = pageRequest.getWeblogPageName();            
    //#WeblogCalendarModel.java:71: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogPageName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogPageName()
//            day = DateUtil.parseWeblogURLDateString(pageRequest.getWeblogDate(),
//                    weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
            day = parseWeblogURLDateString(pageRequest.getWeblogDate(),
    //#WeblogCalendarModel.java:74: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogDate()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogDate()
    //#WeblogCalendarModel.java:74: Warning: method not available
    //#    -- call on TimeZone org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: TimeZone org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance()
    //#WeblogCalendarModel.java:74: Warning: method not available
    //#    -- call on Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
                  weblog.getTimeZoneInstance(), weblog.getLocaleInstance());
            locale = pageRequest.getLocale();
    //#WeblogCalendarModel.java:76: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getLocale()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getLocale()
            
            initDay(day);  
            
            // Category method argument overrides category from URL
            if (catArgument != null) {
                cat = catArgument;
            } else if (pageRequest.getWeblogCategoryName() != null) {
    //#WeblogCalendarModel.java:83: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogCategoryName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogCategoryName()
                cat = pageRequest.getWeblogCategoryName();
    //#WeblogCalendarModel.java:84: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogCategoryName()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.rendering.util.WeblogPageRequest:getWeblogCategoryName()
            }
            
        } catch (Exception e) {
            // some kind of error parsing the request or looking up weblog
            log.debug("ERROR: initializing calendar", e);
    //#WeblogCalendarModel.java:89: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object, Throwable)
        }
        
    }
    //#WeblogCalendarModel.java:92: end of method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel(WeblogPageRequest, String)
    
    
    protected void initDay(Date month) {
        calendar = Calendar.getInstance(
    //#WeblogCalendarModel.java:96: method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.initDay(Date)
    //#WeblogCalendarModel.java:96: Warning: method not available
    //#    -- call on TimeZone org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: TimeZone org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance()
    //#WeblogCalendarModel.java:96: Warning: method not available
    //#    -- call on Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
    //#WeblogCalendarModel.java:96: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    suspicious precondition index: [8]
    //#input(void initDay(Date)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(void initDay(Date)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(void initDay(Date)): __Descendant_Table[others]
    //#input(void initDay(Date)): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void initDay(Date)): __Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void initDay(Date)): log
    //#input(void initDay(Date)): month
    //#input(void initDay(Date)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void initDay(Date)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void initDay(Date)): this
    //#input(void initDay(Date)): this.__Tag
    //#input(void initDay(Date)): this.cat
    //#input(void initDay(Date)): this.locale
    //#input(void initDay(Date)): this.weblog
    //#output(void initDay(Date)): new HashMap(loadWeblogEntries#1) num objects
    //#output(void initDay(Date)): this.calendar
    //#output(void initDay(Date)): this.monthMap
    //#output(void initDay(Date)): this.nextMonth
    //#output(void initDay(Date)): this.prevMonth
    //#new obj(void initDay(Date)): new HashMap(loadWeblogEntries#1)
    //#pre[8] (void initDay(Date)): this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#pre[9] (void initDay(Date)): init'ed(this.cat)
    //#pre[11] (void initDay(Date)): this.weblog != null
    //#pre[1] (void initDay(Date)): (soft) log != null
    //#pre[10] (void initDay(Date)): (soft) init'ed(this.locale)
    //#presumption(void initDay(Date)): java.util.Calendar:getInstance(...)@96 != null
    //#presumption(void initDay(Date)): java.util.Date:getTime(...)@109 >= -9_223_372_036_854_775_807
    //#presumption(void initDay(Date)): java.util.Date:getTime(...)@136 <= 18_446_744_073_709_551_614
    //#presumption(void initDay(Date)): java.util.List:get(...)@124 != null
    //#presumption(void initDay(Date)): java.util.List:get(...)@151 != null
    //#presumption(void initDay(Date)): org.apache.roller.util.DateUtil:getEndOfMonth(...)@102 != null
    //#presumption(void initDay(Date)): org.apache.roller.util.DateUtil:getStartOfMonth(...)@101 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(...)@109 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(...)@136 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@108 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@135 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@108 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@135 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime(...)@125 != null
    //#presumption(void initDay(Date)): org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime(...)@152 != null
    //#post(void initDay(Date)): (soft) this.calendar != null
    //#post(void initDay(Date)): possibly_updated(this.monthMap)
    //#post(void initDay(Date)): possibly_updated(this.nextMonth)
    //#post(void initDay(Date)): possibly_updated(this.prevMonth)
    //#post(void initDay(Date)): new HashMap(loadWeblogEntries#1) num objects <= 1
    //#unanalyzed(void initDay(Date)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(void initDay(Date)): Effects-of-calling:java.util.Calendar:clone
    //#unanalyzed(void initDay(Date)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(void initDay(Date)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryStringMap
    //#unanalyzed(void initDay(Date)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void initDay(Date)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void initDay(Date)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void initDay(Date)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap
    //#test_vector(void initDay(Date)): java.util.Date:after(...)@160: {0}, {1}
    //#test_vector(void initDay(Date)): java.util.List:size(...)@123: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(void initDay(Date)): java.util.List:size(...)@150: {-2_147_483_648..0}, {1..4_294_967_295}
                weblog.getTimeZoneInstance(),
                weblog.getLocaleInstance());
        
        Calendar cal = (Calendar)calendar.clone();
        Date startDate = DateUtil.getStartOfMonth(month,cal);
    //#WeblogCalendarModel.java:101: Warning: method not available
    //#    -- call on Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
        Date endDate = DateUtil.getEndOfMonth(month,cal);
    //#WeblogCalendarModel.java:102: Warning: method not available
    //#    -- call on Date org.apache.roller.util.DateUtil:getEndOfMonth(Date, Calendar)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Date org.apache.roller.util.DateUtil:getEndOfMonth(Date, Calendar)
        
        // Determine previous non-empty month
        // Get entries before startDate, using category restriction limit 1
        // Use entry's date as previous month
        try {
            WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#WeblogCalendarModel.java:108: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:108: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            List prevEntries = mgr.getWeblogEntries(
    //#WeblogCalendarModel.java:109: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(Weblog, User, Date, Date, String, List, String, String, String, String, String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(Weblog, User, Date, Date, String, List, String, String, String, String, String, int, int)
                    
                    weblog,                    // website
                    null,                      // user
                    null,                      // startDate
                    // since we need an entry.pubTime<startDate, but the method use <=
                    new Date(startDate.getTime()-1),                 // endDate 
                    cat,                       // cat
                    null,WeblogEntry.PUBLISHED, // status
                    null,                      // text
                    null,                      // sortby (null means pubTime)
                    WeblogManager.DESCENDING,  // sortorder, null means DESCENDING
                    locale,                    // locale
                    0, 1);                     // offset, range
            if (prevEntries.size() > 0) {
                WeblogEntry prevEntry = (WeblogEntry)prevEntries.get(0);
                prevMonth = DateUtil.getStartOfMonth(new Date(prevEntry.getPubTime().getTime()),getCalendar());
    //#WeblogCalendarModel.java:125: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#WeblogCalendarModel.java:125: Warning: method not available
    //#    -- call on Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
            }
        } catch (WebloggerException e) {
            log.error("ERROR determining previous non-empty month");
    //#WeblogCalendarModel.java:128: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
        }
        
        // Determine next non-empty month
        // Get entries after endDate, using category restriction limit 1
        // Use entry's date as next month
        try {
            WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#WeblogCalendarModel.java:135: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:135: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            List nextEntries = mgr.getWeblogEntries(
    //#WeblogCalendarModel.java:136: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(Weblog, User, Date, Date, String, List, String, String, String, String, String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries(Weblog, User, Date, Date, String, List, String, String, String, String, String, int, int)
                    
                    weblog,                    // website
                    null,                      // user
                    // since we need an entry.pubTime>endDate, but the method use >=
                    new Date(endDate.getTime()+1),                   // startDate
                    null,                      // endDate 
                    cat,                       // cat
                    null,WeblogEntry.PUBLISHED, // status
                    null,                      // text
                    null,                      // sortby (null means pubTime)
                    WeblogManager.ASCENDING,   // sortorder
                    locale,                    // locale
                    0, 1);                     // offset, range
            if (nextEntries.size() > 0) {
                WeblogEntry nextEntry = (WeblogEntry)nextEntries.get(0);
                nextMonth = DateUtil.getStartOfMonth(new Date(nextEntry.getPubTime().getTime()),getCalendar());
    //#WeblogCalendarModel.java:152: Warning: method not available
    //#    -- call on Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Timestamp org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime()
    //#WeblogCalendarModel.java:152: Warning: method not available
    //#    -- call on Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: Date org.apache.roller.util.DateUtil:getStartOfMonth(Date, Calendar)
            }
        } catch (WebloggerException e) {
            log.error("ERROR determining next non-empty month");
    //#WeblogCalendarModel.java:155: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void initDay(Date)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
        }  
        
        // Fix for ROL-840 Don't include future entries
        Date now = new Date();
        if (endDate.after(now)) {
        	endDate = now;
        	nextMonth = null;
        }
        
        loadWeblogEntries(startDate, endDate, cat);
    }
    //#WeblogCalendarModel.java:166: end of method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.initDay(Date)
    
    protected void loadWeblogEntries(Date startDate, Date endDate, String catName) {
        try {
            WeblogManager mgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#WeblogCalendarModel.java:170: method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.loadWeblogEntries(Date, Date, String)
    //#WeblogCalendarModel.java:170: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void loadWeblogEntries(Date, Date, String)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:170: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void loadWeblogEntries(Date, Date, String)
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#input(void loadWeblogEntries(Date, Date, String)): catName
    //#input(void loadWeblogEntries(Date, Date, String)): endDate
    //#input(void loadWeblogEntries(Date, Date, String)): log
    //#input(void loadWeblogEntries(Date, Date, String)): startDate
    //#input(void loadWeblogEntries(Date, Date, String)): this
    //#input(void loadWeblogEntries(Date, Date, String)): this.locale
    //#input(void loadWeblogEntries(Date, Date, String)): this.weblog
    //#output(void loadWeblogEntries(Date, Date, String)): new HashMap(loadWeblogEntries#1) num objects
    //#output(void loadWeblogEntries(Date, Date, String)): this.monthMap
    //#new obj(void loadWeblogEntries(Date, Date, String)): new HashMap(loadWeblogEntries#1)
    //#pre[3] (void loadWeblogEntries(Date, Date, String)): (soft) log != null
    //#pre[6] (void loadWeblogEntries(Date, Date, String)): (soft) init'ed(this.locale)
    //#pre[7] (void loadWeblogEntries(Date, Date, String)): (soft) init'ed(this.weblog)
    //#presumption(void loadWeblogEntries(Date, Date, String)): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@170 != null
    //#presumption(void loadWeblogEntries(Date, Date, String)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@170 != null
    //#post(void loadWeblogEntries(Date, Date, String)): init'ed(this.monthMap)
    //#post(void loadWeblogEntries(Date, Date, String)): new HashMap(loadWeblogEntries#1) num objects <= 1
            monthMap = mgr.getWeblogEntryStringMap(
    //#WeblogCalendarModel.java:171: Warning: method not available
    //#    -- call on Map org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryStringMap(Weblog, Date, Date, String, List, String, String, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void loadWeblogEntries(Date, Date, String)
    //#    unanalyzed callee: Map org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryStringMap(Weblog, Date, Date, String, List, String, String, int, int)
                    
                    weblog,                  // website
                    startDate,                 // startDate
                    endDate,                   // endDate
                    catName,                   // cat
                    null,WeblogEntry.PUBLISHED, // status
                    locale,
                    0, -1);
        } catch (WebloggerException e) {
            log.error(e);
    //#WeblogCalendarModel.java:181: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void loadWeblogEntries(Date, Date, String)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object)
            monthMap = new HashMap();
        }
    }
    //#WeblogCalendarModel.java:184: end of method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.loadWeblogEntries(Date, Date, String)
    
    public void setDay(String month) throws Exception {
        SimpleDateFormat fmt = DateUtil.get8charDateFormat();
    //#WeblogCalendarModel.java:187: method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.setDay(String)
    //#WeblogCalendarModel.java:187: Warning: method not available
    //#    -- call on SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void setDay(String)
    //#    unanalyzed callee: SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
    //#WeblogCalendarModel.java:187: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: void setDay(String)
    //#    suspicious precondition index: [9]
    //#input(void setDay(String)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(void setDay(String)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(void setDay(String)): __Descendant_Table[others]
    //#input(void setDay(String)): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void setDay(String)): __Dispatch_Table.initDay(Ljava/util/Date;)V
    //#input(void setDay(String)): __Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void setDay(String)): log
    //#input(void setDay(String)): month
    //#input(void setDay(String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(void setDay(String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.initDay(Ljava/util/Date;)V
    //#input(void setDay(String)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.loadWeblogEntries(Ljava/util/Date;Ljava/util/Date;Ljava/lang/String;)V
    //#input(void setDay(String)): this
    //#input(void setDay(String)): this.__Tag
    //#input(void setDay(String)): this.calendar
    //#input(void setDay(String)): this.cat
    //#input(void setDay(String)): this.locale
    //#input(void setDay(String)): this.weblog
    //#output(void setDay(String)): new HashMap(loadWeblogEntries#1) num objects
    //#output(void setDay(String)): this.calendar
    //#output(void setDay(String)): this.monthMap
    //#output(void setDay(String)): this.nextMonth
    //#output(void setDay(String)): this.prevMonth
    //#new obj(void setDay(String)): new HashMap(loadWeblogEntries#1)
    //#pre[3] (void setDay(String)): this.calendar != null
    //#pre[9] (void setDay(String)): this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#pre[10] (void setDay(String)): init'ed(this.cat)
    //#pre[12] (void setDay(String)): this.weblog != null
    //#pre[1] (void setDay(String)): (soft) log != null
    //#pre[11] (void setDay(String)): (soft) init'ed(this.locale)
    //#presumption(void setDay(String)): java.util.Calendar:getInstance(...)@96 != null
    //#presumption(void setDay(String)): org.apache.roller.util.DateUtil:get8charDateFormat(...)@187 != null
    //#post(void setDay(String)): this.calendar != null
    //#post(void setDay(String)): possibly_updated(this.monthMap)
    //#post(void setDay(String)): possibly_updated(this.nextMonth)
    //#post(void setDay(String)): possibly_updated(this.prevMonth)
    //#post(void setDay(String)): new HashMap(loadWeblogEntries#1) num objects <= 1
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.Date
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.Calendar:getInstance
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.Date:after
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.Calendar:clone
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryStringMap
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getTimeZoneInstance
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.util.DateUtil:getStartOfMonth
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.util.DateUtil:getEndOfMonth
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.Date:getTime
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntries
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.List:size
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.util.List:get
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime
    //#unanalyzed(void setDay(String)): Effects-of-calling:java.sql.Timestamp:getTime
    //#unanalyzed(void setDay(String)): Effects-of-calling:loadWeblogEntries
    //#unanalyzed(void setDay(String)): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntryObjectMap
        fmt.setCalendar(getCalendar());
        ParsePosition pos = new ParsePosition(0);
        initDay( fmt.parse( month, pos ) );
    }
    //#WeblogCalendarModel.java:191: end of method: void org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.setDay(String)
    
    public Date getDay() {
        return (Date)day.clone();
    //#WeblogCalendarModel.java:194: method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getDay()
    //#input(Date getDay()): this
    //#input(Date getDay()): this.day
    //#output(Date getDay()): return_value
    //#pre[2] (Date getDay()): this.day != null
    //#post(Date getDay()): return_value != null
    //#WeblogCalendarModel.java:194: end of method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getDay()
    }
    
    public String getParameterValue(Date day) {
        return (String)monthMap.get( day );
    //#WeblogCalendarModel.java:198: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getParameterValue(Date)
    //#input(String getParameterValue(Date)): day
    //#input(String getParameterValue(Date)): this
    //#input(String getParameterValue(Date)): this.monthMap
    //#output(String getParameterValue(Date)): return_value
    //#pre[3] (String getParameterValue(Date)): this.monthMap != null
    //#post(String getParameterValue(Date)): init'ed(return_value)
    //#WeblogCalendarModel.java:198: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getParameterValue(Date)
    }

    // convenience method returns 8 char day stamp YYYYMMDD
    public static String format8chars(Date date, Calendar cal) {
    	SimpleDateFormat format = DateUtil.get8charDateFormat();
    //#WeblogCalendarModel.java:203: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.format8chars(Date, Calendar)
    //#WeblogCalendarModel.java:203: Warning: method not available
    //#    -- call on SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String format8chars(Date, Calendar)
    //#    unanalyzed callee: SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
    //#input(String format8chars(Date, Calendar)): cal
    //#input(String format8chars(Date, Calendar)): date
    //#output(String format8chars(Date, Calendar)): return_value
    //#presumption(String format8chars(Date, Calendar)): org.apache.roller.util.DateUtil:get8charDateFormat(...)@203 != null
    //#post(String format8chars(Date, Calendar)): init'ed(return_value)
    	format.setCalendar(cal);
    	return DateUtil.format(date,format);
    //#WeblogCalendarModel.java:205: Warning: method not available
    //#    -- call on String org.apache.roller.util.DateUtil:format(Date, SimpleDateFormat)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String format8chars(Date, Calendar)
    //#    unanalyzed callee: String org.apache.roller.util.DateUtil:format(Date, SimpleDateFormat)
    //#WeblogCalendarModel.java:205: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.format8chars(Date, Calendar)
    }
    
    
    // convenience method returns 6 char month stamp YYYYMM
    public static String format6chars(Date date, Calendar cal) {
    	SimpleDateFormat format = DateUtil.get6charDateFormat();
    //#WeblogCalendarModel.java:211: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.format6chars(Date, Calendar)
    //#WeblogCalendarModel.java:211: Warning: method not available
    //#    -- call on SimpleDateFormat org.apache.roller.util.DateUtil:get6charDateFormat()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String format6chars(Date, Calendar)
    //#    unanalyzed callee: SimpleDateFormat org.apache.roller.util.DateUtil:get6charDateFormat()
    //#input(String format6chars(Date, Calendar)): cal
    //#input(String format6chars(Date, Calendar)): date
    //#output(String format6chars(Date, Calendar)): return_value
    //#presumption(String format6chars(Date, Calendar)): org.apache.roller.util.DateUtil:get6charDateFormat(...)@211 != null
    //#post(String format6chars(Date, Calendar)): init'ed(return_value)
    	format.setCalendar(cal);
    	return DateUtil.format(date,format);
    //#WeblogCalendarModel.java:213: Warning: method not available
    //#    -- call on String org.apache.roller.util.DateUtil:format(Date, SimpleDateFormat)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String format6chars(Date, Calendar)
    //#    unanalyzed callee: String org.apache.roller.util.DateUtil:format(Date, SimpleDateFormat)
    //#WeblogCalendarModel.java:213: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.format6chars(Date, Calendar)
    }

    /**
     * Parse data as either 6-char or 8-char format.
     */
    public static Date parseWeblogURLDateString(String dateString, TimeZone tz, Locale locale) {
        
        Date ret = new Date();
    //#WeblogCalendarModel.java:221: method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.parseWeblogURLDateString(String, TimeZone, Locale)
    //#input(Date parseWeblogURLDateString(String, TimeZone, Locale)): dateString
    //#input(Date parseWeblogURLDateString(String, TimeZone, Locale)): locale
    //#input(Date parseWeblogURLDateString(String, TimeZone, Locale)): tz
    //#output(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#1) num objects
    //#output(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#3) num objects
    //#output(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#5) num objects
    //#output(Date parseWeblogURLDateString(String, TimeZone, Locale)): return_value
    //#new obj(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#1)
    //#new obj(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#3)
    //#new obj(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#5)
    //#presumption(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.text.SimpleDateFormat:parse(...)@230 != null
    //#presumption(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.text.SimpleDateFormat:parse(...)@250 != null
    //#presumption(Date parseWeblogURLDateString(String, TimeZone, Locale)): org.apache.roller.util.DateUtil:get6charDateFormat(...)@247 != null
    //#presumption(Date parseWeblogURLDateString(String, TimeZone, Locale)): org.apache.roller.util.DateUtil:get8charDateFormat(...)@227 != null
    //#post(Date parseWeblogURLDateString(String, TimeZone, Locale)): (soft) return_value != null
    //#post(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#1) num objects == 1
    //#post(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#3) num objects <= 1
    //#post(Date parseWeblogURLDateString(String, TimeZone, Locale)): new Date(parseWeblogURLDateString#5) num objects <= 1
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): dateString: Addr_Set{null}, Inverse{null}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.lang.String:length(...)@224: {0..7, 9..4_294_967_295}, {8}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.lang.String:length(...)@244: {0..5, 7..4_294_967_295}, {6}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.util.Date:after(...)@240: {0}, {1}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): java.util.Date:after(...)@258: {0}, {1}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): org.apache.commons.lang.StringUtils:isNumeric(...)@224: {0}, {1}
    //#test_vector(Date parseWeblogURLDateString(String, TimeZone, Locale)): org.apache.commons.lang.StringUtils:isNumeric(...)@244: {0}, {1}
        Calendar cal = Calendar.getInstance(tz,locale);
        
        if (dateString != null
    //#WeblogCalendarModel.java:224: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isNumeric(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: Date parseWeblogURLDateString(String, TimeZone, Locale)
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isNumeric(String)
                && dateString.length()==8
                && StringUtils.isNumeric(dateString) ) {
            SimpleDateFormat char8DateFormat = DateUtil.get8charDateFormat();
    //#WeblogCalendarModel.java:227: Warning: method not available
    //#    -- call on SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: Date parseWeblogURLDateString(String, TimeZone, Locale)
    //#    unanalyzed callee: SimpleDateFormat org.apache.roller.util.DateUtil:get8charDateFormat()
            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 = null;
//            Calendar todayCal = Calendar.getInstance();
//            todayCal = Calendar.getInstance(tz, locale);
//            todayCal.setTime(new Date());
//            today = todayCal.getTime();
            // Date is always ms offset from epoch in UTC, by no means of timezone.
            Date today = new Date();
            if(ret.after(today)) {
                ret = today;
            }
            
        } else if(dateString != null
    //#WeblogCalendarModel.java:244: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isNumeric(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: Date parseWeblogURLDateString(String, TimeZone, Locale)
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isNumeric(String)
                && dateString.length()==6
                && StringUtils.isNumeric(dateString)) {
            SimpleDateFormat char6DateFormat = DateUtil.get6charDateFormat();
    //#WeblogCalendarModel.java:247: Warning: method not available
    //#    -- call on SimpleDateFormat org.apache.roller.util.DateUtil:get6charDateFormat()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: Date parseWeblogURLDateString(String, TimeZone, Locale)
    //#    unanalyzed callee: SimpleDateFormat org.apache.roller.util.DateUtil:get6charDateFormat()
            char6DateFormat.setCalendar(cal);
            ParsePosition pos = new ParsePosition(0);
            ret = char6DateFormat.parse(dateString, pos);
            
            // make sure the requested date is not in the future
//            Calendar todayCal = Calendar.getInstance();
//            todayCal = Calendar.getInstance(tz, locale);
//            todayCal.setTime(new Date());
//            Date today = todayCal.getTime();
            Date today = new Date();
            if(ret.after(today)) {
                ret = today;
            }
        }
        
        return ret;
    //#WeblogCalendarModel.java:263: end of method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.parseWeblogURLDateString(String, TimeZone, Locale)
    }
    
    /**
     * Create URL for use on view-weblog page
     * @param day       Day for URL or null if no entries on that day
     * @param alwaysURL Always return a URL, never return null
     * @return          URL for day, or null if no weblog entry on that day
     */
    public String computeUrl(Date day, boolean monthURL, boolean alwaysURL) {
        String url = null;
    //#WeblogCalendarModel.java:273: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeUrl(Date, bool, bool)
    //#WeblogCalendarModel.java:273: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    suspicious precondition index: [6]
    //#    Attribs:  Soft
    //#input(String computeUrl(Date, bool, bool)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(String computeUrl(Date, bool, bool)): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(String computeUrl(Date, bool, bool)): __Descendant_Table[others]
    //#input(String computeUrl(Date, bool, bool)): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computeUrl(Date, bool, bool)): alwaysURL
    //#input(String computeUrl(Date, bool, bool)): day
    //#input(String computeUrl(Date, bool, bool)): log
    //#input(String computeUrl(Date, bool, bool)): monthURL
    //#input(String computeUrl(Date, bool, bool)): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computeUrl(Date, bool, bool)): this
    //#input(String computeUrl(Date, bool, bool)): this.__Tag
    //#input(String computeUrl(Date, bool, bool)): this.calendar
    //#input(String computeUrl(Date, bool, bool)): this.cat
    //#input(String computeUrl(Date, bool, bool)): this.locale
    //#input(String computeUrl(Date, bool, bool)): this.monthMap
    //#input(String computeUrl(Date, bool, bool)): this.pageLink
    //#input(String computeUrl(Date, bool, bool)): this.weblog
    //#output(String computeUrl(Date, bool, bool)): return_value
    //#pre[10] (String computeUrl(Date, bool, bool)): this.monthMap != null
    //#pre[3] (String computeUrl(Date, bool, bool)): (soft) log != null
    //#pre[6] (String computeUrl(Date, bool, bool)): (soft) this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#pre[7] (String computeUrl(Date, bool, bool)): (soft) this.calendar != null
    //#pre[8] (String computeUrl(Date, bool, bool)): (soft) init'ed(this.cat)
    //#pre[9] (String computeUrl(Date, bool, bool)): (soft) init'ed(this.locale)
    //#pre[11] (String computeUrl(Date, bool, bool)): (soft) init'ed(this.pageLink)
    //#pre[12] (String computeUrl(Date, bool, bool)): (soft) init'ed(this.weblog)
    //#presumption(String computeUrl(Date, bool, bool)): org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@286 != null
    //#presumption(String computeUrl(Date, bool, bool)): org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@288 != null
    //#presumption(String computeUrl(Date, bool, bool)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@286 != null
    //#presumption(String computeUrl(Date, bool, bool)): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@288 != null
    //#post(String computeUrl(Date, bool, bool)): init'ed(return_value)
    //#unanalyzed(String computeUrl(Date, bool, bool)): Effects-of-calling:org.apache.roller.util.DateUtil:get8charDateFormat
    //#unanalyzed(String computeUrl(Date, bool, bool)): Effects-of-calling:java.text.SimpleDateFormat:setCalendar
    //#unanalyzed(String computeUrl(Date, bool, bool)): Effects-of-calling:org.apache.roller.util.DateUtil:get6charDateFormat
    //#unanalyzed(String computeUrl(Date, bool, bool)): Effects-of-calling:org.apache.roller.util.DateUtil:format
    //#unanalyzed(String computeUrl(Date, bool, bool)): Effects-of-calling:java.util.Calendar:clone
    //#test_vector(String computeUrl(Date, bool, bool)): alwaysURL: {1}, {0}
    //#test_vector(String computeUrl(Date, bool, bool)): monthURL: {1}, {0}
    //#test_vector(String computeUrl(Date, bool, bool)): this.pageLink: Inverse{null}, Addr_Set{null}
    //#test_vector(String computeUrl(Date, bool, bool)): java.util.Map:get(...)@275: Inverse{null}, Addr_Set{null}
        // get the 8 char YYYYMMDD datestring for day
        String dateString = (String)monthMap.get(day);
        if (dateString == null && !alwaysURL) return null;
        else if (dateString == null && !monthURL) {
            dateString = DateUtil.format8chars(day);
    //#WeblogCalendarModel.java:278: Warning: unused assignment
    //#    unused assignment into dateString
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#WeblogCalendarModel.java:278: Warning: method not available
    //#    -- call on String org.apache.roller.util.DateUtil:format8chars(Date)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: String org.apache.roller.util.DateUtil:format8chars(Date)
        	dateString = format8chars(day,getCalendar());
        } else if (dateString == null && monthURL) {
//            dateString = DateUtil.format6chars(day);
            dateString = format6chars(day,getCalendar());
        }
        try {
            if (pageLink == null) { // create date URL
                url = WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogCollectionURL(weblog, locale, cat, dateString, null, -1, false);
    //#WeblogCalendarModel.java:286: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:286: Warning: method not available
    //#    -- call on URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#WeblogCalendarModel.java:286: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL(Weblog, String, String, String, List, int, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL(Weblog, String, String, String, List, int, bool)
            } else { // create page URL
                url = WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogPageURL(weblog, locale, pageLink, null, cat, dateString, null, -1, false);
    //#WeblogCalendarModel.java:288: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:288: Warning: method not available
    //#    -- call on URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#WeblogCalendarModel.java:288: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL(Weblog, String, String, String, String, String, List, int, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: String org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL(Weblog, String, String, String, String, String, List, int, bool)
            }
        } catch (Exception e) {
            log.error("ERROR: creating URL",e);
    //#WeblogCalendarModel.java:291: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeUrl(Date, bool, bool)
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
        }
        return url;
    //#WeblogCalendarModel.java:293: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeUrl(Date, bool, bool)
    }
    
    public String getContent(Date day) {
        return null;
    //#WeblogCalendarModel.java:297: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getContent(Date)
    //#output(String getContent(Date)): return_value
    //#post(String getContent(Date)): return_value == null
    //#WeblogCalendarModel.java:297: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getContent(Date)
    }
    
    public Calendar getCalendar() {
        return (Calendar)calendar.clone();
    //#WeblogCalendarModel.java:301: method: Calendar org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getCalendar()
    //#input(Calendar getCalendar()): this
    //#input(Calendar getCalendar()): this.calendar
    //#output(Calendar getCalendar()): return_value
    //#pre[2] (Calendar getCalendar()): this.calendar != null
    //#post(Calendar getCalendar()): return_value != null
    //#WeblogCalendarModel.java:301: end of method: Calendar org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getCalendar()
    }
    
    public Date getNextMonth() {
        return nextMonth;
    //#WeblogCalendarModel.java:305: method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getNextMonth()
    //#input(Date getNextMonth()): this
    //#input(Date getNextMonth()): this.nextMonth
    //#output(Date getNextMonth()): return_value
    //#pre[2] (Date getNextMonth()): init'ed(this.nextMonth)
    //#post(Date getNextMonth()): return_value == this.nextMonth
    //#post(Date getNextMonth()): init'ed(return_value)
    //#WeblogCalendarModel.java:305: end of method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getNextMonth()
    }

    public Date getPrevMonth() {
        return prevMonth;
    //#WeblogCalendarModel.java:309: method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getPrevMonth()
    //#input(Date getPrevMonth()): this
    //#input(Date getPrevMonth()): this.prevMonth
    //#output(Date getPrevMonth()): return_value
    //#pre[2] (Date getPrevMonth()): init'ed(this.prevMonth)
    //#post(Date getPrevMonth()): return_value == this.prevMonth
    //#post(Date getPrevMonth()): init'ed(return_value)
    //#WeblogCalendarModel.java:309: end of method: Date org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.getPrevMonth()
    }
       
    public String computeNextMonthUrl() {
        return computeUrl(nextMonth, true, true);
    //#WeblogCalendarModel.java:313: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeNextMonthUrl()
    //#WeblogCalendarModel.java:313: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeNextMonthUrl()
    //#    suspicious precondition index: [4]
    //#input(String computeNextMonthUrl()): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(String computeNextMonthUrl()): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(String computeNextMonthUrl()): __Descendant_Table[others]
    //#input(String computeNextMonthUrl()): __Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String;
    //#input(String computeNextMonthUrl()): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computeNextMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String;
    //#input(String computeNextMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computeNextMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.mStarDateFormat
    //#input(String computeNextMonthUrl()): this
    //#input(String computeNextMonthUrl()): this.__Tag
    //#input(String computeNextMonthUrl()): this.cat
    //#input(String computeNextMonthUrl()): this.locale
    //#input(String computeNextMonthUrl()): this.monthMap
    //#input(String computeNextMonthUrl()): this.nextMonth
    //#input(String computeNextMonthUrl()): this.pageLink
    //#input(String computeNextMonthUrl()): this.weblog
    //#output(String computeNextMonthUrl()): return_value
    //#pre[4] (String computeNextMonthUrl()): this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#pre[8] (String computeNextMonthUrl()): this.monthMap != null
    //#pre[9] (String computeNextMonthUrl()): init'ed(this.nextMonth)
    //#pre[6] (String computeNextMonthUrl()): (soft) init'ed(this.cat)
    //#pre[7] (String computeNextMonthUrl()): (soft) init'ed(this.locale)
    //#pre[10] (String computeNextMonthUrl()): (soft) init'ed(this.pageLink)
    //#pre[11] (String computeNextMonthUrl()): (soft) init'ed(this.weblog)
    //#post(String computeNextMonthUrl()): init'ed(return_value)
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:get8charDateFormat
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.text.SimpleDateFormat:setCalendar
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:get6charDateFormat
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.util.Calendar:clone
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format8chars
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:java.text.SimpleDateFormat:format
    //#unanalyzed(String computeNextMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format6chars
    //#WeblogCalendarModel.java:313: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeNextMonthUrl()
    }

    public String computePrevMonthUrl() {
        return computeUrl(prevMonth, true, true);
    //#WeblogCalendarModel.java:317: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computePrevMonthUrl()
    //#WeblogCalendarModel.java:317: Warning: suspicious precondition
    //#    the precondition for this.__Tag is not a contiguous range of values
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computePrevMonthUrl()
    //#    suspicious precondition index: [4]
    //#    Attribs:  Soft
    //#input(String computePrevMonthUrl()): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel]
    //#input(String computePrevMonthUrl()): __Descendant_Table[org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel]
    //#input(String computePrevMonthUrl()): __Descendant_Table[others]
    //#input(String computePrevMonthUrl()): __Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String;
    //#input(String computePrevMonthUrl()): __Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computePrevMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.computeUrl(Ljava/util/Date;ZZ)Ljava/lang/String;
    //#input(String computePrevMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.__Dispatch_Table.getCalendar()Ljava/util/Calendar;
    //#input(String computePrevMonthUrl()): org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel.mStarDateFormat
    //#input(String computePrevMonthUrl()): this
    //#input(String computePrevMonthUrl()): this.__Tag
    //#input(String computePrevMonthUrl()): this.cat
    //#input(String computePrevMonthUrl()): this.locale
    //#input(String computePrevMonthUrl()): this.monthMap
    //#input(String computePrevMonthUrl()): this.pageLink
    //#input(String computePrevMonthUrl()): this.prevMonth
    //#input(String computePrevMonthUrl()): this.weblog
    //#output(String computePrevMonthUrl()): return_value
    //#pre[8] (String computePrevMonthUrl()): this.monthMap != null
    //#pre[10] (String computePrevMonthUrl()): init'ed(this.prevMonth)
    //#pre[4] (String computePrevMonthUrl()): (soft) this.__Tag in {org/apache/roller/weblogger/ui/core/tags/calendar/BigWeblogCalendarModel, org/apache/roller/weblogger/ui/core/tags/calendar/WeblogCalendarModel}
    //#pre[6] (String computePrevMonthUrl()): (soft) init'ed(this.cat)
    //#pre[7] (String computePrevMonthUrl()): (soft) init'ed(this.locale)
    //#pre[9] (String computePrevMonthUrl()): (soft) init'ed(this.pageLink)
    //#pre[11] (String computePrevMonthUrl()): (soft) init'ed(this.weblog)
    //#post(String computePrevMonthUrl()): init'ed(return_value)
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:get8charDateFormat
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.text.SimpleDateFormat:setCalendar
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:get6charDateFormat
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.util.Map:get
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.util.Calendar:clone
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format8chars
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntry:getPubTime
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:java.text.SimpleDateFormat:format
    //#unanalyzed(String computePrevMonthUrl()): Effects-of-calling:org.apache.roller.util.DateUtil:format6chars
    //#WeblogCalendarModel.java:317: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computePrevMonthUrl()
    }
    
    public String computeTodayMonthUrl() {
    	String url;
        if (pageLink == null) { // create default URL
    //#WeblogCalendarModel.java:322: method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeTodayMonthUrl()
    //#input(String computeTodayMonthUrl()): this
    //#input(String computeTodayMonthUrl()): this.cat
    //#input(String computeTodayMonthUrl()): this.locale
    //#input(String computeTodayMonthUrl()): this.pageLink
    //#input(String computeTodayMonthUrl()): this.weblog
    //#output(String computeTodayMonthUrl()): return_value
    //#pre[2] (String computeTodayMonthUrl()): init'ed(this.cat)
    //#pre[3] (String computeTodayMonthUrl()): init'ed(this.locale)
    //#pre[4] (String computeTodayMonthUrl()): init'ed(this.pageLink)
    //#pre[5] (String computeTodayMonthUrl()): init'ed(this.weblog)
    //#presumption(String computeTodayMonthUrl()): org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@323 != null
    //#presumption(String computeTodayMonthUrl()): org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@325 != null
    //#presumption(String computeTodayMonthUrl()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@323 != null
    //#presumption(String computeTodayMonthUrl()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@325 != null
    //#post(String computeTodayMonthUrl()): init'ed(return_value)
    //#test_vector(String computeTodayMonthUrl()): this.pageLink: Inverse{null}, Addr_Set{null}
            url = WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogCollectionURL(weblog, locale, cat, null, null, -1, false);
    //#WeblogCalendarModel.java:323: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:323: Warning: method not available
    //#    -- call on URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#WeblogCalendarModel.java:323: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL(Weblog, String, String, String, List, int, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: String org.apache.roller.weblogger.business.URLStrategy:getWeblogCollectionURL(Weblog, String, String, String, List, int, bool)
        } else { // create page URL
            url = WebloggerFactory.getWeblogger().getUrlStrategy().getWeblogPageURL(weblog, locale, pageLink, null, cat, null, null, -1, false);
    //#WeblogCalendarModel.java:325: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#WeblogCalendarModel.java:325: Warning: method not available
    //#    -- call on URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#WeblogCalendarModel.java:325: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL(Weblog, String, String, String, String, String, List, int, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
    //#    method: String computeTodayMonthUrl()
    //#    unanalyzed callee: String org.apache.roller.weblogger.business.URLStrategy:getWeblogPageURL(Weblog, String, String, String, String, String, List, int, bool)
        }
    	return url;
    //#WeblogCalendarModel.java:327: end of method: String org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel.computeTodayMonthUrl()
    }
    
}
    //#WeblogCalendarModel.java:: end of class: org.apache.roller.weblogger.ui.core.tags.calendar.WeblogCalendarModel
