2 * Copyright (C) 2001, 2002 The Mir-coders group
4 * This file is part of Mir.
6 * Mir is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
11 * Mir is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with Mir; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 * In addition, as a special exception, The Mir-coders gives permission to link
21 * the code of this program with any library licensed under the Apache Software License,
22 * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23 * (or with modified versions of the above that use the same license as the above),
24 * and distribute linked combinations including the two. You must obey the
25 * GNU General Public License in all respects for all of the code used other than
26 * the above mentioned libraries. If you modify this file, you may extend this
27 * exception to your version of the file, but you are not obligated to do so.
28 * If you do not wish to do so, delete this exception statement from your version.
31 package mircoders.search;
35 import javax.servlet.http.HttpServletRequest;
37 import mir.entity.Entity;
39 import org.apache.lucene.document.Document;
42 * The SearchTerm class attempts to encapsulate the relationships
45 * <li>A fields or property of Content Entities</li>
46 * <li>A field of Lucene Documents</li>
47 * <li>An HTTP Query Parameter</li>
48 * <li>And a bit of HTML on a Search Results Page</li>
50 * The basic idea is that how you index, query, and display a
51 * particular field in a resource are all intimately related, possibly
52 * more so than how you index two different fields of the same
55 * <p>Instances of classes implementing SearchTerm are created when a Mir
56 * content entity is indexed by the IndexingProducerNode Class. The
57 * index method of each class is called in turn to add a bit of
58 * information to the Lucene documents which will be added to the
59 * index after it is created and all its fields specified. Instances
60 * of the same classes are created by ServletModuleOpenIndy so that it
61 * can construct a query to match against the lucene index, here the
62 * makeTerm methods are called in turn to pick out the parameter they
63 * want from the request and then construct the appropriate fragment
64 * of lucene query, which are ultimately concatenated together. These
65 * classes are also used to return appropriate template models
66 * representing any hits to be displayed as a result of processing the
70 abstract public class SearchTerm {
71 protected String partOfEntity;
72 protected String paramName;
73 protected String matchField;
74 protected String dataField;
75 protected String templateVariable;
77 public SearchTerm(String anEntityPart, String aParamName, String aMatchField, String aDataField, String aTemplateVariable){
78 //for more reusable SearchTerm types
79 partOfEntity = anEntityPart;
80 paramName = aParamName;
81 matchField = aMatchField;
82 dataField = aDataField;
83 templateVariable = aTemplateVariable;
87 //do nothing, we'll get the values from the extending class definition instead
90 abstract public void index(Document doc, Entity entity) throws Exception;
91 abstract public String makeTerm(HttpServletRequest req);
92 abstract public void returnMeta(Map result,Document doc);