source: main/trunk/greenstone3/src/java/org/greenstone/gsdl3/service/AbstractTextSearch.java@ 26249

Last change on this file since 26249 was 26249, checked in by kjdon, 12 years ago

added back in some params that had gone missing

File size: 6.8 KB
Line 
1/*
2 * AbstractTextSearch.java
3 * Copyright (C) 2005 New Zealand Digital Library, http://www.nzdl.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program; if not, write to the Free Software
17 * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19package org.greenstone.gsdl3.service;
20
21// Greenstone classes
22import java.util.ArrayList;
23
24import org.apache.log4j.Logger;
25import org.greenstone.gsdl3.util.GSXML;
26import org.w3c.dom.Element;
27
28/**
29 * Partially implements a generic search service
30 *
31 */
32
33public abstract class AbstractTextSearch extends AbstractSearch
34{
35
36 static Logger logger = Logger.getLogger(org.greenstone.gsdl3.service.AbstractTextSearch.class.getName());
37
38 // optional standard params - some of these have to be implemented
39 protected static final String INDEX_SUBCOLLECTION_PARAM = "indexSubcollection";
40 protected static final String INDEX_LANGUAGE_PARAM = "indexLanguage";
41
42 protected static final String INDEX_SUBCOLLECTION_ELEM = "indexSubcollection";
43 protected static final String INDEX_LANGUAGE_ELEM = "indexLanguage";
44
45 // some other common params that may be used
46 protected static final String CASE_PARAM = "case";
47 protected static final String STEM_PARAM = "stem";
48 protected static final String ACCENT_PARAM = "accent";
49
50 protected static final String BOOLEAN_PARAM_ON = "1";
51 protected static final String BOOLEAN_PARAM_OFF = "0";
52 protected static final String MATCH_PARAM = "matchMode";
53 protected static final String MATCH_PARAM_ALL = "all";
54 protected static final String MATCH_PARAM_SOME = "some";
55
56 protected String default_index_subcollection = "";
57
58 protected String default_index_language = "";
59
60 public AbstractTextSearch()
61 {
62 // the search service
63 QUERY_SERVICE = "TextQuery";
64 }
65
66 /** adds the standard query params into the service description */
67 protected void addStandardQueryParams(Element param_list, String lang)
68 {
69 if (!default_index_subcollection.equals(""))
70 {
71 createParameter(INDEX_SUBCOLLECTION_PARAM, param_list, lang);
72 }
73 if (!default_index_language.equals(""))
74 {
75 createParameter(INDEX_LANGUAGE_PARAM, param_list, lang);
76 }
77
78 super.addStandardQueryParams(param_list, lang);
79 }
80
81 /**
82 * Top up createParameterChain with TextQuery specific params: case, stem
83 * ...
84 */
85 protected boolean createParameterChain(String name, Element param_list, String lang, String default_value)
86 {
87 Element param = null;
88 String param_default = default_value;
89
90 if (super.createParameterChain(name, param_list, lang, default_value))
91 {
92 // found a match, so can stop here
93 return true;
94 }
95 // otherwise look to see if it is a text specific parameter
96 else if (name.equals(INDEX_SUBCOLLECTION_PARAM))
97 {
98 Element index_sub_list = (Element) GSXML.getChildByTagName(this.config_info, INDEX_SUBCOLLECTION_ELEM + GSXML.LIST_MODIFIER);
99 if (index_sub_list == null)
100 return true; // processed, just not a very interesting result
101 ArrayList<String> index_sub_ids = new ArrayList<String>();
102 ArrayList<String> index_sub_names = new ArrayList<String>();
103 getIndexSubcollectionData(index_sub_ids, index_sub_names, lang);
104 String param_type = GSXML.PARAM_TYPE_ENUM_SINGLE;
105 if (does_multi_index_search)
106 {
107 param_type = GSXML.PARAM_TYPE_ENUM_MULTI;
108 }
109 if (param_default == null)
110 {
111 param_default = this.default_index_subcollection;
112 }
113 param = GSXML.createParameterDescription2(this.doc, INDEX_SUBCOLLECTION_PARAM, getTextString("param." + INDEX_SUBCOLLECTION_PARAM, lang), param_type, param_default, index_sub_ids, index_sub_names);
114 param_list.appendChild(param);
115 return true;
116 }
117 else if (name.equals(INDEX_LANGUAGE_PARAM))
118 {
119 Element index_lang_list = (Element) GSXML.getChildByTagName(this.config_info, INDEX_LANGUAGE_ELEM + GSXML.LIST_MODIFIER);
120 if (index_lang_list == null)
121 return true; // processed, just not a very interesting result
122 ArrayList<String> index_lang_ids = new ArrayList<String>();
123 ArrayList<String> index_lang_names = new ArrayList<String>();
124 getIndexLanguageData(index_lang_ids, index_lang_names, lang);
125 String param_type = GSXML.PARAM_TYPE_ENUM_SINGLE;
126 if (does_multi_index_search)
127 {
128 param_type = GSXML.PARAM_TYPE_ENUM_MULTI;
129 }
130 if (param_default == null)
131 {
132 param_default = this.default_index_language;
133 }
134 param = GSXML.createParameterDescription2(this.doc, INDEX_LANGUAGE_PARAM, getTextString("param." + INDEX_LANGUAGE_PARAM, lang), param_type, param_default, index_lang_ids, index_lang_names);
135 param_list.appendChild(param);
136 return true;
137 }
138 else if (name.equals(CASE_PARAM) || name.equals(STEM_PARAM) || name.equals(ACCENT_PARAM)) {
139 if (param_default == null) {
140 param_default = BOOLEAN_PARAM_OFF;
141 }
142 String[] bool_ops = {"0", "1"};
143 String[] bool_texts = {getTextString("param.boolean.off", lang),getTextString("param.boolean.on", lang)};
144 param = GSXML.createParameterDescription(this.doc, name, getTextString("param."+name, lang), GSXML.PARAM_TYPE_BOOLEAN, param_default, bool_ops, bool_texts);
145 param_list.appendChild(param);
146 return true;
147 } else if (name.equals(MATCH_PARAM)) {
148 if (param_default == null) {
149 param_default = MATCH_PARAM_SOME;
150 }
151
152 String[] vals = {MATCH_PARAM_SOME, MATCH_PARAM_ALL };
153 String[] val_texts = {getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_SOME, lang), getTextString("param."+MATCH_PARAM+"."+MATCH_PARAM_ALL, lang)};
154 param = GSXML.createParameterDescription(this.doc, MATCH_PARAM, getTextString("param."+MATCH_PARAM, lang), GSXML.PARAM_TYPE_ENUM_SINGLE, param_default, vals, val_texts);
155 param_list.appendChild(param);
156 return true;
157 }
158 // Get to here then none of the above params matched
159 // => return false so the chain can continue
160 return false;
161
162 }
163
164 /**
165 * do the actual query must be implemented by subclass
166 */
167 abstract protected Element processTextQuery(Element request);
168
169 /**
170 * get the details about the indexexSubcollections available might be
171 * implemented by subclass
172 */
173 protected void getIndexSubcollectionData(ArrayList<String> index_ids, ArrayList<String> index_names, String lang)
174 {
175 }
176
177 /**
178 * get the details about the indexes available might be implemented by
179 * subclass
180 */
181 protected void getIndexLanguageData(ArrayList<String> index_ids, ArrayList<String> index_names, String lang)
182 {
183 }
184
185}
Note: See TracBrowser for help on using the repository browser.