//# 7 errors, 1,041 messages
//#
/*
    //#Comments.java:1:1: class: org.apache.roller.weblogger.ui.struts2.editor.Comments
 * 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.struts2.editor;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
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.business.search.IndexManager;
import org.apache.roller.weblogger.config.WebloggerConfig;
import org.apache.roller.weblogger.pojos.WeblogEntry;
import org.apache.roller.weblogger.pojos.WeblogEntryComment;
import org.apache.roller.weblogger.pojos.WeblogPermission;
import org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager;
import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
import org.apache.roller.weblogger.util.cache.CacheManager;
import org.apache.roller.weblogger.ui.struts2.util.UIAction;
import org.apache.roller.weblogger.util.I18nMessages;
import org.apache.roller.weblogger.util.MailUtil;
import org.apache.roller.weblogger.util.Utilities;


/**
 * Action for managing weblog comments.
 */
public class Comments extends UIAction {
    
    private static Log log = LogFactory.getLog(Comments.class);
    //#Comments.java:54: method: org.apache.roller.weblogger.ui.struts2.editor.Comments.org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init
    //#Comments.java:54: Warning: method not available
    //#    -- call on Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init
    //#    unanalyzed callee: Log org.apache.commons.logging.LogFactory:getLog(Class)
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.buildBaseUrl()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.delete()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.execute()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getBulkDeleteCount()I
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getCommentStatusOptions()Ljava/util/List;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getFirstComment()Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getLastComment()Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getSpamStatusOptions()Ljava/util/List;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.loadComments()V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.query()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.requiredWeblogPermissions()S
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setBulkDeleteCount(I)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.update()Ljava/lang/String;
    //#output(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): log
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments] == &__Dispatch_Table
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.buildBaseUrl()Ljava/lang/String; == &buildBaseUrl
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.delete()Ljava/lang/String; == &delete
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.execute()Ljava/lang/String; == &execute
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean; == &getBean
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getBulkDeleteCount()I == &getBulkDeleteCount
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getCommentStatusOptions()Ljava/util/List; == &getCommentStatusOptions
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getFirstComment()Lorg/apache/roller/weblogger/pojos/WeblogEntryComment; == &getFirstComment
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getLastComment()Lorg/apache/roller/weblogger/pojos/WeblogEntryComment; == &getLastComment
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager; == &getPager
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry; == &getQueryEntry
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.getSpamStatusOptions()Ljava/util/List; == &getSpamStatusOptions
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.loadComments()V == &loadComments
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.query()Ljava/lang/String; == &query
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.requiredWeblogPermissions()S == &requiredWeblogPermissions
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;)V == &setBean
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setBulkDeleteCount(I)V == &setBulkDeleteCount
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V == &setFirstComment
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V == &setLastComment
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V == &setPager
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V == &setQueryEntry
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): __Dispatch_Table.update()Ljava/lang/String; == &update
    //#post(org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init): init'ed(log)
    //#Comments.java:54: end of method: org.apache.roller.weblogger.ui.struts2.editor.Comments.org.apache.roller.weblogger.ui.struts2.editor.Comments__static_init
    
    // number of comments to show per page
    private static final int COUNT = 30;
    
    // bean for managing submitted data
    private CommentsBean bean = new CommentsBean();
    
    // pager for the comments we are viewing
    private CommentsPager pager = null;
    
    // first comment in the list
    private WeblogEntryComment firstComment = null;
    
    // last comment in the list
    private WeblogEntryComment lastComment = null;
    
    // entry associated with comments or null if none
    private WeblogEntry queryEntry = null;
    
    // indicates number of comments that would be deleted by bulk removal
    // a non-zero value here indicates bulk removal is a valid option
    private int bulkDeleteCount = 0;
    
    
    public Comments() {
    //#Comments.java:79: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.org.apache.roller.weblogger.ui.struts2.editor.Comments()
    //#Comments.java:79: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void org.apache.roller.weblogger.ui.struts2.editor.Comments()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.UIAction()
    //#input(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new CommentsBean(Comments#1) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.__Tag
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.approvedComments
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.approvedString
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.deleteComments
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.endDateString
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.entryId
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.ids
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.page
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.searchString
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.spamComments
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.spamString
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.startDateString
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#1) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#1).length
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#2) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#2).length
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#3) num objects
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#3).length
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.actionName
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bulkDeleteCount
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.desiredMenu
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.firstComment
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.lastComment
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.pageTitle
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.pager
    //#output(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.queryEntry
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new CommentsBean(Comments#1)
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#1)
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#2)
    //#new obj(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#3)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.actionName == &"comments"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean == &new CommentsBean(Comments#1)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bulkDeleteCount == 0
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.page == 0
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#1).length == 0
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#2).length == 0
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#3).length == 0
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.desiredMenu == &"editor"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.firstComment == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.lastComment == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.pager == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.queryEntry == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.endDateString == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.entryId == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.ids == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.searchString == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.startDateString == null
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.pageTitle == &"commentManagement.title"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new CommentsBean(Comments#1) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#1) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#2) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): new String[](CommentsBean#3) num objects == 1
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.approvedComments == &new String[](CommentsBean#1)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.approvedString == &"ALL"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.spamString == &"ALL"
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.deleteComments == &new String[](CommentsBean#3)
    //#post(void org.apache.roller.weblogger.ui.struts2.editor.Comments()): this.bean.spamComments == &new String[](CommentsBean#2)
        this.actionName = "comments";
        this.desiredMenu = "editor";
        this.pageTitle = "commentManagement.title";
    }
    //#Comments.java:83: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.org.apache.roller.weblogger.ui.struts2.editor.Comments()
    
    
    @Override
    public short requiredWeblogPermissions() {
        return WeblogPermission.AUTHOR;
    //#Comments.java:88: method: short org.apache.roller.weblogger.ui.struts2.editor.Comments.requiredWeblogPermissions()
    //#input(short requiredWeblogPermissions()): org.apache.roller.weblogger.pojos.WeblogPermission.AUTHOR
    //#output(short requiredWeblogPermissions()): return_value
    //#presumption(short requiredWeblogPermissions()): init'ed(org.apache.roller.weblogger.pojos.WeblogPermission.AUTHOR)
    //#post(short requiredWeblogPermissions()): return_value == org.apache.roller.weblogger.pojos.WeblogPermission.AUTHOR
    //#post(short requiredWeblogPermissions()): (soft) init'ed(return_value)
    //#Comments.java:88: end of method: short org.apache.roller.weblogger.ui.struts2.editor.Comments.requiredWeblogPermissions()
    }
    
    
    public void loadComments() {
        
        List comments = Collections.EMPTY_LIST;
    //#Comments.java:94: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.loadComments()
    //#input(void loadComments()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(void loadComments()): __Descendant_Table[others]
    //#input(void loadComments()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(void loadComments()): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(void loadComments()): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(void loadComments()): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(void loadComments()): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#input(void loadComments()): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#input(void loadComments()): java.util.Collections.EMPTY_LIST
    //#input(void loadComments()): log
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDate()Ljava/util/Date;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getPage()I
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDate()Ljava/util/Date;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(void loadComments()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStatus()Ljava/lang/String;
    //#input(void loadComments()): this
    //#input(void loadComments()): this.__Tag
    //#input(void loadComments()): this.bean
    //#input(void loadComments()): this.bean.__Tag
    //#input(void loadComments()): this.bean.approvedString
    //#input(void loadComments()): this.bean.endDateString
    //#input(void loadComments()): this.bean.entryId
    //#input(void loadComments()): this.bean.page
    //#input(void loadComments()): this.bean.searchString
    //#input(void loadComments()): this.bean.spamString
    //#input(void loadComments()): this.bean.startDateString
    //#input(void loadComments()): this.queryEntry
    //#output(void loadComments()): new CommentsPager(loadComments#2) num objects
    //#output(void loadComments()): this.firstComment
    //#output(void loadComments()): this.lastComment
    //#output(void loadComments()): this.pager
    //#output(void loadComments()): this.queryEntry
    //#new obj(void loadComments()): new CommentsPager(loadComments#2)
    //#pre[6] (void loadComments()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[7] (void loadComments()): this.bean != null
    //#pre[8] (void loadComments()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[10] (void loadComments()): init'ed(this.bean.endDateString)
    //#pre[11] (void loadComments()): init'ed(this.bean.entryId)
    //#pre[13] (void loadComments()): init'ed(this.bean.searchString)
    //#pre[15] (void loadComments()): init'ed(this.bean.startDateString)
    //#pre[1] (void loadComments()): (soft) log != null
    //#pre[4] (void loadComments()): (soft) init'ed(this.queryEntry)
    //#pre[9] (void loadComments()): (soft) this.bean.approvedString != null
    //#pre[12] (void loadComments()): (soft) this.bean.page in -71_582_788..143_165_576
    //#pre[14] (void loadComments()): (soft) this.bean.spamString != null
    //#presumption(void loadComments()): init'ed(java.util.Collections.EMPTY_LIST)
    //#presumption(void loadComments()): java.util.List:size(...)@118 >= -2_147_483_647
    //#presumption(void loadComments()): java.util.List:size(...)@123 >= -2_147_483_647
    //#presumption(void loadComments()): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@97 != null
    //#presumption(void loadComments()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@97 != null
    //#post(void loadComments()): possibly_updated(this.firstComment)
    //#post(void loadComments()): possibly_updated(this.lastComment)
    //#post(void loadComments()): this.pager == &new CommentsPager(loadComments#2)
    //#post(void loadComments()): init'ed(this.queryEntry)
    //#post(void loadComments()): new CommentsPager(loadComments#2) num objects == 1
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(void loadComments()): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(void loadComments()): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(void loadComments()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(void loadComments()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(void loadComments()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(void loadComments()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(void loadComments()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#test_vector(void loadComments()): java.util.List:size(...)@116: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(void loadComments()): java.util.List:size(...)@117: {-2_147_483_648..30}, {31..4_294_967_295}
    //#test_vector(void loadComments()): org.apache.commons.lang.StringUtils:isEmpty(...)@100: {1}, {0}
        boolean hasMore = false;
        try {
            WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#Comments.java:97: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:97: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            
            // lookup weblog entry if necessary
            if(!StringUtils.isEmpty(getBean().getEntryId())) {
    //#Comments.java:100: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
                setQueryEntry(wmgr.getWeblogEntry(getBean().getEntryId()));
    //#Comments.java:101: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry(String)
            }
            
            // query for comments
            List rawComments = wmgr.getComments(
    //#Comments.java:105: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:105: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
                    getActionWeblog(),
                    getQueryEntry(),
                    getBean().getSearchString(),
                    getBean().getStartDate(),
                    getBean().getEndDate(),getBean().getStatus(),
                    true, // reverse  chrono order
                    getBean().getPage() * COUNT,
                    COUNT + 1);
            comments = new ArrayList();
            comments.addAll(rawComments);            
            if(comments != null && comments.size() > 0) {
    //#Comments.java:116: Warning: test always goes same way
    //#    test predetermined because comments != null
    //#    severity: LOW
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    from bb: bb_4
    //#    live edge: bb_4-->bb_5
    //#    tested vn: 0
    //#    tested vn values: {0}
                if(comments.size() > COUNT) {
                    comments.remove(comments.size()-1);
                    hasMore = true;
                }
                
                setFirstComment((WeblogEntryComment)comments.get(0));
                setLastComment((WeblogEntryComment)comments.get(comments.size()-1));
            }
        } catch (WebloggerException ex) {
            log.error("Error looking up comments", ex);
    //#Comments.java:126: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("Error looking up comments");
    //#Comments.java:128: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
        }
        
        // build comments pager
        String baseUrl = buildBaseUrl();
        setPager(new CommentsPager(baseUrl, getBean().getPage(), comments, hasMore));
    //#Comments.java:133: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager(String, int, List, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: void loadComments()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager(String, int, List, bool)
    }
    //#Comments.java:134: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.loadComments()
    
    
    // use the action data to build a url representing this action, including query data
    private String buildBaseUrl() {
        
        Map<String, String> params = new HashMap();
    //#Comments.java:140: method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.buildBaseUrl()
    //#input(String buildBaseUrl()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(String buildBaseUrl()): __Descendant_Table[others]
    //#input(String buildBaseUrl()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(String buildBaseUrl()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(String buildBaseUrl()): this
    //#input(String buildBaseUrl()): this.__Tag
    //#input(String buildBaseUrl()): this.bean
    //#input(String buildBaseUrl()): this.bean.__Tag
    //#input(String buildBaseUrl()): this.bean.approvedString
    //#input(String buildBaseUrl()): this.bean.endDateString
    //#input(String buildBaseUrl()): this.bean.entryId
    //#input(String buildBaseUrl()): this.bean.searchString
    //#input(String buildBaseUrl()): this.bean.spamString
    //#input(String buildBaseUrl()): this.bean.startDateString
    //#output(String buildBaseUrl()): return_value
    //#pre[2] (String buildBaseUrl()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[3] (String buildBaseUrl()): this.bean != null
    //#pre[4] (String buildBaseUrl()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[5] (String buildBaseUrl()): init'ed(this.bean.approvedString)
    //#pre[6] (String buildBaseUrl()): init'ed(this.bean.endDateString)
    //#pre[7] (String buildBaseUrl()): init'ed(this.bean.entryId)
    //#pre[8] (String buildBaseUrl()): init'ed(this.bean.searchString)
    //#pre[9] (String buildBaseUrl()): init'ed(this.bean.spamString)
    //#pre[10] (String buildBaseUrl()): init'ed(this.bean.startDateString)
    //#presumption(String buildBaseUrl()): org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@161 != null
    //#presumption(String buildBaseUrl()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@161 != null
    //#presumption(String buildBaseUrl()): org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog(...)@161 != null
    //#post(String buildBaseUrl()): init'ed(return_value)
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@142: {1}, {0}
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@145: {1}, {0}
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@148: {1}, {0}
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@151: {1}, {0}
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@154: {1}, {0}
    //#test_vector(String buildBaseUrl()): org.apache.commons.lang.StringUtils:isEmpty(...)@157: {1}, {0}
        
        if(!StringUtils.isEmpty(getBean().getEntryId())) {
    //#Comments.java:142: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.entryId", getBean().getEntryId());
        }
        if(!StringUtils.isEmpty(getBean().getSearchString())) {
    //#Comments.java:145: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.searchString", getBean().getSearchString());
        }
        if(!StringUtils.isEmpty(getBean().getStartDateString())) {
    //#Comments.java:148: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.startDateString", getBean().getStartDateString());
        }
        if(!StringUtils.isEmpty(getBean().getEndDateString())) {
    //#Comments.java:151: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.endDateString", getBean().getEndDateString());
        }
        if(!StringUtils.isEmpty(getBean().getApprovedString())) {
    //#Comments.java:154: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.approvedString", getBean().getApprovedString());
        }
        if(!StringUtils.isEmpty(getBean().getSpamString())) {
    //#Comments.java:157: Warning: method not available
    //#    -- call on bool org.apache.commons.lang.StringUtils:isEmpty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: bool org.apache.commons.lang.StringUtils:isEmpty(String)
            params.put("bean.spamString", getBean().getSpamString());
        }
        
        return WebloggerFactory.getWeblogger().getUrlStrategy().getActionURL("comments", "/roller-ui/authoring", 
    //#Comments.java:161: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:161: Warning: method not available
    //#    -- call on URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: URLStrategy org.apache.roller.weblogger.business.Weblogger:getUrlStrategy()
    //#Comments.java:161: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:161: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.Weblog:getHandle()
    //#Comments.java:161: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.business.URLStrategy:getActionURL(String, String, String, Map, bool)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String buildBaseUrl()
    //#    unanalyzed callee: String org.apache.roller.weblogger.business.URLStrategy:getActionURL(String, String, String, Map, bool)
    //#Comments.java:161: end of method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.buildBaseUrl()
                getActionWeblog().getHandle(), params, false);
    }
    
    
    public String execute() {
        
        // load list of comments from query
        loadComments();
    //#Comments.java:169: method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.execute()
    //#input(String execute()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(String execute()): __Descendant_Table[others]
    //#input(String execute()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(String execute()): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;
    //#input(String execute()): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(String execute()): __Dispatch_Table.loadComments()V
    //#input(String execute()): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String execute()): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String execute()): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#input(String execute()): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#input(String execute()): java.util.Collections.EMPTY_LIST
    //#input(String execute()): log
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDate()Ljava/util/Date;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getPage()I
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDate()Ljava/util/Date;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStatus()Ljava/lang/String;
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.loadCheckboxes(Ljava/util/List;)V
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setApprovedComments([Ljava/lang/String;)V
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setIds(Ljava/lang/String;)V
    //#input(String execute()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setSpamComments([Ljava/lang/String;)V
    //#input(String execute()): this
    //#input(String execute()): this.__Tag
    //#input(String execute()): this.bean
    //#input(String execute()): this.bean.__Tag
    //#input(String execute()): this.bean.approvedString
    //#input(String execute()): this.bean.endDateString
    //#input(String execute()): this.bean.entryId
    //#input(String execute()): this.bean.page
    //#input(String execute()): this.bean.searchString
    //#input(String execute()): this.bean.spamString
    //#input(String execute()): this.bean.startDateString
    //#input(String execute()): this.queryEntry
    //#output(String execute()): new CommentsPager(loadComments#2) num objects
    //#output(String execute()): return_value
    //#output(String execute()): this.bean.approvedComments
    //#output(String execute()): this.bean.ids
    //#output(String execute()): this.bean.spamComments
    //#output(String execute()): this.firstComment
    //#output(String execute()): this.lastComment
    //#output(String execute()): this.pager
    //#output(String execute()): this.queryEntry
    //#new obj(String execute()): new CommentsPager(loadComments#2)
    //#pre[6] (String execute()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[7] (String execute()): this.bean != null
    //#pre[8] (String execute()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[10] (String execute()): init'ed(this.bean.endDateString)
    //#pre[11] (String execute()): init'ed(this.bean.entryId)
    //#pre[13] (String execute()): init'ed(this.bean.searchString)
    //#pre[15] (String execute()): init'ed(this.bean.startDateString)
    //#pre[1] (String execute()): (soft) log != null
    //#pre[4] (String execute()): (soft) init'ed(this.queryEntry)
    //#pre[9] (String execute()): (soft) this.bean.approvedString != null
    //#pre[12] (String execute()): (soft) this.bean.page in -71_582_788..143_165_576
    //#pre[14] (String execute()): (soft) this.bean.spamString != null
    //#presumption(String execute()): org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems(...)@172 != null
    //#post(String execute()): return_value == &"list"
    //#post(String execute()): init'ed(this.bean.approvedComments)
    //#post(String execute()): init'ed(this.bean.ids)
    //#post(String execute()): init'ed(this.bean.spamComments)
    //#post(String execute()): possibly_updated(this.firstComment)
    //#post(String execute()): possibly_updated(this.lastComment)
    //#post(String execute()): this.pager == &new CommentsPager(loadComments#2)
    //#post(String execute()): init'ed(this.queryEntry)
    //#post(String execute()): new CommentsPager(loadComments#2) num objects == 1
    //#unanalyzed(String execute()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(String execute()): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(String execute()): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(String execute()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String execute()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getComments
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:addError
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(String execute()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String execute()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getId
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:add
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:size
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:stringArrayToString
    //#unanalyzed(String execute()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(String execute()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(String execute()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String execute()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager
        
        // load bean data using comments list
        getBean().loadCheckboxes(getPager().getItems());
    //#Comments.java:172: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String execute()
    //#    unanalyzed callee: List org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems()
        
        return LIST;
    //#Comments.java:174: end of method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.execute()
    }
    
    
    /**
     * Query for a specific subset of comments based on various criteria.
     */
    public String query() {
        
        // load list of comments from query
        loadComments();
    //#Comments.java:184: method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.query()
    //#input(String query()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(String query()): __Descendant_Table[others]
    //#input(String query()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(String query()): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;
    //#input(String query()): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(String query()): __Dispatch_Table.loadComments()V
    //#input(String query()): __Dispatch_Table.setBulkDeleteCount(I)V
    //#input(String query()): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String query()): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String query()): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#input(String query()): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#input(String query()): java.util.Collections.EMPTY_LIST
    //#input(String query()): log
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDate()Ljava/util/Date;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getPage()I
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDate()Ljava/util/Date;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStatus()Ljava/lang/String;
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.loadCheckboxes(Ljava/util/List;)V
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setApprovedComments([Ljava/lang/String;)V
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setIds(Ljava/lang/String;)V
    //#input(String query()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setSpamComments([Ljava/lang/String;)V
    //#input(String query()): this
    //#input(String query()): this.__Tag
    //#input(String query()): this.bean
    //#input(String query()): this.bean.__Tag
    //#input(String query()): this.bean.approvedString
    //#input(String query()): this.bean.endDateString
    //#input(String query()): this.bean.entryId
    //#input(String query()): this.bean.page
    //#input(String query()): this.bean.searchString
    //#input(String query()): this.bean.spamString
    //#input(String query()): this.bean.startDateString
    //#input(String query()): this.queryEntry
    //#output(String query()): new CommentsPager(loadComments#2) num objects
    //#output(String query()): return_value
    //#output(String query()): this.bean.approvedComments
    //#output(String query()): this.bean.ids
    //#output(String query()): this.bean.spamComments
    //#output(String query()): this.bulkDeleteCount
    //#output(String query()): this.firstComment
    //#output(String query()): this.lastComment
    //#output(String query()): this.pager
    //#output(String query()): this.queryEntry
    //#new obj(String query()): new CommentsPager(loadComments#2)
    //#pre[7] (String query()): this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[8] (String query()): this.bean != null
    //#pre[9] (String query()): this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[12] (String query()): init'ed(this.bean.entryId)
    //#pre[1] (String query()): (soft) log != null
    //#pre[5] (String query()): (soft) init'ed(this.queryEntry)
    //#pre[10] (String query()): (soft) this.bean.approvedString != null
    //#pre[11] (String query()): (soft) init'ed(this.bean.endDateString)
    //#pre[13] (String query()): (soft) this.bean.page in -71_582_788..143_165_576
    //#pre[14] (String query()): (soft) init'ed(this.bean.searchString)
    //#pre[15] (String query()): (soft) this.bean.spamString != null
    //#pre[16] (String query()): (soft) init'ed(this.bean.startDateString)
    //#presumption(String query()): org.apache.roller.weblogger.business.WeblogManager:getComments(...)@191 != null
    //#presumption(String query()): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@190 != null
    //#presumption(String query()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@190 != null
    //#presumption(String query()): org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems(...)@187 != null
    //#post(String query()): return_value == &"list"
    //#post(String query()): init'ed(this.bean.approvedComments)
    //#post(String query()): init'ed(this.bean.ids)
    //#post(String query()): init'ed(this.bean.spamComments)
    //#post(String query()): possibly_updated(this.bulkDeleteCount)
    //#post(String query()): possibly_updated(this.firstComment)
    //#post(String query()): possibly_updated(this.lastComment)
    //#post(String query()): this.pager == &new CommentsPager(loadComments#2)
    //#post(String query()): init'ed(this.queryEntry)
    //#post(String query()): new CommentsPager(loadComments#2) num objects == 1
    //#unanalyzed(String query()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog
    //#unanalyzed(String query()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(String query()): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(String query()): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(String query()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String query()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getComments
    //#unanalyzed(String query()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:addError
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(String query()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String query()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getId
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:add
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:size
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:stringArrayToString
    //#unanalyzed(String query()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(String query()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(String query()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String query()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager
    //#test_vector(String query()): java.util.List:size(...)@202: {-2_147_483_648..30}, {31..4_294_967_295}
        
        // load bean data using comments list
        getBean().loadCheckboxes(getPager().getItems());
    //#Comments.java:187: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: List org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems()
        
        try {
            WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#Comments.java:190: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:190: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
            List allMatchingComments = wmgr.getComments(
    //#Comments.java:191: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:191: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
                    getActionWeblog(),
                    null,
                    getBean().getSearchString(),
                    getBean().getStartDate(),
                    getBean().getEndDate(),
                    getBean().getStatus(),
                    true, // reverse  chrono order
                    0,
                    -1);
            
            if(allMatchingComments.size() > COUNT) {
                setBulkDeleteCount(allMatchingComments.size());
            }
            
        } catch (WebloggerException ex) {
            log.error("Error looking up comments", ex);
    //#Comments.java:207: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("Error looking up comments");
    //#Comments.java:209: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String query()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
        }
        
        return LIST;
    //#Comments.java:212: end of method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.query()
    }
    
    
    /**
     * Bulk delete all comments matching query criteria.
     */
    public String delete() {
        
        try {
            WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#Comments.java:222: method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.delete()
    //#Comments.java:222: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:222: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#input(String delete()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(String delete()): __Descendant_Table[others]
    //#input(String delete()): __Dispatch_Table.execute()Ljava/lang/String;
    //#input(String delete()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(String delete()): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;
    //#input(String delete()): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(String delete()): __Dispatch_Table.loadComments()V
    //#input(String delete()): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;)V
    //#input(String delete()): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String delete()): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String delete()): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#input(String delete()): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#input(String delete()): java.util.Collections.EMPTY_LIST
    //#input(String delete()): log
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDate()Ljava/util/Date;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getPage()I
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDate()Ljava/util/Date;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStatus()Ljava/lang/String;
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.loadCheckboxes(Ljava/util/List;)V
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setApprovedComments([Ljava/lang/String;)V
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setIds(Ljava/lang/String;)V
    //#input(String delete()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setSpamComments([Ljava/lang/String;)V
    //#input(String delete()): this
    //#input(String delete()): this.__Tag
    //#input(String delete()): this.bean
    //#input(String delete()): this.bean.__Tag
    //#input(String delete()): this.bean.approvedString
    //#input(String delete()): this.bean.endDateString
    //#input(String delete()): this.bean.entryId
    //#input(String delete()): this.bean.page
    //#input(String delete()): this.bean.searchString
    //#input(String delete()): this.bean.spamString
    //#input(String delete()): this.bean.startDateString
    //#input(String delete()): this.queryEntry
    //#output(String delete()): new CommentsBean(delete#2) num objects
    //#output(String delete()): new CommentsBean(delete#2).__Tag
    //#output(String delete()): new CommentsBean(delete#2).approvedComments
    //#output(String delete()): new CommentsBean(delete#2).approvedString
    //#output(String delete()): new CommentsBean(delete#2).deleteComments
    //#output(String delete()): new CommentsBean(delete#2).endDateString
    //#output(String delete()): new CommentsBean(delete#2).entryId
    //#output(String delete()): new CommentsBean(delete#2).ids
    //#output(String delete()): new CommentsBean(delete#2).page
    //#output(String delete()): new CommentsBean(delete#2).searchString
    //#output(String delete()): new CommentsBean(delete#2).spamComments
    //#output(String delete()): new CommentsBean(delete#2).spamString
    //#output(String delete()): new CommentsBean(delete#2).startDateString
    //#output(String delete()): new CommentsPager(loadComments#2) num objects
    //#output(String delete()): new String[](CommentsBean#1) num objects
    //#output(String delete()): new String[](CommentsBean#1).length
    //#output(String delete()): new String[](CommentsBean#2) num objects
    //#output(String delete()): new String[](CommentsBean#2).length
    //#output(String delete()): new String[](CommentsBean#3) num objects
    //#output(String delete()): new String[](CommentsBean#3).length
    //#output(String delete()): return_value
    //#output(String delete()): this.bean
    //#output(String delete()): this.bean.approvedComments
    //#output(String delete()): this.bean.ids
    //#output(String delete()): this.bean.spamComments
    //#output(String delete()): this.firstComment
    //#output(String delete()): this.lastComment
    //#output(String delete()): this.pager
    //#output(String delete()): this.queryEntry
    //#new obj(String delete()): new CommentsBean(delete#2)
    //#new obj(String delete()): new CommentsPager(loadComments#2)
    //#new obj(String delete()): new String[](CommentsBean#1)
    //#new obj(String delete()): new String[](CommentsBean#2)
    //#new obj(String delete()): new String[](CommentsBean#3)
    //#pre[1] (String delete()): (soft) log != null
    //#pre[2] (String delete()): (soft) this.bean != null
    //#pre[9] (String delete()): (soft) init'ed(this.queryEntry)
    //#pre[11] (String delete()): (soft) this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[12] (String delete()): (soft) this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[13] (String delete()): (soft) this.bean.approvedString != null
    //#pre[14] (String delete()): (soft) init'ed(this.bean.endDateString)
    //#pre[15] (String delete()): (soft) init'ed(this.bean.searchString)
    //#pre[16] (String delete()): (soft) this.bean.spamString != null
    //#pre[17] (String delete()): (soft) init'ed(this.bean.startDateString)
    //#presumption(String delete()): java.util.Iterator:next(...)@237 != null
    //#presumption(String delete()): org.apache.roller.weblogger.business.WeblogManager:getComments(...)@228 != null
    //#presumption(String delete()): org.apache.roller.weblogger.business.Weblogger:getIndexManager(...)@252 != null
    //#presumption(String delete()): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@222 != null
    //#presumption(String delete()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@222 != null
    //#presumption(String delete()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@252 != null
    //#post(String delete()): return_value == &"list"
    //#post(String delete()): this.bean == One-of{&new CommentsBean(delete#2), old this.bean}
    //#post(String delete()): (soft) this.bean != null
    //#post(String delete()): init'ed(this.bean.approvedComments)
    //#post(String delete()): init'ed(this.bean.ids)
    //#post(String delete()): init'ed(this.bean.spamComments)
    //#post(String delete()): possibly_updated(this.firstComment)
    //#post(String delete()): possibly_updated(this.lastComment)
    //#post(String delete()): this.pager == One-of{&new CommentsPager(loadComments#2), old this.pager}
    //#post(String delete()): init'ed(this.queryEntry)
    //#post(String delete()): new CommentsBean(delete#2) num objects <= 1
    //#post(String delete()): init'ed(new CommentsBean(delete#2).__Tag)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).approvedComments)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).approvedString)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).deleteComments)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).endDateString)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).entryId)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).ids)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).page)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).searchString)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).spamComments)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).spamString)
    //#post(String delete()): init'ed(new CommentsBean(delete#2).startDateString)
    //#post(String delete()): new CommentsPager(loadComments#2) num objects <= 1
    //#post(String delete()): new String[](CommentsBean#1) num objects <= 1
    //#post(String delete()): init'ed(new String[](CommentsBean#1).length)
    //#post(String delete()): new String[](CommentsBean#2) num objects <= 1
    //#post(String delete()): init'ed(new String[](CommentsBean#2).length)
    //#post(String delete()): new String[](CommentsBean#3) num objects <= 1
    //#post(String delete()): init'ed(new String[](CommentsBean#3).length)
    //#unanalyzed(String delete()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(String delete()): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(String delete()): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(String delete()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String delete()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getComments
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:addError
    //#unanalyzed(String delete()): Effects-of-calling:loadComments
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(String delete()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String delete()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getId
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:add
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:size
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:stringArrayToString
    //#unanalyzed(String delete()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(String delete()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(String delete()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String delete()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager
    //#test_vector(String delete()): java.util.Iterator:hasNext(...)@237: {0}, {1}
    //#test_vector(String delete()): java.util.Iterator:hasNext(...)@253: {0}, {1}
    //#test_vector(String delete()): java.util.Set:isEmpty(...)@251: {1}, {0}
    //#test_vector(String delete()): org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(...)@227: {0}, {1}
            
            // if search is enabled, we will need to re-index all entries with
            // comments that have been deleted, so build a list of those entries
            Set<WeblogEntry> reindexEntries = new HashSet<WeblogEntry>();
            if (WebloggerConfig.getBooleanProperty("search.enabled")) {                 
    //#Comments.java:227: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: bool org.apache.roller.weblogger.config.WebloggerConfig:getBooleanProperty(String)
                List<WeblogEntryComment> targetted = (List<WeblogEntryComment>)wmgr.getComments(
    //#Comments.java:228: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:228: Warning: method not available
    //#    -- call on List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: List org.apache.roller.weblogger.business.WeblogManager:getComments(Weblog, WeblogEntry, String, Date, Date, String, bool, int, int)
                    getActionWeblog(), 
                    getQueryEntry(), 
                    getBean().getSearchString(),
                    getBean().getStartDate(),
                    getBean().getEndDate(),
                    getBean().getStatus(), 
                    true, 
                    0, -1);
                for (WeblogEntryComment comment : targetted) {
                    reindexEntries.add(comment.getWeblogEntry());
    //#Comments.java:238: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
                }
            }
            
            int deleted = wmgr.removeMatchingComments(
    //#Comments.java:242: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:242: Warning: method not available
    //#    -- call on int org.apache.roller.weblogger.business.WeblogManager:removeMatchingComments(Weblog, WeblogEntry, String, Date, Date, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: int org.apache.roller.weblogger.business.WeblogManager:removeMatchingComments(Weblog, WeblogEntry, String, Date, Date, String)
                    getActionWeblog(),
                    null,
                    getBean().getSearchString(),
                    getBean().getStartDate(),
                    getBean().getEndDate(),
                    getBean().getStatus());
            
            // if we've got entries to reindex then do so
            if (!reindexEntries.isEmpty()) {
                IndexManager imgr = WebloggerFactory.getWeblogger().getIndexManager();
    //#Comments.java:252: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:252: Warning: method not available
    //#    -- call on IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
                for (WeblogEntry entry : reindexEntries) {
                    imgr.addEntryReIndexOperation(entry);
    //#Comments.java:254: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.search.IndexManager:addEntryReIndexOperation(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.search.IndexManager:addEntryReIndexOperation(WeblogEntry)
                }
            }
                    
            addMessage("commentManagement.deleteSuccess", Integer.toString(deleted));
    //#Comments.java:258: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addMessage(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addMessage(String, String)
            
            // reset form and load fresh comments list
            setBean(new CommentsBean());
            
            return execute();
            
        } catch (WebloggerException ex) {
            log.error("Error doing bulk delete", ex);
    //#Comments.java:266: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            // TODO: i18n
            addError("Bulk delete failed due to unexpected error");
    //#Comments.java:268: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String delete()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String)
        }
        
        return LIST;
    //#Comments.java:271: end of method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.delete()
    }
    
    
    /**
     * Update a list of comments.
     */
    public String update() {
        
        try {
            WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
    //#Comments.java:281: method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.update()
    //#Comments.java:281: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:281: Warning: method not available
    //#    -- call on WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogManager org.apache.roller.weblogger.business.Weblogger:getWeblogManager()
    //#input(String update()): " comments marked as spam"._tainted
    //#input(String update()): "Already deleted, skipping - "._tainted
    //#input(String update()): "Marking as approved - "._tainted
    //#input(String update()): "Marking as disapproved - "._tainted
    //#input(String update()): "Marking as spam - "._tainted
    //#input(String update()): "Processing deletes - "._tainted
    //#input(String update()): "processing id - "._tainted
    //#input(String update()): __Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/Comments]
    //#input(String update()): __Descendant_Table[others]
    //#input(String update()): __Dispatch_Table.execute()Ljava/lang/String;
    //#input(String update()): __Dispatch_Table.getBean()Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;
    //#input(String update()): __Dispatch_Table.getPager()Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;
    //#input(String update()): __Dispatch_Table.getQueryEntry()Lorg/apache/roller/weblogger/pojos/WeblogEntry;
    //#input(String update()): __Dispatch_Table.loadComments()V
    //#input(String update()): __Dispatch_Table.setBean(Lorg/apache/roller/weblogger/ui/struts2/editor/CommentsBean;)V
    //#input(String update()): __Dispatch_Table.setFirstComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String update()): __Dispatch_Table.setLastComment(Lorg/apache/roller/weblogger/pojos/WeblogEntryComment;)V
    //#input(String update()): __Dispatch_Table.setPager(Lorg/apache/roller/weblogger/ui/struts2/pagers/CommentsPager;)V
    //#input(String update()): __Dispatch_Table.setQueryEntry(Lorg/apache/roller/weblogger/pojos/WeblogEntry;)V
    //#input(String update()): java.util.Collections.EMPTY_LIST
    //#input(String update()): log
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[org/apache/roller/weblogger/ui/struts2/editor/CommentsBean]
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Descendant_Table[others]
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedComments()[Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getApprovedString()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getDeleteComments()[Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDate()Ljava/util/Date;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEndDateString()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getEntryId()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getIds()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getPage()I
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSearchString()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamComments()[Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getSpamString()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDate()Ljava/util/Date;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStartDateString()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.getStatus()Ljava/lang/String;
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.loadCheckboxes(Ljava/util/List;)V
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setApprovedComments([Ljava/lang/String;)V
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setEntryId(Ljava/lang/String;)V
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setIds(Ljava/lang/String;)V
    //#input(String update()): org/apache/roller/weblogger/ui/struts2/editor/CommentsBean.__Dispatch_Table.setSpamComments([Ljava/lang/String;)V
    //#input(String update()): this
    //#input(String update()): this.__Tag
    //#input(String update()): this.bean
    //#input(String update()): this.bean.__Tag
    //#input(String update()): this.bean.approvedComments
    //#input(String update()): this.bean.approvedString
    //#input(String update()): this.bean.deleteComments
    //#input(String update()): this.bean.endDateString
    //#input(String update()): this.bean.entryId
    //#input(String update()): this.bean.ids
    //#input(String update()): this.bean.page
    //#input(String update()): this.bean.searchString
    //#input(String update()): this.bean.spamComments
    //#input(String update()): this.bean.spamString
    //#input(String update()): this.bean.startDateString
    //#input(String update()): this.queryEntry
    //#output(String update()): new CommentsBean(update#11) num objects
    //#output(String update()): new CommentsBean(update#11).__Tag
    //#output(String update()): new CommentsBean(update#11).approvedComments
    //#output(String update()): new CommentsBean(update#11).approvedString
    //#output(String update()): new CommentsBean(update#11).deleteComments
    //#output(String update()): new CommentsBean(update#11).endDateString
    //#output(String update()): new CommentsBean(update#11).entryId
    //#output(String update()): new CommentsBean(update#11).ids
    //#output(String update()): new CommentsBean(update#11).page
    //#output(String update()): new CommentsBean(update#11).searchString
    //#output(String update()): new CommentsBean(update#11).spamComments
    //#output(String update()): new CommentsBean(update#11).spamString
    //#output(String update()): new CommentsBean(update#11).startDateString
    //#output(String update()): new CommentsPager(loadComments#2) num objects
    //#output(String update()): new String[](CommentsBean#1) num objects
    //#output(String update()): new String[](CommentsBean#1).length
    //#output(String update()): new String[](CommentsBean#2) num objects
    //#output(String update()): new String[](CommentsBean#2).length
    //#output(String update()): new String[](CommentsBean#3) num objects
    //#output(String update()): new String[](CommentsBean#3).length
    //#output(String update()): return_value
    //#output(String update()): this.bean
    //#output(String update()): this.bean.approvedComments
    //#output(String update()): this.bean.ids
    //#output(String update()): this.bean.spamComments
    //#output(String update()): this.firstComment
    //#output(String update()): this.lastComment
    //#output(String update()): this.pager
    //#output(String update()): this.queryEntry
    //#new obj(String update()): new CommentsBean(update#11)
    //#new obj(String update()): new CommentsPager(loadComments#2)
    //#new obj(String update()): new String[](CommentsBean#1)
    //#new obj(String update()): new String[](CommentsBean#2)
    //#new obj(String update()): new String[](CommentsBean#3)
    //#pre[1] (String update()): log != null
    //#pre[2] (String update()): (soft) this.bean != null
    //#pre[3] (String update()): (soft) init'ed(this.bean.approvedComments)
    //#pre[4] (String update()): (soft) init'ed(this.bean.ids)
    //#pre[5] (String update()): (soft) init'ed(this.bean.spamComments)
    //#pre[9] (String update()): (soft) init'ed(this.queryEntry)
    //#pre[11] (String update()): (soft) this.__Tag == org/apache/roller/weblogger/ui/struts2/editor/Comments
    //#pre[12] (String update()): (soft) this.bean.__Tag == org/apache/roller/weblogger/ui/struts2/editor/CommentsBean
    //#pre[13] (String update()): (soft) init'ed(this.bean.deleteComments)
    //#pre[14] (String update()): (soft) init'ed(this.bean.entryId)
    //#presumption(String update()): ids.length@315 <= 4_294_967_295
    //#presumption(String update()): java.util.Arrays:asList(...)@308 != null
    //#presumption(String update()): java.util.Arrays:asList(...)@309 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.WeblogManager:getComment(...)@296 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.WeblogManager:getComment(...)@325 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.Weblogger:getIndexManager(...)@378 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@281 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@281 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@363 != null
    //#presumption(String update()): org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@378 != null
    //#presumption(String update()): org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry(...)@299 != null
    //#presumption(String update()): org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry(...)@328 != null
    //#presumption(String update()): org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog(...)@299 != null
    //#presumption(String update()): org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog(...)@328 != null
    //#presumption(String update()): org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog(...)@371 != null
    //#presumption(String update()): org.apache.roller.weblogger.util.Utilities:stringToStringArray(...)@315 != null
    //#post(String update()): return_value == &"list"
    //#post(String update()): this.bean == One-of{&new CommentsBean(update#11), old this.bean}
    //#post(String update()): (soft) this.bean != null
    //#post(String update()): init'ed(this.bean.approvedComments)
    //#post(String update()): init'ed(this.bean.ids)
    //#post(String update()): init'ed(this.bean.spamComments)
    //#post(String update()): possibly_updated(this.firstComment)
    //#post(String update()): possibly_updated(this.lastComment)
    //#post(String update()): this.pager == One-of{&new CommentsPager(loadComments#2), old this.pager}
    //#post(String update()): init'ed(this.queryEntry)
    //#post(String update()): new CommentsBean(update#11) num objects <= 1
    //#post(String update()): init'ed(new CommentsBean(update#11).__Tag)
    //#post(String update()): init'ed(new CommentsBean(update#11).approvedComments)
    //#post(String update()): init'ed(new CommentsBean(update#11).approvedString)
    //#post(String update()): init'ed(new CommentsBean(update#11).deleteComments)
    //#post(String update()): init'ed(new CommentsBean(update#11).endDateString)
    //#post(String update()): init'ed(new CommentsBean(update#11).entryId)
    //#post(String update()): init'ed(new CommentsBean(update#11).ids)
    //#post(String update()): init'ed(new CommentsBean(update#11).page)
    //#post(String update()): init'ed(new CommentsBean(update#11).searchString)
    //#post(String update()): init'ed(new CommentsBean(update#11).spamComments)
    //#post(String update()): init'ed(new CommentsBean(update#11).spamString)
    //#post(String update()): init'ed(new CommentsBean(update#11).startDateString)
    //#post(String update()): new CommentsPager(loadComments#2) num objects <= 1
    //#post(String update()): new String[](CommentsBean#1) num objects <= 1
    //#post(String update()): init'ed(new String[](CommentsBean#1).length)
    //#post(String update()): new String[](CommentsBean#2) num objects <= 1
    //#post(String update()): init'ed(new String[](CommentsBean#2).length)
    //#post(String update()): new String[](CommentsBean#3) num objects <= 1
    //#post(String update()): init'ed(new String[](CommentsBean#3).length)
    //#unanalyzed(String update()): Effects-of-calling:java.util.ArrayList
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getWeblogManager
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog
    //#unanalyzed(String update()): Effects-of-calling:org.apache.commons.lang.StringUtils:isEmpty
    //#unanalyzed(String update()): Effects-of-calling:java.text.SimpleDateFormat
    //#unanalyzed(String update()): Effects-of-calling:java.text.DateFormat:parse
    //#unanalyzed(String update()): Effects-of-calling:java.lang.Throwable:__curr_excep_obj
    //#unanalyzed(String update()): Effects-of-calling:java.lang.String:equals
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getComments
    //#unanalyzed(String update()): Effects-of-calling:org.apache.commons.logging.Log:error
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.editor.Comments:addError
    //#unanalyzed(String update()): Effects-of-calling:loadComments
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:iterator
    //#unanalyzed(String update()): Effects-of-calling:java.util.Iterator:hasNext
    //#unanalyzed(String update()): Effects-of-calling:java.util.Iterator:next
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getId
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:add
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:size
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:toArray
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.util.Utilities:stringArrayToString
    //#unanalyzed(String update()): Effects-of-calling:java.util.HashMap
    //#unanalyzed(String update()): Effects-of-calling:java.util.Map:put
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.Weblogger:getUrlStrategy
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.pojos.Weblog:getHandle
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.URLStrategy:getActionURL
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.business.WeblogManager:getWeblogEntry
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:addAll
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:remove
    //#unanalyzed(String update()): Effects-of-calling:java.util.List:get
    //#unanalyzed(String update()): Effects-of-calling:org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager
    //#test_vector(String update()): this.bean.entryId: Addr_Set{null}, Inverse{null}
    //#test_vector(String update()): java.lang.String:equals(...)@333: {0}, {1}
    //#test_vector(String update()): java.lang.String:equals(...)@352: {1}, {0}
    //#test_vector(String update()): java.util.Arrays:asList(...)@290: Addr_Set{null}, Inverse{null}
    //#test_vector(String update()): java.util.Iterator:hasNext(...)@295: {0}, {1}
    //#test_vector(String update()): java.util.Iterator:hasNext(...)@379: {0}, {1}
    //#test_vector(String update()): java.util.List:contains(...)@320: {0}, {1}
    //#test_vector(String update()): java.util.List:contains(...)@330: {0}, {1}
    //#test_vector(String update()): java.util.List:contains(...)@344: {0}, {1}
    //#test_vector(String update()): java.util.List:size(...)@291: {-2_147_483_648..0}, {1..4_294_967_295}
    //#test_vector(String update()): java.util.Set:isEmpty(...)@377: {1}, {0}
    //#test_vector(String update()): org.apache.roller.weblogger.pojos.Weblog:equals(...)@299: {0}, {1}
    //#test_vector(String update()): org.apache.roller.weblogger.pojos.Weblog:equals(...)@328: {0}, {1}
    //#test_vector(String update()): org.apache.roller.weblogger.util.MailUtil:isMailConfigured(...)@370: {0}, {1}
            
            List<WeblogEntryComment> flushList = new ArrayList();

            // if search is enabled, we will need to re-index all entries with
            // comments that have been approved, so build a list of those entries
            Set<WeblogEntry> reindexList = new HashSet<WeblogEntry>();
            
            // delete all comments with delete box checked
            List<String> deletes = Arrays.asList(getBean().getDeleteComments());
            if(deletes != null && deletes.size() > 0) {
                log.debug("Processing deletes - "+deletes.size());
    //#Comments.java:292: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                
                WeblogEntryComment deleteComment = null;
    //#Comments.java:294: Warning: unused assignment
    //#    unused assignment into deleteComment
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    Attribs:  Uncertain
                for(String deleteId : deletes) {
                    deleteComment = wmgr.getComment(deleteId);
    //#Comments.java:296: Warning: method not available
    //#    -- call on WeblogEntryComment org.apache.roller.weblogger.business.WeblogManager:getComment(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntryComment org.apache.roller.weblogger.business.WeblogManager:getComment(String)
                    
                    // make sure comment is tied to action weblog
                    if(getActionWeblog().equals(deleteComment.getWeblogEntry().getWebsite())) {
    //#Comments.java:299: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:299: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#Comments.java:299: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#Comments.java:299: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.Weblog:equals(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.Weblog:equals(Object)
                        flushList.add(deleteComment);
                        reindexList.add(deleteComment.getWeblogEntry());
    //#Comments.java:301: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
                        wmgr.removeComment(deleteComment);
    //#Comments.java:302: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:removeComment(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:removeComment(WeblogEntryComment)
                    }
                }
            }
            
            // loop through IDs of all comments displayed on page
            List<String> approvedIds = Arrays.asList(getBean().getApprovedComments());
            List<String> spamIds = Arrays.asList(getBean().getSpamComments());
            log.debug(spamIds.size()+" comments marked as spam");
    //#Comments.java:310: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
            
            // track comments approved via moderation
            List<WeblogEntryComment> approvedComments = new ArrayList();
            
            String[] ids = Utilities.stringToStringArray(getBean().getIds(),",");
    //#Comments.java:315: Warning: method not available
    //#    -- call on String[] org.apache.roller.weblogger.util.Utilities:stringToStringArray(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String[] org.apache.roller.weblogger.util.Utilities:stringToStringArray(String, String)
            for (int i=0; i < ids.length; i++) {
                log.debug("processing id - "+ ids[i]);
    //#Comments.java:317: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_11
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#Comments.java:317: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                
                // if we already deleted it then skip forward
                if(deletes.contains(ids[i])) {
    //#Comments.java:320: ?null dereference
    //#    deletes != null
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_11
    //#    assertion: deletes != null
    //#    VN: java.util.Arrays:asList(...)@290
    //#    Expected: Inverse{null} or Invalid
    //#    Bad: Addr_Set{null}
    //#    Attribs:  Ptr  null in Bad  Uncertain
    //#Comments.java:320: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_11
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
                    log.debug("Already deleted, skipping - "+ids[i]);
    //#Comments.java:321: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_12
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#Comments.java:321: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                    continue;
                }
                
                WeblogEntryComment comment = wmgr.getComment(ids[i]);
    //#Comments.java:325: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_13
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
    //#Comments.java:325: Warning: method not available
    //#    -- call on WeblogEntryComment org.apache.roller.weblogger.business.WeblogManager:getComment(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntryComment org.apache.roller.weblogger.business.WeblogManager:getComment(String)
                
                // make sure comment is tied to action weblog
                if(getActionWeblog().equals(comment.getWeblogEntry().getWebsite())) {
    //#Comments.java:328: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:328: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#Comments.java:328: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.pojos.WeblogEntry:getWebsite()
    //#Comments.java:328: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.pojos.Weblog:equals(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: bool org.apache.roller.weblogger.pojos.Weblog:equals(Object)
                    // comment approvals and mark/unmark spam
                    if(approvedIds.contains(ids[i])) {
    //#Comments.java:330: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_14
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
                        // if a comment was previously PENDING then this is
                        // it's first approval, so track it for notification
                        if(WeblogEntryComment.PENDING.equals(comment.getStatus())) {
    //#Comments.java:333: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
                            approvedComments.add(comment);
                        }
                        
                        log.debug("Marking as approved - "+comment.getId());
    //#Comments.java:337: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#Comments.java:337: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                        comment.setStatus(WeblogEntryComment.APPROVED);
    //#Comments.java:338: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                        wmgr.saveComment(comment);
    //#Comments.java:339: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
                        
                        flushList.add(comment);
                        reindexList.add(comment.getWeblogEntry());
    //#Comments.java:342: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
                        
                    } else if(spamIds.contains(ids[i])) {
    //#Comments.java:344: ?use of default init
    //#    init'ed(ids[i])
    //#    severity: SUPPRESSED
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    basic block: bb_18
    //#    assertion: init'ed(ids[i])
    //#    VN: undefined
    //#    Expected: Univ-VN-Set
    //#    Bad: {Invalid}
    //#    Attribs:  Ptr  Bad only invalid
                        log.debug("Marking as spam - "+comment.getId());
    //#Comments.java:345: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#Comments.java:345: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                        comment.setStatus(WeblogEntryComment.SPAM);
    //#Comments.java:346: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                        wmgr.saveComment(comment);
    //#Comments.java:347: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
                        
                        flushList.add(comment);
                        reindexList.add(comment.getWeblogEntry());
    //#Comments.java:350: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()

                    } else if(!WeblogEntryComment.DISAPPROVED.equals(comment.getStatus())) {
    //#Comments.java:352: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getStatus()
                        log.debug("Marking as disapproved - "+comment.getId());
    //#Comments.java:353: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: String org.apache.roller.weblogger.pojos.WeblogEntryComment:getId()
    //#Comments.java:353: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:debug(Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:debug(Object)
                        comment.setStatus(WeblogEntryComment.DISAPPROVED);
    //#Comments.java:354: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.pojos.WeblogEntryComment:setStatus(String)
                        wmgr.saveComment(comment);
    //#Comments.java:355: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.WeblogManager:saveComment(WeblogEntryComment)
                        
                        flushList.add(comment);
                        reindexList.add(comment.getWeblogEntry());
    //#Comments.java:358: Warning: method not available
    //#    -- call on WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: WeblogEntry org.apache.roller.weblogger.pojos.WeblogEntryComment:getWeblogEntry()
                    }
                }
            }
            
            WebloggerFactory.getWeblogger().flush();
    //#Comments.java:363: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:363: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.Weblogger:flush()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.Weblogger:flush()
            
            // notify caches of changes by flushing whole site because we can't
            // invalidate deleted comment objects (JPA nulls the fields out).
            CacheManager.invalidate(getActionWeblog());
    //#Comments.java:367: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:367: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.util.cache.CacheManager:invalidate(Weblog)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.util.cache.CacheManager:invalidate(Weblog)
            
            // send notification for all comments changed
            if (MailUtil.isMailConfigured()) {
    //#Comments.java:370: Warning: method not available
    //#    -- call on bool org.apache.roller.weblogger.util.MailUtil:isMailConfigured()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: bool org.apache.roller.weblogger.util.MailUtil:isMailConfigured()
                I18nMessages resources = 
    //#Comments.java:371: Warning: method not available
    //#    -- call on Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblog org.apache.roller.weblogger.ui.struts2.editor.Comments:getActionWeblog()
    //#Comments.java:371: Warning: method not available
    //#    -- call on Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Locale org.apache.roller.weblogger.pojos.Weblog:getLocaleInstance()
    //#Comments.java:371: Warning: method not available
    //#    -- call on I18nMessages org.apache.roller.weblogger.util.I18nMessages:getMessages(Locale)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: I18nMessages org.apache.roller.weblogger.util.I18nMessages:getMessages(Locale)
                    I18nMessages.getMessages(getActionWeblog().getLocaleInstance());
                MailUtil.sendEmailApprovalNotifications(approvedComments, resources);
    //#Comments.java:373: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.util.MailUtil:sendEmailApprovalNotifications(List, I18nMessages)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.util.MailUtil:sendEmailApprovalNotifications(List, I18nMessages)
            }
            
            // if we've got entries to reindex then do so
            if (!reindexList.isEmpty()) {
                IndexManager imgr = WebloggerFactory.getWeblogger().getIndexManager();
    //#Comments.java:378: Warning: method not available
    //#    -- call on Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: Weblogger org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger()
    //#Comments.java:378: Warning: method not available
    //#    -- call on IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: IndexManager org.apache.roller.weblogger.business.Weblogger:getIndexManager()
                for (WeblogEntry entry : reindexList) {
                    imgr.addEntryReIndexOperation(entry);
    //#Comments.java:380: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.business.search.IndexManager:addEntryReIndexOperation(WeblogEntry)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.business.search.IndexManager:addEntryReIndexOperation(WeblogEntry)
                }
            }            
            
            addMessage("commentManagement.updateSuccess");
    //#Comments.java:384: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addMessage(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addMessage(String)
            
            // reset form and load fresh comments list
            CommentsBean freshBean = new CommentsBean();
            // but if we're editing an entry's comments stick with that entry
            if (bean.getEntryId() != null) {
                freshBean.setEntryId(bean.getEntryId());
            }
            setBean(freshBean);
                        
            return execute();
            
        } catch (Exception ex) {
            log.error("ERROR updating comments", ex);
    //#Comments.java:397: Warning: method not available
    //#    -- call on void org.apache.commons.logging.Log:error(Object, Throwable)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.commons.logging.Log:error(Object, Throwable)
            addError("commentManagement.updateError", ex.toString());
    //#Comments.java:398: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String, String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: String update()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.editor.Comments:addError(String, String)
        }
        
        return LIST;
    //#Comments.java:401: end of method: String org.apache.roller.weblogger.ui.struts2.editor.Comments.update()
    }
    
    
    public List getCommentStatusOptions() {
        
        List opts = new ArrayList();
    //#Comments.java:407: method: List org.apache.roller.weblogger.ui.struts2.editor.Comments.getCommentStatusOptions()
    //#input(List getCommentStatusOptions()): this
    //#output(List getCommentStatusOptions()): new ArrayList(getCommentStatusOptions#1) num objects
    //#output(List getCommentStatusOptions()): return_value
    //#new obj(List getCommentStatusOptions()): new ArrayList(getCommentStatusOptions#1)
    //#post(List getCommentStatusOptions()): return_value == &new ArrayList(getCommentStatusOptions#1)
    //#post(List getCommentStatusOptions()): new ArrayList(getCommentStatusOptions#1) num objects == 1
        
        opts.add(new KeyValueObject("ALL", getText("commentManagement.all")));
    //#Comments.java:409: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:409: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        opts.add(new KeyValueObject("ONLY_PENDING", getText("commentManagement.onlyPending")));
    //#Comments.java:410: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:410: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        opts.add(new KeyValueObject("ONLY_APPROVED", getText("commentManagement.onlyApproved")));
    //#Comments.java:411: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:411: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        opts.add(new KeyValueObject("ONLY_DISAPPROVED", getText("commentManagement.onlyDisapproved")));
    //#Comments.java:412: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:412: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getCommentStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        
        return opts;
    //#Comments.java:414: end of method: List org.apache.roller.weblogger.ui.struts2.editor.Comments.getCommentStatusOptions()
    }
    
    public List getSpamStatusOptions() {
        
        List opts = new ArrayList();
    //#Comments.java:419: method: List org.apache.roller.weblogger.ui.struts2.editor.Comments.getSpamStatusOptions()
    //#input(List getSpamStatusOptions()): this
    //#output(List getSpamStatusOptions()): new ArrayList(getSpamStatusOptions#1) num objects
    //#output(List getSpamStatusOptions()): return_value
    //#new obj(List getSpamStatusOptions()): new ArrayList(getSpamStatusOptions#1)
    //#post(List getSpamStatusOptions()): return_value == &new ArrayList(getSpamStatusOptions#1)
    //#post(List getSpamStatusOptions()): new ArrayList(getSpamStatusOptions#1) num objects == 1
        
        opts.add(new KeyValueObject("ALL", getText("commentManagement.all")));
    //#Comments.java:421: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:421: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        opts.add(new KeyValueObject("NO_SPAM", getText("commentManagement.noSpam")));
    //#Comments.java:422: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:422: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        opts.add(new KeyValueObject("ONLY_SPAM", getText("commentManagement.onlySpam")));
    //#Comments.java:423: Warning: method not available
    //#    -- call on String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: String org.apache.roller.weblogger.ui.struts2.editor.Comments:getText(String)
    //#Comments.java:423: Warning: method not available
    //#    -- call on void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
    //#    severity: INFORMATIONAL
    //#    class: org.apache.roller.weblogger.ui.struts2.editor.Comments
    //#    method: List getSpamStatusOptions()
    //#    unanalyzed callee: void org.apache.roller.weblogger.ui.struts2.util.KeyValueObject(Object, Object)
        
        return opts;
    //#Comments.java:425: end of method: List org.apache.roller.weblogger.ui.struts2.editor.Comments.getSpamStatusOptions()
    }
    
    
    public CommentsBean getBean() {
        return bean;
    //#Comments.java:430: method: CommentsBean org.apache.roller.weblogger.ui.struts2.editor.Comments.getBean()
    //#input(CommentsBean getBean()): this
    //#input(CommentsBean getBean()): this.bean
    //#output(CommentsBean getBean()): return_value
    //#pre[2] (CommentsBean getBean()): init'ed(this.bean)
    //#post(CommentsBean getBean()): return_value == this.bean
    //#post(CommentsBean getBean()): init'ed(return_value)
    //#Comments.java:430: end of method: CommentsBean org.apache.roller.weblogger.ui.struts2.editor.Comments.getBean()
    }

    public void setBean(CommentsBean bean) {
        this.bean = bean;
    //#Comments.java:434: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setBean(CommentsBean)
    //#input(void setBean(CommentsBean)): bean
    //#input(void setBean(CommentsBean)): this
    //#output(void setBean(CommentsBean)): this.bean
    //#post(void setBean(CommentsBean)): this.bean == bean
    //#post(void setBean(CommentsBean)): init'ed(this.bean)
    }
    //#Comments.java:435: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setBean(CommentsBean)

    public int getBulkDeleteCount() {
        return bulkDeleteCount;
    //#Comments.java:438: method: int org.apache.roller.weblogger.ui.struts2.editor.Comments.getBulkDeleteCount()
    //#input(int getBulkDeleteCount()): this
    //#input(int getBulkDeleteCount()): this.bulkDeleteCount
    //#output(int getBulkDeleteCount()): return_value
    //#pre[2] (int getBulkDeleteCount()): init'ed(this.bulkDeleteCount)
    //#post(int getBulkDeleteCount()): return_value == this.bulkDeleteCount
    //#post(int getBulkDeleteCount()): init'ed(return_value)
    //#Comments.java:438: end of method: int org.apache.roller.weblogger.ui.struts2.editor.Comments.getBulkDeleteCount()
    }

    public void setBulkDeleteCount(int bulkDeleteCount) {
        this.bulkDeleteCount = bulkDeleteCount;
    //#Comments.java:442: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setBulkDeleteCount(int)
    //#input(void setBulkDeleteCount(int)): bulkDeleteCount
    //#input(void setBulkDeleteCount(int)): this
    //#output(void setBulkDeleteCount(int)): this.bulkDeleteCount
    //#post(void setBulkDeleteCount(int)): this.bulkDeleteCount == bulkDeleteCount
    //#post(void setBulkDeleteCount(int)): init'ed(this.bulkDeleteCount)
    }
    //#Comments.java:443: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setBulkDeleteCount(int)

    public WeblogEntryComment getFirstComment() {
        return firstComment;
    //#Comments.java:446: method: WeblogEntryComment org.apache.roller.weblogger.ui.struts2.editor.Comments.getFirstComment()
    //#input(WeblogEntryComment getFirstComment()): this
    //#input(WeblogEntryComment getFirstComment()): this.firstComment
    //#output(WeblogEntryComment getFirstComment()): return_value
    //#pre[2] (WeblogEntryComment getFirstComment()): init'ed(this.firstComment)
    //#post(WeblogEntryComment getFirstComment()): return_value == this.firstComment
    //#post(WeblogEntryComment getFirstComment()): init'ed(return_value)
    //#Comments.java:446: end of method: WeblogEntryComment org.apache.roller.weblogger.ui.struts2.editor.Comments.getFirstComment()
    }

    public void setFirstComment(WeblogEntryComment firstComment) {
        this.firstComment = firstComment;
    //#Comments.java:450: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setFirstComment(WeblogEntryComment)
    //#input(void setFirstComment(WeblogEntryComment)): firstComment
    //#input(void setFirstComment(WeblogEntryComment)): this
    //#output(void setFirstComment(WeblogEntryComment)): this.firstComment
    //#post(void setFirstComment(WeblogEntryComment)): this.firstComment == firstComment
    //#post(void setFirstComment(WeblogEntryComment)): init'ed(this.firstComment)
    }
    //#Comments.java:451: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setFirstComment(WeblogEntryComment)

    public WeblogEntryComment getLastComment() {
        return lastComment;
    //#Comments.java:454: method: WeblogEntryComment org.apache.roller.weblogger.ui.struts2.editor.Comments.getLastComment()
    //#input(WeblogEntryComment getLastComment()): this
    //#input(WeblogEntryComment getLastComment()): this.lastComment
    //#output(WeblogEntryComment getLastComment()): return_value
    //#pre[2] (WeblogEntryComment getLastComment()): init'ed(this.lastComment)
    //#post(WeblogEntryComment getLastComment()): return_value == this.lastComment
    //#post(WeblogEntryComment getLastComment()): init'ed(return_value)
    //#Comments.java:454: end of method: WeblogEntryComment org.apache.roller.weblogger.ui.struts2.editor.Comments.getLastComment()
    }

    public void setLastComment(WeblogEntryComment lastComment) {
        this.lastComment = lastComment;
    //#Comments.java:458: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setLastComment(WeblogEntryComment)
    //#input(void setLastComment(WeblogEntryComment)): lastComment
    //#input(void setLastComment(WeblogEntryComment)): this
    //#output(void setLastComment(WeblogEntryComment)): this.lastComment
    //#post(void setLastComment(WeblogEntryComment)): this.lastComment == lastComment
    //#post(void setLastComment(WeblogEntryComment)): init'ed(this.lastComment)
    }
    //#Comments.java:459: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setLastComment(WeblogEntryComment)

    public CommentsPager getPager() {
        return pager;
    //#Comments.java:462: method: CommentsPager org.apache.roller.weblogger.ui.struts2.editor.Comments.getPager()
    //#input(CommentsPager getPager()): this
    //#input(CommentsPager getPager()): this.pager
    //#output(CommentsPager getPager()): return_value
    //#pre[2] (CommentsPager getPager()): init'ed(this.pager)
    //#post(CommentsPager getPager()): return_value == this.pager
    //#post(CommentsPager getPager()): init'ed(return_value)
    //#Comments.java:462: end of method: CommentsPager org.apache.roller.weblogger.ui.struts2.editor.Comments.getPager()
    }

    public void setPager(CommentsPager pager) {
        this.pager = pager;
    //#Comments.java:466: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setPager(CommentsPager)
    //#input(void setPager(CommentsPager)): pager
    //#input(void setPager(CommentsPager)): this
    //#output(void setPager(CommentsPager)): this.pager
    //#post(void setPager(CommentsPager)): this.pager == pager
    //#post(void setPager(CommentsPager)): init'ed(this.pager)
    }
    //#Comments.java:467: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setPager(CommentsPager)

    public WeblogEntry getQueryEntry() {
        return queryEntry;
    //#Comments.java:470: method: WeblogEntry org.apache.roller.weblogger.ui.struts2.editor.Comments.getQueryEntry()
    //#input(WeblogEntry getQueryEntry()): this
    //#input(WeblogEntry getQueryEntry()): this.queryEntry
    //#output(WeblogEntry getQueryEntry()): return_value
    //#pre[2] (WeblogEntry getQueryEntry()): init'ed(this.queryEntry)
    //#post(WeblogEntry getQueryEntry()): return_value == this.queryEntry
    //#post(WeblogEntry getQueryEntry()): init'ed(return_value)
    //#Comments.java:470: end of method: WeblogEntry org.apache.roller.weblogger.ui.struts2.editor.Comments.getQueryEntry()
    }

    public void setQueryEntry(WeblogEntry queryEntry) {
        this.queryEntry = queryEntry;
    //#Comments.java:474: method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setQueryEntry(WeblogEntry)
    //#input(void setQueryEntry(WeblogEntry)): queryEntry
    //#input(void setQueryEntry(WeblogEntry)): this
    //#output(void setQueryEntry(WeblogEntry)): this.queryEntry
    //#post(void setQueryEntry(WeblogEntry)): this.queryEntry == queryEntry
    //#post(void setQueryEntry(WeblogEntry)): init'ed(this.queryEntry)
    }    
    //#Comments.java:475: end of method: void org.apache.roller.weblogger.ui.struts2.editor.Comments.setQueryEntry(WeblogEntry)
}
    //#Comments.java:: end of class: org.apache.roller.weblogger.ui.struts2.editor.Comments
