Work on error reporting. Adds troubleshooter.
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / CommandThread.java
1 package com.indexdata.pz2utils4jsf.pazpar2;\r
2 \r
3 import java.io.ByteArrayOutputStream;\r
4 import java.io.IOException;\r
5 \r
6 import org.apache.log4j.Logger;\r
7 \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
12 \r
13 public class CommandThread extends Thread {\r
14 \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
20   \r
21   public CommandThread (Pazpar2Command command, Pazpar2Client client) {\r
22     this.command = command;\r
23     this.client = client;\r
24   }\r
25   \r
26   /**\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
29    * getResponse().\r
30    * \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
34    *  \r
35    */\r
36   public void run() {\r
37     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
38     if (command.getName().equals("search")) {\r
39       client.setSearchCommand(clientCommand);\r
40     }\r
41     try {\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
53     }\r
54   }\r
55   \r
56   /**\r
57    * \r
58    * @return Pazpar2 response as an XML string, possibly a generated error XML\r
59    */\r
60   public String getResponse () {\r
61     return response.toString();\r
62   }\r
63     \r
64   public Pazpar2Command getCommand() {\r
65     return command;\r
66   }\r
67 \r
68 }\r