Revision 2168
Added by Jing Tao over 20 years ago
src/edu/ucsb/nceas/metacat/DBQuery.java | ||
---|---|---|
230 | 230 |
{ |
231 | 231 |
// get query and qformat |
232 | 232 |
String xmlquery = ((String[])params.get("query"))[0]; |
233 |
xmlquery = transformQuery(xmlquery); |
|
233 |
|
|
234 | 234 |
MetaCatUtil.debugMessage("xmlquery: " + xmlquery, 30); |
235 | 235 |
String qformat = ((String[])params.get("qformat"))[0]; |
236 | 236 |
MetaCatUtil.debugMessage("qformat: " + qformat, 30); |
237 |
// Get the XML query and covert it into a SQL statment |
|
238 |
QuerySpecification qspec = null; |
|
239 |
if ( xmlquery != null) |
|
240 |
{ |
|
241 |
xmlquery = transformQuery(xmlquery); |
|
242 |
try |
|
243 |
{ |
|
244 |
qspec = new QuerySpecification(xmlquery, |
|
245 |
parserName, |
|
246 |
MetaCatUtil.getOption("accNumSeparator")); |
|
247 |
} |
|
248 |
catch (Exception ee) |
|
249 |
{ |
|
250 |
MetaCatUtil.debugMessage("erro to generate QuerySpecification object" |
|
251 |
+" in DBQuery.findDocuments" |
|
252 |
+ ee.getMessage(), 30); |
|
253 |
} |
|
254 |
} |
|
237 | 255 |
|
256 |
|
|
257 |
|
|
238 | 258 |
if (qformat != null && qformat.equals(MetaCatServlet.XMLFORMAT)) |
239 | 259 |
{ |
240 | 260 |
//xml format |
241 | 261 |
response.setContentType("text/xml"); |
242 |
createResultDocument(xmlquery, out, user, groups, useXMLIndex); |
|
262 |
createResultDocument(xmlquery, qspec, out, user, groups, useXMLIndex);
|
|
243 | 263 |
}//if |
244 | 264 |
else |
245 | 265 |
{ |
246 | 266 |
//knb format, in this case we will get whole result and sent it out |
247 | 267 |
response.setContentType("text/html"); |
248 | 268 |
PrintWriter nonout = null; |
249 |
StringBuffer xml = |
|
250 |
createResultDocument(xmlquery, nonout, user, groups, useXMLIndex);
|
|
269 |
StringBuffer xml = createResultDocument(xmlquery, qspec, nonout, user,
|
|
270 |
groups, useXMLIndex);
|
|
251 | 271 |
//transfer the xml to html |
252 | 272 |
try |
253 | 273 |
{ |
... | ... | |
271 | 291 |
|
272 | 292 |
/* |
273 | 293 |
* Transforms a hashtable of documents to an xml or html result and sent |
274 |
* the content to outputstream. Keep going untill hastable is empty. stop it. * |
|
294 |
* the content to outputstream. Keep going untill hastable is empty. stop it. |
|
295 |
* add the QuerySpecification as parameter is for ecogrid. But it is duplicate |
|
296 |
* to xmlquery String |
|
275 | 297 |
*/ |
276 |
private StringBuffer createResultDocument(String xmlquery, PrintWriter out, |
|
298 |
public StringBuffer createResultDocument(String xmlquery, |
|
299 |
QuerySpecification qspec, |
|
300 |
PrintWriter out, |
|
277 | 301 |
String user, String[] groups, |
278 | 302 |
boolean useXMLIndex) |
279 | 303 |
{ |
... | ... | |
288 | 312 |
{ |
289 | 313 |
out.println(resultset.toString()); |
290 | 314 |
} |
291 |
try
|
|
315 |
if (qspec != null)
|
|
292 | 316 |
{ |
293 |
// Get the XML query and covert it into a SQL statment |
|
294 |
QuerySpecification qspec = new QuerySpecification(xmlquery, |
|
295 |
parserName, MetaCatUtil.getOption("accNumSeparator")); |
|
296 |
//checkout the dbconnection |
|
297 |
dbconn = DBConnectionPool.getDBConnection("DBQuery.findDocuments"); |
|
298 |
serialNumber = dbconn.getCheckOutSerialNumber(); |
|
317 |
try |
|
318 |
{ |
|
299 | 319 |
|
300 |
//print out the search result |
|
301 |
// search the doc list |
|
302 |
resultset = findResultDoclist(qspec, resultset, out, user, groups, |
|
303 |
dbconn, useXMLIndex); |
|
320 |
//checkout the dbconnection |
|
321 |
dbconn = DBConnectionPool.getDBConnection("DBQuery.findDocuments"); |
|
322 |
serialNumber = dbconn.getCheckOutSerialNumber(); |
|
304 | 323 |
|
324 |
//print out the search result |
|
325 |
// search the doc list |
|
326 |
resultset = findResultDoclist(qspec, resultset, out, user, groups, |
|
327 |
dbconn, useXMLIndex); |
|
305 | 328 |
|
306 |
}//try
|
|
307 |
catch (IOException ioe) |
|
308 |
{ |
|
309 |
MetaCatUtil.debugMessage("IO error in DBQuery.findDocuments:", 30); |
|
310 |
MetaCatUtil.debugMessage(ioe.getMessage(), 30); |
|
329 |
} //try
|
|
330 |
catch (IOException ioe)
|
|
331 |
{
|
|
332 |
MetaCatUtil.debugMessage("IO error in DBQuery.findDocuments:", 30);
|
|
333 |
MetaCatUtil.debugMessage(ioe.getMessage(), 30);
|
|
311 | 334 |
|
312 |
} |
|
313 |
catch (SQLException e) |
|
314 |
{ |
|
315 |
MetaCatUtil.debugMessage("SQL Error in DBQuery.findDocuments: " |
|
316 |
+ e.getMessage(), 30); |
|
317 |
} |
|
318 |
catch (Exception ee) |
|
319 |
{ |
|
320 |
MetaCatUtil.debugMessage("Exception in DBQuery.findDocuments: " |
|
321 |
+ ee.getMessage(), 30); |
|
322 |
} |
|
323 |
finally |
|
324 |
{ |
|
325 |
DBConnectionPool.returnDBConnection(dbconn, serialNumber); |
|
326 |
}//finally |
|
335 |
} |
|
336 |
catch (SQLException e) |
|
337 |
{ |
|
338 |
MetaCatUtil.debugMessage("SQL Error in DBQuery.findDocuments: " |
|
339 |
+ e.getMessage(), 30); |
|
340 |
} |
|
341 |
catch (Exception ee) |
|
342 |
{ |
|
343 |
MetaCatUtil.debugMessage("Exception in DBQuery.findDocuments: " |
|
344 |
+ ee.getMessage(), 30); |
|
345 |
} |
|
346 |
finally |
|
347 |
{ |
|
348 |
DBConnectionPool.returnDBConnection(dbconn, serialNumber); |
|
349 |
} //finally |
|
350 |
}//if |
|
327 | 351 |
String closeRestultset = "</resultset>"; |
328 | 352 |
resultset.append(closeRestultset); |
329 | 353 |
if (out != null) |
330 | 354 |
{ |
331 | 355 |
out.println(closeRestultset); |
332 | 356 |
} |
357 |
|
|
333 | 358 |
return resultset; |
334 | 359 |
}//createResultDocuments |
335 | 360 |
|
Also available in: Unified diff
Revised the api and ecogrid can use it easily.