File Source: GlobalCommentManagement.java

     1  /*
     2   * Licensed to the Apache Software Foundation (ASF) under one or more
     3   *  contributor license agreements.  The ASF licenses this file to You
     4   * under the Apache License, Version 2.0 (the "License"); you may not
     5   * use this file except in compliance with the License.
     6   * You may obtain a copy of the License at
     7   *
     8   *     http://www.apache.org/licenses/LICENSE-2.0
     9   *
    10   * Unless required by applicable law or agreed to in writing, software
    11   * distributed under the License is distributed on an "AS IS" BASIS,
    12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13   * See the License for the specific language governing permissions and
    14   * limitations under the License.  For additional information regarding
    15   * copyright in this work, please see the NOTICE file in the top level
    16   * directory of this distribution.
    17   */
    18  
    19  package org.apache.roller.weblogger.ui.struts2.admin;
    20  
    21  import java.util.ArrayList;
    22  import java.util.Arrays;
    23  import java.util.Collections;
    24  import java.util.HashMap;
    25  import java.util.Iterator;
    26  import java.util.List;
    27  import java.util.Map;
    28  import org.apache.commons.lang.StringUtils;
    29  import org.apache.commons.logging.Log;
    30  import org.apache.commons.logging.LogFactory;
    31  import org.apache.roller.weblogger.WebloggerException;
    32  import org.apache.roller.weblogger.business.WebloggerFactory;
    33  import org.apache.roller.weblogger.business.WeblogManager;
    34  import org.apache.roller.weblogger.pojos.Weblog;
    35  import org.apache.roller.weblogger.pojos.WeblogEntryComment;
    36  import org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager;
    37  import org.apache.roller.weblogger.ui.struts2.util.KeyValueObject;
    38  import org.apache.roller.weblogger.util.cache.CacheManager;
    39  import org.apache.roller.weblogger.ui.struts2.util.UIAction;
    40  import org.apache.roller.weblogger.util.Utilities;
    41  
    42  
    43  /**
    44   * Action for managing global set of comments.
    45   */
    46  public class GlobalCommentManagement extends UIAction {
    47      
             /* 
    P/P       *  Method: org.apache.roller.weblogger.ui.struts2.admin.GlobalCommentManagement__static_init
              * 
              *  Postconditions:
              *    init'ed(log)
              */
    48      private static Log log = LogFactory.getLog(GlobalCommentManagement.class);
    49      
    50      // number of comments to show per page
    51      private static final int COUNT = 30;
    52      
    53      // bean for managing submitted data
    54      private GlobalCommentManagementBean bean = new GlobalCommentManagementBean();
    55      
    56      // pager for the comments we are viewing
    57      private CommentsPager pager = null;
    58      
    59      // first comment in the list
    60      private WeblogEntryComment firstComment = null;
    61      
    62      // last comment in the list
    63      private WeblogEntryComment lastComment = null;
    64      
    65      // indicates number of comments that would be deleted by bulk removal
    66      // a non-zero value here indicates bulk removal is a valid option
    67      private int bulkDeleteCount = 0;
    68      
    69      
             /* 
    P/P       *  Method: void org.apache.roller.weblogger.ui.struts2.admin.GlobalCommentManagement()
              * 
              *  Postconditions:
              *    this.actionName == &"globalCommentManagement"
              *    this.bean == &new GlobalCommentManagementBean(GlobalCommentManagement#1)
              *    this.bulkDeleteCount == 0
              *    this.bean.page == 0
              *    new String[](GlobalCommentManagementBean#1).length == 0
              *    new String[](GlobalCommentManagementBean#2).length == 0
              *    this.desiredMenu == &"admin"
              *    this.firstComment == null
              *    this.lastComment == null
              *    this.pager == null
              *    ...
              */
    70      public GlobalCommentManagement() {
    71          this.actionName = "globalCommentManagement";
    72          this.desiredMenu = "admin";
    73          this.pageTitle = "commentManagement.title";
    74      }
    75      
    76      
    77      // admin role required
    78      public String requiredUserRole() {
                 /* 
    P/P           *  Method: String requiredUserRole()
                  * 
                  *  Postconditions:
                  *    return_value == &"admin"
                  */
    79          return "admin";
    80      }
    81      
    82      // no weblog required
    83      public boolean isWeblogRequired() {
                 /* 
    P/P           *  Method: bool isWeblogRequired()
                  * 
                  *  Postconditions:
                  *    return_value == 0
                  */
    84          return false;
    85      }
    86      
    87      
    88      public void loadComments() {
    89          
                 /* 
    P/P           *  Method: void loadComments()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    init'ed(this.bean.endDateString)
                  *    init'ed(this.bean.searchString)
                  *    init'ed(this.bean.startDateString)
                  *    (soft) log != null
                  *    (soft) this.bean.approvedString != null
                  *    (soft) this.bean.page in -71_582_788..143_165_576
                  *    (soft) this.bean.spamString != null
                  * 
                  *  Presumptions:
                  *    init'ed(java.util.Collections.EMPTY_LIST)
                  *    java.util.List:size(...)@109 >= -231+1
                  *    java.util.List:size(...)@114 >= -231+1
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@93 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@93 != null
                  * 
                  *  Postconditions:
                  *    possibly_updated(this.firstComment)
                  *    possibly_updated(this.lastComment)
                  *    this.pager == &new CommentsPager(loadComments#2)
                  *    new CommentsPager(loadComments#2) num objects == 1
                  * 
                  *  Test Vectors:
                  *    java.util.List:size(...)@107: {-231..0}, {1..232-1}
                  *    java.util.List:size(...)@108: {-231..30}, {31..232-1}
                  */
    90          List comments = Collections.EMPTY_LIST;
    91          boolean hasMore = false;
    92          try {
    93              WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
    94              List rawComments = wmgr.getComments(
    95                      null,
    96                      null,
    97                      getBean().getSearchString(),
    98                      getBean().getStartDate(),
    99                      getBean().getEndDate(),
   100                      getBean().getStatus(),
   101                      true, // reverse  chrono order
   102                      getBean().getPage() * COUNT,
   103                      COUNT + 1);
   104              comments = new ArrayList();
   105              comments.addAll(rawComments);   
   106              
+  107              if(comments != null && comments.size() > 0) {
   108                  if(comments.size() > COUNT) {
   109                      comments.remove(comments.size()-1);
   110                      hasMore = true;
   111                  }
   112                  
   113                  setFirstComment((WeblogEntryComment)comments.get(0));
   114                  setLastComment((WeblogEntryComment)comments.get(comments.size()-1));
   115              }
   116          } catch (WebloggerException ex) {
   117              log.error("Error looking up comments", ex);
   118              // TODO: i18n
   119              addError("Error looking up comments");
   120          }
   121          
   122          // build comments pager
   123          String baseUrl = buildBaseUrl();
   124          setPager(new CommentsPager(baseUrl, getBean().getPage(), comments, hasMore));
   125      }
   126      
   127      
   128      // use the action data to build a url representing this action, including query data
   129      private String buildBaseUrl() {
   130          
                 /* 
    P/P           *  Method: String buildBaseUrl()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    init'ed(this.bean.approvedString)
                  *    init'ed(this.bean.endDateString)
                  *    init'ed(this.bean.searchString)
                  *    init'ed(this.bean.spamString)
                  *    init'ed(this.bean.startDateString)
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.Weblogger:getUrlStrategy(...)@149 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@149 != null
                  * 
                  *  Postconditions:
                  *    init'ed(return_value)
                  * 
                  *  Test Vectors:
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@133: {1}, {0}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@136: {1}, {0}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@139: {1}, {0}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@142: {1}, {0}
                  *    org.apache.commons.lang.StringUtils:isEmpty(...)@145: {1}, {0}
                  */
   131          Map<String, String> params = new HashMap();
   132          
   133          if(!StringUtils.isEmpty(getBean().getSearchString())) {
   134              params.put("bean.searchString", getBean().getSearchString());
   135          }
   136          if(!StringUtils.isEmpty(getBean().getStartDateString())) {
   137              params.put("bean.startDateString", getBean().getStartDateString());
   138          }
   139          if(!StringUtils.isEmpty(getBean().getEndDateString())) {
   140              params.put("bean.endDateString", getBean().getEndDateString());
   141          }
   142          if(!StringUtils.isEmpty(getBean().getApprovedString())) {
   143              params.put("bean.approvedString", getBean().getApprovedString());
   144          }
   145          if(!StringUtils.isEmpty(getBean().getSpamString())) {
   146              params.put("bean.spamString", getBean().getSpamString());
   147          }
   148          
   149          return WebloggerFactory.getWeblogger().getUrlStrategy().getActionURL("globalCommentManagement", "/roller-ui/admin", 
   150                  null, params, false);
   151      }
   152      
   153      
   154      // show comment management page
   155      public String execute() {
   156          
   157          // load list of comments from query
                 /* 
    P/P           *  Method: String execute()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    init'ed(this.bean.endDateString)
                  *    init'ed(this.bean.searchString)
                  *    init'ed(this.bean.startDateString)
                  *    (soft) log != null
                  *    (soft) this.bean.approvedString != null
                  *    (soft) this.bean.page in -71_582_788..143_165_576
                  *    (soft) this.bean.spamString != null
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems(...)@161 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  *    init'ed(this.bean.ids)
                  *    init'ed(this.bean.spamComments)
                  *    possibly_updated(this.firstComment)
                  *    possibly_updated(this.lastComment)
                  *    this.pager == &new CommentsPager(loadComments#2)
                  *    new CommentsPager(loadComments#2) num objects == 1
                  */
   158          loadComments();
   159          
   160          // load bean data using comments list
   161          getBean().loadCheckboxes(getPager().getItems());
   162          
   163          return LIST;
   164      }
   165      
   166      
   167      /**
   168       * Query for a specific subset of comments based on various criteria.
   169       */
   170      public String query() {
   171          
   172          // load list of comments from query
                 /* 
    P/P           *  Method: String query()
                  * 
                  *  Preconditions:
                  *    this.bean != null
                  *    (soft) log != null
                  *    (soft) this.bean.approvedString != null
                  *    (soft) init'ed(this.bean.endDateString)
                  *    (soft) this.bean.page in -71_582_788..143_165_576
                  *    (soft) init'ed(this.bean.searchString)
                  *    (soft) this.bean.spamString != null
                  *    (soft) init'ed(this.bean.startDateString)
                  * 
                  *  Presumptions:
                  *    org.apache.roller.weblogger.business.WeblogManager:getComments(...)@180 != null
                  *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@179 != null
                  *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@179 != null
                  *    org.apache.roller.weblogger.ui.struts2.pagers.CommentsPager:getItems(...)@176 != null
                  * 
                  *  Postconditions:
                  *    return_value == &"list"
                  *    init'ed(this.bean.ids)
                  *    init'ed(this.bean.spamComments)
                  *    possibly_updated(this.bulkDeleteCount)
                  *    possibly_updated(this.firstComment)
                  *    possibly_updated(this.lastComment)
                  *    this.pager == &new CommentsPager(loadComments#2)
                  *    new CommentsPager(loadComments#2) num objects == 1
                  * 
                  *  Test Vectors:
                  *    java.util.List:size(...)@191: {-231..30}, {31..232-1}
                  */
   173          loadComments();
   174          
   175          // load bean data using comments list
   176          getBean().loadCheckboxes(getPager().getItems());
   177          
   178          try {
   179              WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
   180              List allMatchingComments = wmgr.getComments(
   181                      null,
   182                      null,
   183                      getBean().getSearchString(),
   184                      getBean().getStartDate(),
   185                      getBean().getEndDate(),
   186                      getBean().getStatus(),
   187                      true, // reverse  chrono order
   188                      0,
   189                      -1);
   190              
   191              if(allMatchingComments.size() > COUNT) {
   192                  setBulkDeleteCount(allMatchingComments.size());
   193              }
   194              
   195          } catch (WebloggerException ex) {
   196              log.error("Error looking up comments", ex);
   197              // TODO: i18n
   198              addError("Error looking up comments");
   199          }
   200          
   201          return LIST;
   202      }
   203      
   204      
   205      /**
   206       * Bulk delete all comments matching query criteria.
   207       */
   208      public String delete() {
   209          
   210          try {
                     /* 
    P/P               *  Method: String delete()
                      * 
                      *  Preconditions:
                      *    (soft) log != null
                      *    (soft) this.bean != null
                      *    (soft) this.bean.approvedString != null
                      *    (soft) init'ed(this.bean.endDateString)
                      *    (soft) init'ed(this.bean.searchString)
                      *    (soft) this.bean.spamString != null
                      *    (soft) init'ed(this.bean.startDateString)
                      * 
                      *  Presumptions:
                      *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@211 != null
                      *    org.apache.roller.weblogger.business.WebloggerFactory:getWeblogger(...)@211 != null
                      * 
                      *  Postconditions:
                      *    return_value == &"list"
                      *    this.bean == One-of{&new GlobalCommentManagementBean(delete#2), old this.bean}
                      *    (soft) this.bean != null
                      *    init'ed(this.bean.ids)
                      *    init'ed(this.bean.spamComments)
                      *    possibly_updated(this.firstComment)
                      *    possibly_updated(this.lastComment)
                      *    this.pager == One-of{&new CommentsPager(loadComments#2), old this.pager}
                      *    new CommentsPager(loadComments#2) num objects <= 1
                      *    new GlobalCommentManagementBean(delete#2) num objects <= 1
                      *    ...
                      */
   211              WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
   212              int deleted = wmgr.removeMatchingComments(
   213                      null,
   214                      null,
   215                      getBean().getSearchString(),
   216                      getBean().getStartDate(),
   217                      getBean().getEndDate(),
   218                      getBean().getStatus());
   219              
   220              // TODO: i18n
   221              addMessage("Successfully deleted "+deleted+" comments");
   222              
   223              // reset form and load fresh comments list
   224              setBean(new GlobalCommentManagementBean());
   225              
   226              return execute();
   227              
   228          } catch (WebloggerException ex) {
   229              log.error("Error doing bulk delete", ex);
   230              // TODO: i18n
   231              addError("Bulk delete failed due to unexpected error");
   232          }
   233          
   234          return LIST;
   235      }
   236      
   237      
   238      /**
   239       * Update a list of comments.
   240       */
   241      public String update() {
   242          
   243          try {
                     /* 
    P/P               *  Method: String update()
                      * 
                      *  Preconditions:
                      *    log != null
                      *    (soft) this.bean != null
                      *    (soft) init'ed(this.bean.ids)
                      *    (soft) init'ed(this.bean.spamComments)
                      *    (soft) init'ed(this.bean.deleteComments)
                      * 
                      *  Presumptions:
                      *    ids.length@265 <= 232-1
                      *    java.util.Arrays:asList(...)@262 != null
                      *    org.apache.roller.weblogger.business.WeblogManager:getComment(...)@255 != null
                      *    org.apache.roller.weblogger.business.WeblogManager:getComment(...)@275 != null
                      *    org.apache.roller.weblogger.business.Weblogger:getWeblogManager(...)@244 != null
                      *    ...
                      * 
                      *  Postconditions:
                      *    return_value == &"list"
                      *    this.bean == One-of{&new GlobalCommentManagementBean(update#8), old this.bean}
                      *    (soft) this.bean != null
                      *    init'ed(this.bean.ids)
                      *    init'ed(this.bean.spamComments)
                      *    possibly_updated(this.firstComment)
                      *    possibly_updated(this.lastComment)
                      *    this.pager == One-of{&new CommentsPager(loadComments#2), old this.pager}
                      *    new CommentsPager(loadComments#2) num objects <= 1
                      *    new GlobalCommentManagementBean(update#8) num objects <= 1
                      *    ...
                      * 
                      *  Test Vectors:
                      *    java.lang.String:equals(...)@278: {1}, {0}
                      *    java.lang.String:equals(...)@285: {0}, {1}
                      *    java.util.Arrays:asList(...)@249: Addr_Set{null}, Inverse{null}
                      *    java.util.Iterator:hasNext(...)@254: {0}, {1}
                      *    java.util.Iterator:hasNext(...)@297: {0}, {1}
                      *    java.util.List:contains(...)@270: {0}, {1}
                      *    java.util.List:contains(...)@278: {0}, {1}
                      *    java.util.List:size(...)@250: {-231..0}, {1..232-1}
                      */
   244              WeblogManager wmgr = WebloggerFactory.getWeblogger().getWeblogManager();
   245              
   246              List<Weblog> flushList = new ArrayList<Weblog>();
   247              
   248              // delete all comments with delete box checked
   249              List<String> deletes = Arrays.asList(getBean().getDeleteComments());
   250              if(deletes != null && deletes.size() > 0) {
   251                  log.debug("Processing deletes - "+deletes.size());
   252                  
   253                  WeblogEntryComment deleteComment = null;
   254                  for(String deleteId : deletes) {
   255                      deleteComment = wmgr.getComment(deleteId);
   256                      flushList.add(deleteComment.getWeblogEntry().getWebsite());
   257                      wmgr.removeComment(deleteComment);
   258                  }
   259              }
   260              
   261              // loop through IDs of all comments displayed on page
   262              List spamIds = Arrays.asList(getBean().getSpamComments());
   263              log.debug(spamIds.size()+" comments marked as spam");
   264              
   265              String[] ids = Utilities.stringToStringArray(getBean().getIds(),",");
   266              for (int i=0; i < ids.length; i++) {
   267                  log.debug("processing id - "+ ids[i]);
   268                  
   269                  // if we already deleted it then skip forward
   270                  if(deletes.contains(ids[i])) {
   271                      log.debug("Already deleted, skipping - "+ids[i]);
   272                      continue;
   273                  }
   274                  
   275                  WeblogEntryComment comment = wmgr.getComment(ids[i]);
   276                  
   277                  // mark/unmark spam
   278                  if (spamIds.contains(ids[i]) && 
   279                          !WeblogEntryComment.SPAM.equals(comment.getStatus())) {
   280                      log.debug("Marking as spam - "+comment.getId());
   281                      comment.setStatus(WeblogEntryComment.SPAM);
   282                      wmgr.saveComment(comment);
   283                      
   284                      flushList.add(comment.getWeblogEntry().getWebsite());
   285                  } else if(WeblogEntryComment.SPAM.equals(comment.getStatus())) {
   286                      log.debug("Marking as approved - "+comment.getId());
   287                      comment.setStatus(WeblogEntryComment.APPROVED);
   288                      wmgr.saveComment(comment);
   289                      
   290                      flushList.add(comment.getWeblogEntry().getWebsite());
   291                  }
   292              }
   293              
   294              WebloggerFactory.getWeblogger().flush();
   295              
   296              // notify caches of changes, flush weblogs affected by changes
   297              for (Iterator sites = flushList.iterator(); sites.hasNext();) {
   298                  CacheManager.invalidate((Weblog)sites.next());
   299              }
   300              
   301              addMessage("commentManagement.updateSuccess");
   302              
   303              // reset form and load fresh comments list
   304              setBean(new GlobalCommentManagementBean());
   305              
   306              return execute();
   307              
   308          } catch (Exception ex) {
   309              log.error("ERROR updating comments", ex);
   310              addError("commentManagement.updateError", ex.toString());
   311          }
   312          
   313          return LIST;
   314      }
   315      
   316      
   317      public List getCommentStatusOptions() {
   318          
                 /* 
    P/P           *  Method: List getCommentStatusOptions()
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getCommentStatusOptions#1)
                  *    new ArrayList(getCommentStatusOptions#1) num objects == 1
                  */
   319          List opts = new ArrayList();
   320          
   321          opts.add(new KeyValueObject("ALL", getText("commentManagement.all")));
   322          opts.add(new KeyValueObject("ONLY_PENDING", getText("commentManagement.onlyPending")));
   323          opts.add(new KeyValueObject("ONLY_APPROVED", getText("commentManagement.onlyApproved")));
   324          opts.add(new KeyValueObject("ONLY_DISAPPROVED", getText("commentManagement.onlyDisapproved")));
   325          
   326          return opts;
   327      }
   328      
   329      public List getSpamStatusOptions() {
   330          
                 /* 
    P/P           *  Method: List getSpamStatusOptions()
                  * 
                  *  Postconditions:
                  *    return_value == &new ArrayList(getSpamStatusOptions#1)
                  *    new ArrayList(getSpamStatusOptions#1) num objects == 1
                  */
   331          List opts = new ArrayList();
   332          
   333          opts.add(new KeyValueObject("ALL", getText("commentManagement.all")));
   334          opts.add(new KeyValueObject("NO_SPAM", getText("commentManagement.noSpam")));
   335          opts.add(new KeyValueObject("ONLY_SPAM", getText("commentManagement.onlySpam")));
   336          
   337          return opts;
   338      }
   339      
   340      
   341      public GlobalCommentManagementBean getBean() {
                 /* 
    P/P           *  Method: GlobalCommentManagementBean getBean()
                  * 
                  *  Preconditions:
                  *    init'ed(this.bean)
                  * 
                  *  Postconditions:
                  *    return_value == this.bean
                  *    init'ed(return_value)
                  */
   342          return bean;
   343      }
   344  
   345      public void setBean(GlobalCommentManagementBean bean) {
                 /* 
    P/P           *  Method: void setBean(GlobalCommentManagementBean)
                  * 
                  *  Postconditions:
                  *    this.bean == bean
                  *    init'ed(this.bean)
                  */
   346          this.bean = bean;
   347      }
   348  
   349      public int getBulkDeleteCount() {
                 /* 
    P/P           *  Method: int getBulkDeleteCount()
                  * 
                  *  Preconditions:
                  *    init'ed(this.bulkDeleteCount)
                  * 
                  *  Postconditions:
                  *    return_value == this.bulkDeleteCount
                  *    init'ed(return_value)
                  */
   350          return bulkDeleteCount;
   351      }
   352  
   353      public void setBulkDeleteCount(int bulkDeleteCount) {
                 /* 
    P/P           *  Method: void setBulkDeleteCount(int)
                  * 
                  *  Postconditions:
                  *    this.bulkDeleteCount == bulkDeleteCount
                  *    init'ed(this.bulkDeleteCount)
                  */
   354          this.bulkDeleteCount = bulkDeleteCount;
   355      }
   356  
   357      public WeblogEntryComment getFirstComment() {
                 /* 
    P/P           *  Method: WeblogEntryComment getFirstComment()
                  * 
                  *  Preconditions:
                  *    init'ed(this.firstComment)
                  * 
                  *  Postconditions:
                  *    return_value == this.firstComment
                  *    init'ed(return_value)
                  */
   358          return firstComment;
   359      }
   360  
   361      public void setFirstComment(WeblogEntryComment firstComment) {
                 /* 
    P/P           *  Method: void setFirstComment(WeblogEntryComment)
                  * 
                  *  Postconditions:
                  *    this.firstComment == firstComment
                  *    init'ed(this.firstComment)
                  */
   362          this.firstComment = firstComment;
   363      }
   364  
   365      public WeblogEntryComment getLastComment() {
                 /* 
    P/P           *  Method: WeblogEntryComment getLastComment()
                  * 
                  *  Preconditions:
                  *    init'ed(this.lastComment)
                  * 
                  *  Postconditions:
                  *    return_value == this.lastComment
                  *    init'ed(return_value)
                  */
   366          return lastComment;
   367      }
   368  
   369      public void setLastComment(WeblogEntryComment lastComment) {
                 /* 
    P/P           *  Method: void setLastComment(WeblogEntryComment)
                  * 
                  *  Postconditions:
                  *    this.lastComment == lastComment
                  *    init'ed(this.lastComment)
                  */
   370          this.lastComment = lastComment;
   371      }
   372  
   373      public CommentsPager getPager() {
                 /* 
    P/P           *  Method: CommentsPager getPager()
                  * 
                  *  Preconditions:
                  *    init'ed(this.pager)
                  * 
                  *  Postconditions:
                  *    return_value == this.pager
                  *    init'ed(return_value)
                  */
   374          return pager;
   375      }
   376  
   377      public void setPager(CommentsPager pager) {
                 /* 
    P/P           *  Method: void setPager(CommentsPager)
                  * 
                  *  Postconditions:
                  *    this.pager == pager
                  *    init'ed(this.pager)
                  */
   378          this.pager = pager;
   379      }
   380      
   381  }








SofCheck Inspector Build Version : 2.18479
GlobalCommentManagement.java 2009-Jan-02 14:24:46
GlobalCommentManagement.class 2009-Sep-04 03:12:45