scripts/mir-setup/README: update with link to new doc on wiki
[mir.git] / source / mircoders / search / SearchTerm.java
index ad43ee8..af2de1c 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two.  You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries.  If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so.  If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with  any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
  */
 
 package mircoders.search;
 
-import javax.servlet.*;
-import javax.servlet.http.*;
+import java.util.Map;
 
-import mir.entity.*;
-import mircoders.entity.*;
-import mircoders.storage.*;
+import javax.servlet.http.HttpServletRequest;
 
-import org.apache.lucene.index.*;
-import org.apache.lucene.document.Document;
+import mir.entity.Entity;
 
-import freemarker.template.*;
+import org.apache.lucene.document.Document;
 
+/**
+ * The SearchTerm class attempts to encapsulate the relationships
+ * between:
+ * <ul>
+ * <li>A fields or property of Content Entities</li> 
+ * <li>A field of Lucene Documents</li>
+ * <li>An HTTP Query Parameter</li>
+ * <li>And a bit of HTML on a Search Results Page</li>
+ * </ul>
+ * The  basic  idea  is that  how  you  index,  query, and  display  a
+ * particular field in a resource are all intimately related, possibly
+ * more  so  than how  you  index two  different  fields  of the  same
+ * resource.
+ *
+ * <p>Instances of classes implementing SearchTerm are created when a Mir
+ * content entity  is indexed by the  IndexingProducerNode Class.  The
+ * index  method of  each class  is called  in turn  to add  a  bit of
+ * information  to the  Lucene documents  which will  be added  to the
+ * index after it is created  and all its fields specified.  Instances
+ * of the same classes are created by ServletModuleOpenIndy so that it
+ * can construct a  query to match against the  lucene index, here the
+ * makeTerm methods are called in  turn to pick out the parameter they
+ * want from  the request and then construct  the appropriate fragment
+ * of lucene query, which are ultimately concatenated together.  These
+ * classes  are  also  used  to  return  appropriate  template  models
+ * representing any hits to be displayed as a result of processing the
+ * query.</p>
 
+ */
 abstract public class SearchTerm {
-  
-  public static String  partOfEntity; 
-  public static String  paramName;    
-  public static String  matchField;   
-  public static String  dataField;    
-  public static String  templateVariable;    
+  protected String  partOfEntity;
+  protected String  paramName;
+  protected String  matchField;
+  protected String  dataField;
+  protected String  templateVariable;
 
-  public SearchTerm(String anEntityPart,String aParamName,String aMatchField,String aDataField, String aTemplateVariable){
+  public SearchTerm(String anEntityPart, String aParamName, String aMatchField, String aDataField, String aTemplateVariable){
     //for more reusable SearchTerm types
-    partOfEntity     = anEntityPart;       
-    paramName        = aParamName;    
-    matchField       = aMatchField;   
-    dataField        = aDataField;    
+    partOfEntity     = anEntityPart;
+    paramName        = aParamName;
+    matchField       = aMatchField;
+    dataField        = aDataField;
     templateVariable = aTemplateVariable;
   }
 
   public SearchTerm(){
-    //do nothing, we'll get the values from the extending class definition instead 
+    //do nothing, we'll get the values from the extending class definition instead
   }
 
   abstract public void index(Document doc, Entity entity) throws Exception;
   abstract public String makeTerm(HttpServletRequest req);
-  abstract public void returnMeta(SimpleHash result,Document doc);
-  
+  abstract public void returnMeta(Map result,Document doc);
+
 
 }