content: /*
   * This library is part of OpenCms -
   * the Open Source Content Management System
   *
   * Copyright (c) Alkacon Software GmbH & Co. KG (https://www.alkacon.com)
   *
   * This library is free software; you can redistribute it and/or
   * modify it under the terms of the GNU Lesser General Public
   * License as published by the Free Software Foundation; either
   * version 2.1 of the License, or (at your option) any later version.
   *
   * This library is distributed in the hope that it will be useful,
   * but WITHOUT ANY WARRANTY; without even the implied warranty of
   * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
   * Lesser General Public License for more details.
   *
   * For further information about Alkacon Software GmbH & Co. KG, please see the
   * company website: https://www.alkacon.com
   *
   * For further information about OpenCms, please see the
   * project website: https://www.opencms.org
   *
   * You should have received a copy of the GNU Lesser General Public
   * License along with this library; if not, write to the Free Software
   * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
   */
  
  package org.opencms.jsp;
  
  import org.opencms.ade.contenteditor.shared.CmsEditorConstants;
  import org.opencms.util.CmsStringUtil;
  import org.opencms.util.CmsUUID;
  
  /**
   * A container to store information about a collector's result.<p>
   *
   * @since 6.0.0
   */
  public class CmsContentInfoBean {
  
      /** The name under which the collector info is saved in the page context. */
      public static final String PAGE_CONTEXT_ATTRIBUTE_NAME = "CollectorInfo";
  
      /** UUID identifying the content info instance. */
      private String m_id = (new CmsUUID()).toString();
  
      /** The default locale (as String) that is used. */
      private String m_locale;
  
      /** The number of pages of browse through the result list. */
      private int m_pageCount;
  
      /** The index of the current page that to be displayed. */
      private int m_pageIndex;
  
      /** The page index of the last element in the Google-like page navigation. */
      private int m_pageNavEndIndex;
  
      /** The number of page links in the Google-like page navigation. */
      private int m_pageNavLength;
  
      /** The page index of the first element in the Google-like page navigation. */
      private int m_pageNavStartIndex;
  
      /** The number of entries to be displayed on a page. */
      private int m_pageSize;
  
      /** The index of the current resource that gets iterated in the result list. */
      private int m_resultIndex;
  
      /** The total size of the collector's result list. */
      private int m_resultSize;
  
      /**
       * Creates a new content info bean.<p>
       */
      public CmsContentInfoBean() {
  
          super();
  
          m_resultSize = -1;
          m_resultIndex = -1;
  
          m_pageCount = 1;
          m_pageSize = -1;
          m_pageIndex = 1;
          m_pageNavStartIndex = 1;
          m_pageNavEndIndex = 1;
          m_pageNavLength = 10;
      }
  
      /**
       * Gets an id which is common to all items in a collector list.<p>
       *
       * @return the id identifying the collector list
       */
      public String getId() {
  
          return m_id;
      }
  
      /**
       * Returns the locale used by the content loader.<p>
       *
       * @return the locale used by the content loader
       */
      public String getLocale() {
  
          return m_locale;
      }
  
      /**
       * Gets the javascript: link for creating and editing a new content.<p>
       *
       * @return the javascript: link for creating and editing a new content
       */
      public String getNewContentLink() {
  
          return "javascript:" + getNewContentScript();
      }
  
      /**
       * Gets the Javascript for creating and editing a new content.<p>
       *
       * @return the Javascript for creating and editing a new content
       */
      public String getNewContentScript() {
  
          return CmsEditorConstants.FUNCTION_CREATE_NEW + "('" + m_id + "');";
      }
  
      /**
       * Returns the number of pages of browse through the result list.<p>
       *
       * @return the number of pages of browse through the result list
       */
      public int getPageCount() {
  
          return m_pageCount;
      }
  
      /**
       * Returns the index of the current page that gets displayed.<p>
       *
       * @return the index of the current page that gets displayed
       */
      public int getPageIndex() {
  
          return m_pageIndex;
      }
  
      /**
       * Returns the page index of the first element in the Google-like page navigation.<p>
       *
       * @return the page index of the first element in the Google-like page navigation
       */
      public int getPageNavEndIndex() {
  
          return m_pageNavEndIndex;
      }
  
      /**
       * Returns the page index of the last element in the Google-like page navigation.<p>
       *
       * @return page index of the last element in the Google-like page navigation
       */
      public int getPageNavLength() {
  
          return m_pageNavLength;
      }
  
      /**
       * Returns the page index of the first element in the Google-like page navigation.<p>
       *
       * @return the page index of the first element in the Google-like page navigation
       */
      public int getPageNavStartIndex() {
  
          return m_pageNavStartIndex;
      }
  
      /**
       * Returns the size of a page.<p>
       *
       * @return the size of a page
       */
      public int getPageSize() {
  
          return m_pageSize;
      }
  
      /**
       * Returns the index of the current resource that gets iterated in the result list.<p>
       *
       * @return the index of the current resource that gets iterated in the result list
       */
      public int getResultIndex() {
  
          return m_resultIndex;
      }
  
      /**
       * Returns the total size of the collector's result list.<p>
       *
       * @return the total size of the collector's result list
       */
      public int getResultSize() {
  
          return m_resultSize;
      }
  
      /**
       * Returns true if there is no resource in the result list.<p>
       *
       * @return true if there is no resource in the result list
       */
      public boolean isEmptyResult() {
  
          return m_resultSize <= 0;
      }
  
      /**
       * Returns true if the current resource is the first resource on the current page.<p>
       *
       * @return true if the current resource is the first resource on the current page
       */
      public boolean isFirstOnPage() {
  
          return m_resultIndex == (((m_pageIndex - 1) * m_pageSize) + 1);
      }
  
      /**
       * Returns true if the current resource is the first resource in the result list.<p>
       *
       * @return true if the current resource is the first resource in the result list
       */
      public boolean isFirstResult() {
  
          return m_resultIndex == 1;
      }
  
      /**
       * Returns true if the current resource is the last resource on the current page.<p>
       *
       * @return true if the current resource is the last resource on the current page
       */
      public boolean isLastOnPage() {
  
          return (m_resultIndex == (m_pageIndex * m_pageSize)) || isLastResult();
      }
  
      /**
       * Returns true if the current resource is the last resource in the result list.<p>
       *
       * @return true if the current resource is the last resource in the result list
       */
      public boolean isLastResult() {
  
          return m_resultIndex == m_resultSize;
      }
  
      /**
       * Sets the current locale used by the content loader.<p>
       *
       * @param locale the locale to set
       */
      public void setLocale(String locale) {
  
          m_locale = locale;
      }
  
      /**
       * Increments the index of the current resource that gets iterated in the result list.<p>
       */
      void incResultIndex() {
  
          m_resultIndex++;
      }
  
      /**
       * Initializes the start and end indexes to build a Google-like page navigation.<p>
       */
      void initPageNavIndexes() {
  
          if (m_pageIndex < m_pageNavLength) {
  
              m_pageNavStartIndex = 1;
              m_pageNavEndIndex = m_pageCount < m_pageNavLength ? m_pageCount : m_pageNavLength;
  
          } else {
  
              int middle = m_pageNavLength / 2;
              m_pageNavStartIndex = m_pageIndex - middle;
              m_pageNavEndIndex = (m_pageNavStartIndex + m_pageNavLength) - 1;
  
              if (m_pageNavStartIndex < 1) {
                  m_pageNavStartIndex = 1;
              } else if (m_pageNavEndIndex < 1) {
                  m_pageNavEndIndex = m_pageCount;
              } else if (m_pageNavEndIndex > m_pageCount) {
  
                  // adjust end index
                  m_pageNavEndIndex = m_pageCount;
                  m_pageNavStartIndex = (m_pageNavEndIndex - m_pageNavLength) + 1;
  
                  if (m_pageNavStartIndex < 1) {
                      // adjust the start index again
                      m_pageNavStartIndex = 1;
                  }
              }
          }
      }
  
      /**
       * Initializes the index of the current resource that gets iterated in the result list.<p>
       */
      void initResultIndex() {
  
          int startIndex = 0;
          if ((m_pageIndex > 0) && (m_pageSize > 0)) {
              startIndex = (m_pageIndex - 1) * m_pageSize;
          }
  
          m_resultIndex = startIndex > m_resultSize ? m_resultSize : startIndex;
      }
  
      /**
       * Sets the number of pages of browse through the result list.<p>
       *
       * @param pageCount the number of pages of browse through the result list
       */
      void setPageCount(int pageCount) {
  
          m_pageCount = pageCount;
      }
  
      /**
       * Sets the index of the current page that gets displayed as an int.<p>
       *
       * @param pageIndex the index of the current page that gets displayed as an int
       */
      void setPageIndex(int pageIndex) {
  
          m_pageIndex = pageIndex;
      }
  
      /**
       * Sets the index of the current page that gets displayed as a string.<p>
       *
       * The specified string gets parsed into an int.<p>
       *
       * @param pageIndex the index of the current page that gets displayed as a string
       */
      void setPageIndexAsString(String pageIndex) {
  
          if (CmsStringUtil.isEmpty(pageIndex)) {
              return;
          }
  
          try {
              m_pageIndex = Integer.parseInt(pageIndex);
          } catch (NumberFormatException e) {
              // intentionally left blank
          }
      }
  
      /**
       * Sets the page index of the last element in the Google-like page navigation.<p>
       *
       * @param index the page index of the last element in the Google-like page navigation
       */
      void setPageNavEndIndex(int index) {
  
          m_pageNavEndIndex = index;
      }
  
      /**
       * Sets the number of page links in the Google-like page navigation.<p>
       *
       * @param length the number of page links in the Google-like page navigation
       */
      void setPageNavLength(int length) {
  
          m_pageNavLength = length;
      }
  
      /**
       * Sets number of page links in the Google-like page navigation as a string.<p>
       *
       * @param pageNavLength the number of page links in the Google-like page navigation
       */
      void setPageNavLengthAsString(String pageNavLength) {
  
          if (CmsStringUtil.isEmpty(pageNavLength)) {
              return;
          }
  
          try {
              m_pageNavLength = Integer.parseInt(pageNavLength);
          } catch (NumberFormatException e) {
              // intentionally left blank
          }
      }
  
      /**
       * Sets the page index of the first element in the Google-like page navigation.<p>
       *
       * @param index the page index of the first element in the Google-like page navigation
       */
      void setPageNavStartIndex(int index) {
  
          m_pageNavStartIndex = index;
      }
  
      /**
       * Sets the size of a page as an int.<p>
       *
       * @param pageSize the size of a page as an int
       */
      void setPageSize(int pageSize) {
  
          m_pageSize = pageSize;
      }
  
      /**
       * Sets the size of a page as a string.<p>
       *
       * The specified string gets parsed into an int.<p>
       *
       * @param pageSize the size of a page as a string
       */
      void setPageSizeAsString(String pageSize) {
  
          if (CmsStringUtil.isEmpty(pageSize)) {
              return;
          }
  
          try {
              m_pageSize = Integer.parseInt(pageSize);
          } catch (NumberFormatException e) {
              // intentionally left blank
          }
      }
  
      /**
       * Sets the total size of the collector's result list.<p>
       *
       * @param size the total size of the collector's result list
       */
      void setResultSize(int size) {
  
          m_resultSize = size;
      }
  }