SearchOperation.java
Upload User: gdxydsw
Upload Date: 2019-01-29
Package Size: 16721k
Code Size: 3k
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 25/07/2007 19:27:48
  40.  * 
  41.  * The JForum Project
  42.  * http://www.jforum.net
  43.  */
  44. package net.jforum.search;
  45. import java.util.ArrayList;
  46. import java.util.HashMap;
  47. import java.util.Iterator;
  48. import java.util.List;
  49. import java.util.Map;
  50. import net.jforum.entities.Forum;
  51. import net.jforum.repository.ForumRepository;
  52. /**
  53.  * @author Rafael Steil
  54.  * @version $Id: SearchOperation.java,v 1.5 2007/07/30 14:06:44 rafaelsteil Exp $
  55.  */
  56. public abstract class SearchOperation
  57. {
  58. public abstract SearchResult performSearch(SearchArgs args);
  59. public abstract int totalRecords();
  60. public abstract void prepareForDisplay();
  61. public abstract List results();
  62. public abstract String viewTemplate();
  63. protected abstract int extractForumId(Object value);
  64. public final List filterResults(List results)
  65. {
  66. List l = new ArrayList();
  67. Map forums = new HashMap();
  68. for (Iterator iter = results.iterator(); iter.hasNext(); ) {
  69. Object currentObject = iter.next();
  70. Integer forumId = new Integer(this.extractForumId(currentObject));
  71. ForumFilterResult status = (ForumFilterResult)forums.get(forumId);
  72. if (status == null) {
  73. Forum f = ForumRepository.getForum(forumId.intValue());
  74. status = new ForumFilterResult(f);
  75. forums.put(forumId, status);
  76. }
  77. if (status.isValid()) {
  78. // TODO: decouple
  79. if (currentObject instanceof SearchPost) {
  80. ((SearchPost)currentObject).setForum(status.getForum());
  81. }
  82. l.add(currentObject);
  83. }
  84. }
  85. return l;
  86. }
  87. private static class ForumFilterResult
  88. {
  89. private Forum forum;
  90. public ForumFilterResult(Forum forum)
  91. {
  92. this.forum = forum;
  93. }
  94. public Forum getForum() 
  95. {
  96. return this.forum;
  97. }
  98. public boolean isValid()
  99. {
  100. return this.forum != null;
  101. }
  102. }
  103. }