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.exceptions.Pazpar2ErrorException;
\r
11 import com.indexdata.pz2utils4jsf.pazpar2.data.ApplicationError;
\r
13 public class CommandThread extends Thread {
\r
15 private static Logger logger = Logger.getLogger(CommandThread.class);
\r
16 Pazpar2Command command;
\r
17 Pazpar2Client client;
\r
18 private ByteArrayOutputStream baos = new ByteArrayOutputStream();
\r
19 private StringBuilder response = new StringBuilder("");
\r
21 public CommandThread (Pazpar2Command command, Pazpar2Client client) {
\r
22 this.command = command;
\r
23 this.client = client;
\r
27 * Runs the specified command using the specified Pazpar2 client
\r
28 * Sets the Pazpar2 response as an XML response string to be retrieved by
\r
31 * In case of an exception, an error response is generated, the document
\r
32 * element being the same as it would have been if successful (named after
\r
33 * the command, that is).
\r
37 ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());
\r
38 if (command.getName().equals("search")) {
\r
39 client.setSearchCommand(clientCommand);
\r
42 long start = System.currentTimeMillis();
\r
43 client.executeCommand(clientCommand, baos);
\r
44 response.append(baos.toString("UTF-8"));
\r
45 long end = System.currentTimeMillis();
\r
46 logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );
\r
47 } catch (IOException e) {
\r
48 response.append(ApplicationError.createErrorXml(command.getName(), "io", e.getMessage()));
\r
49 logger.error(response.toString());
\r
50 } catch (Pazpar2ErrorException e) {
\r
51 response.append(ApplicationError.createErrorXml(command.getName(), "pazpar2error", e.getMessage()));
\r
52 logger.error(response.toString());
\r
58 * @return Pazpar2 response as an XML string, possibly a generated error XML
\r
60 public String getResponse () {
\r
61 return response.toString();
\r
64 public Pazpar2Command getCommand() {
\r