1 package com.indexdata.pz2utils4jsf.pazpar2;
\r
3 import java.io.ByteArrayOutputStream;
\r
4 import java.io.IOException;
\r
6 import org.apache.log4j.Logger;
\r
8 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;
\r
9 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;
\r
11 public class CommandThread extends Thread {
\r
13 private static Logger logger = Logger.getLogger(CommandThread.class);
\r
14 Pazpar2Command command;
\r
15 SearchClient client;
\r
16 private ByteArrayOutputStream baos = new ByteArrayOutputStream();
\r
17 private StringBuilder response = new StringBuilder("");
\r
19 public CommandThread (Pazpar2Command command, SearchClient client) {
\r
20 this.command = command;
\r
21 this.client = client;
\r
25 * Runs the specified command using the specified Pazpar2 client
\r
26 * Sets the Pazpar2 response as an XML response string to be retrieved by
\r
29 * In case of an exception, an error response is generated, the document
\r
30 * element being the same as it would have been if successful (named after
\r
31 * the command, that is).
\r
36 if (command.getName().equals("search")) {
\r
37 client.setSearchCommand(command);
\r
40 long start = System.currentTimeMillis();
\r
41 CommandResponse commandResponse = client.executeCommand(command, baos);
\r
42 if (commandResponse.getStatusCode()==200) {
\r
43 response.append(commandResponse.getResponseString());
\r
44 } else if (commandResponse.getStatusCode()==417) {
\r
45 logger.error("Pazpar2 status code 417: " + baos.toString("UTF-8"));
\r
46 response.append(CommandError.insertPazpar2ErrorXml(command.getName(), "Expectation failed (417)", commandResponse.getResponseString()));
\r
48 String resp = baos.toString("UTF-8");
\r
49 logger.error("Pazpar2 status code was " + commandResponse.getStatusCode() + ": " + resp);
\r
50 throw new Pazpar2ErrorException(resp,commandResponse.getStatusCode(),resp,null);
\r
52 long end = System.currentTimeMillis();
\r
53 logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );
\r
54 } catch (IOException e) {
\r
55 response.append(CommandError.createErrorXml(command.getName(), "io", e.getMessage()));
\r
56 logger.error(response.toString());
\r
57 } catch (Pazpar2ErrorException e) {
\r
58 response.append(CommandError.createErrorXml(command.getName(), "pazpar2error", e.getMessage()));
\r
59 logger.error(response.toString());
\r
60 } catch (Exception e) {
\r
61 response.append(CommandError.createErrorXml(command.getName(), "general", e.getMessage()));
\r
62 logger.error(response.toString());
\r
68 * @return Pazpar2 response as an XML string, possibly a generated error XML
\r
70 public String getResponse () {
\r
71 return response.toString();
\r
74 public Pazpar2Command getCommand() {
\r