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.commands.CommandReadOnly;
\r
10 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;
\r
12 public class CommandThread extends Thread {
\r
14 private static Logger logger = Logger.getLogger(CommandThread.class);
\r
15 CommandReadOnly command;
\r
16 SearchClient client;
\r
17 private ByteArrayOutputStream baos = new ByteArrayOutputStream();
\r
18 private StringBuilder response = new StringBuilder("");
\r
20 public CommandThread (CommandReadOnly command, SearchClient client) {
\r
21 this.command = command;
\r
22 this.client = client;
\r
26 * Runs the specified command using the specified Pazpar2 client
\r
27 * Sets the Pazpar2 response as an XML response string to be retrieved by
\r
30 * In case of an exception, an error response is generated, the document
\r
31 * element being the same as it would have been if successful (named after
\r
32 * the command, that is).
\r
37 if (command.getName().equals("search")) {
\r
38 client.setSearchCommand(command);
\r
41 long start = System.currentTimeMillis();
\r
42 CommandResponse commandResponse = client.executeCommand(command, baos);
\r
43 if (commandResponse.getStatusCode()==200) {
\r
44 response.append(commandResponse.getResponseString());
\r
45 } else if (commandResponse.getStatusCode()==417) {
\r
46 logger.error("Pazpar2 status code 417: " + baos.toString("UTF-8"));
\r
47 response.append(CommandError.insertPazpar2ErrorXml(command.getName(), "Expectation failed (417)", commandResponse.getResponseString()));
\r
49 String resp = baos.toString("UTF-8");
\r
50 logger.error("Pazpar2 status code was " + commandResponse.getStatusCode() + ": " + resp);
\r
51 throw new Pazpar2ErrorException(resp,commandResponse.getStatusCode(),resp,null);
\r
53 long end = System.currentTimeMillis();
\r
54 logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );
\r
55 } catch (IOException e) {
\r
56 response.append(CommandError.createErrorXml(command.getName(), "io", e.getMessage()));
\r
57 logger.error(response.toString());
\r
58 } catch (Pazpar2ErrorException e) {
\r
59 response.append(CommandError.createErrorXml(command.getName(), "pazpar2error", e.getMessage()));
\r
60 logger.error(response.toString());
\r
61 } catch (Exception e) {
\r
62 response.append(CommandError.createErrorXml(command.getName(), "general", e.getMessage()));
\r
63 logger.error(response.toString());
\r
69 * @return Pazpar2 response as an XML string, possibly a generated error XML
\r
71 public String getResponse () {
\r
72 return response.toString();
\r
75 public CommandReadOnly getCommand() {
\r