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.ClientCommand;
\r
9 import com.indexdata.masterkey.pazpar2.client.Pazpar2Client;
\r
10 import com.indexdata.masterkey.pazpar2.client.Pazpar2HttpResponse;
\r
11 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;
\r
12 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;
\r
14 public class CommandThread extends Thread {
\r
16 private static Logger logger = Logger.getLogger(CommandThread.class);
\r
17 Pazpar2Command command;
\r
18 Pazpar2Client client;
\r
19 private ByteArrayOutputStream baos = new ByteArrayOutputStream();
\r
20 private StringBuilder response = new StringBuilder("");
\r
22 public CommandThread (Pazpar2Command command, Pazpar2Client client) {
\r
23 this.command = command;
\r
24 this.client = client;
\r
28 * Runs the specified command using the specified Pazpar2 client
\r
29 * Sets the Pazpar2 response as an XML response string to be retrieved by
\r
32 * In case of an exception, an error response is generated, the document
\r
33 * element being the same as it would have been if successful (named after
\r
34 * the command, that is).
\r
38 ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());
\r
39 if (command.getName().equals("search")) {
\r
40 client.setSearchCommand(clientCommand);
\r
43 long start = System.currentTimeMillis();
\r
44 Pazpar2HttpResponse httpResponse = client.executeCommand(clientCommand, baos);
\r
45 if (httpResponse.getStatusCode()==200) {
\r
46 response.append(baos.toString("UTF-8"));
\r
48 String resp = baos.toString("UTF-8");
\r
49 throw new Pazpar2ErrorException(resp,httpResponse.getStatusCode(),resp,null);
\r
51 long end = System.currentTimeMillis();
\r
52 logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );
\r
53 } catch (IOException e) {
\r
54 response.append(CommandError.createErrorXml(command.getName(), "io", e.getMessage()));
\r
55 logger.error(response.toString());
\r
56 } catch (Pazpar2ErrorException e) {
\r
57 response.append(CommandError.createErrorXml(command.getName(), "pazpar2error", e.getMessage()));
\r
58 logger.error(response.toString());
\r
59 } catch (Exception e) {
\r
60 response.append(CommandError.createErrorXml(command.getName(), "general", e.getMessage()));
\r
61 logger.error(response.toString());
\r
67 * @return Pazpar2 response as an XML string, possibly a generated error XML
\r
69 public String getResponse () {
\r
70 return response.toString();
\r
73 public Pazpar2Command getCommand() {
\r