Renames project from pz2utils4jsf to mkjsf
[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.exceptions.Pazpar2ErrorException;\r
9 import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
10 import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;\r
11 \r
12 public class CommandThread extends Thread {\r
13 \r
14   private static Logger logger = Logger.getLogger(CommandThread.class);\r
15   Pazpar2Command command;\r
16   SearchClient client;\r
17   private ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
18   private StringBuilder response = new StringBuilder("");  \r
19   \r
20   public CommandThread (Pazpar2Command command, SearchClient client) {\r
21     this.command = command;\r
22     this.client = client;\r
23   }\r
24   \r
25   /**\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
28    * getResponse().\r
29    * \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
33    *  \r
34    */\r
35   public void run() {\r
36     \r
37     if (command.getName().equals("search")) {\r
38       client.setSearchCommand(command);\r
39     }\r
40     try {\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
48       } else {\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
52       }       \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
64     }\r
65   }\r
66   \r
67   /**\r
68    * \r
69    * @return Pazpar2 response as an XML string, possibly a generated error XML\r
70    */\r
71   public String getResponse () {\r
72     return response.toString();\r
73   }\r
74     \r
75   public Pazpar2Command getCommand() {\r
76     return command;\r
77   }\r
78 \r
79 }\r