BannerCommon.java
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 4k
Category:

Java Develop

Development Platform:

Java

  1. /*
  2.  * Copyright (c) JForum Team
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms,
  6.  * with or without modification, are permitted provided
  7.  * that the following conditions are met:
  8.  *
  9.  * 1) Redistributions of source code must retain the above
  10.  * copyright notice, this list of conditions and the
  11.  * following  disclaimer.
  12.  * 2)  Redistributions in binary form must reproduce the
  13.  * above copyright notice, this list of conditions and
  14.  * the following disclaimer in the documentation and/or
  15.  * other materials provided with the distribution.
  16.  * 3) Neither the name of "Rafael Steil" nor
  17.  * the names of its contributors may be used to endorse
  18.  * or promote products derived from this software without
  19.  * specific prior written permission.
  20.  *
  21.  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT
  22.  * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
  23.  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING,
  24.  * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
  25.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  26.  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
  27.  * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE
  28.  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
  29.  * EXEMPLARY, OR CONSEQUENTIAL DAMAGES
  30.  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
  31.  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
  32.  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
  33.  * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
  34.  * IN CONTRACT, STRICT LIABILITY, OR TORT
  35.  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
  36.  * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
  37.  * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
  38.  *
  39.  * Created on Apr 2, 2005 / 9:15:13 AM
  40.  * The JForum Project
  41.  * http://www.jforum.net
  42.  */
  43. package net.jforum.view.forum.common;
  44. import java.util.List;
  45. import java.util.Random;
  46. import net.jforum.dao.BannerDAO;
  47. import net.jforum.dao.DataAccessDriver;
  48. import net.jforum.entities.Banner;
  49. /**
  50.  * @author Samuel Yung
  51.  * @version $Id: BannerCommon.java,v 1.9 2007/08/01 22:30:05 rafaelsteil Exp $
  52.  */
  53. public class BannerCommon
  54. {
  55. private BannerDAO dao;
  56. private List banners;
  57. public BannerCommon()
  58. {
  59. this.dao = DataAccessDriver.getInstance().newBannerDAO();
  60. }
  61.     /**
  62.      * Check whether the banner will be displayed based on user rights and
  63.      * banner filter settings.
  64.      * @return boolean
  65.      * @param bannerId int
  66.      */
  67.     public boolean canBannerDisplay(int bannerId)
  68. {
  69.      return true;
  70. }
  71. /**
  72.  * Test whether any active banner exist at the placement indicated.
  73.  * @param placement int
  74.  * @return boolean
  75.  */
  76. public boolean isActiveBannerExist(int placement) 
  77. {
  78. banners = dao.selectActiveBannerByPlacement(placement);
  79. if (banners == null || banners.isEmpty())
  80. {
  81. return false;
  82. }
  83. return true;
  84. }
  85. /**
  86.  * Retrieves the correct banner based on weight. Before calling this
  87.  * function the isBannerExist(int placement) must be called. The total
  88.  * weight for all the same position banners should be equal to 99. If
  89.  * the total weight is smaller than 99 and the random number is larger
  90.  * than the total weight of all the same position banners, the highest
  91.  * weight's banner will be chosen. After a correct banner is found, its
  92.  * views variable will be incremented by 1.
  93.  *
  94.  * @return Banner
  95.  */
  96. public Banner getBanner()
  97. {
  98. Banner result = null;
  99. if (banners == null || banners.isEmpty())
  100. {
  101. return null;
  102. }
  103. // get correct banner based on weight
  104. int r = (new Random().nextInt(99));
  105. int weightFrom = 0;
  106. int weightTo = 0;
  107. for(int i = 0; i < banners.size(); i++)
  108. {
  109. result = (Banner)banners.get(i);
  110. weightTo += result.getWeight();
  111. if (r >= weightFrom && r < weightTo)
  112. {
  113. break;
  114. }
  115. weightFrom = weightTo;
  116. }
  117.         // increment views by 1
  118. result.setViews(result.getViews() + 1);
  119. dao.update(result);
  120. return result;
  121. }
  122. }