Packaging pazpar2/io error messages in response objects
[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.pz2utils4jsf.pazpar2.CommandThread;\r
9 import com.indexdata.pz2utils4jsf.pazpar2.Pazpar2Command;\r
10 import com.indexdata.utils.XmlUtils;\r
11 import com.indexdata.masterkey.pazpar2.client.ClientCommand;\r
12 import com.indexdata.masterkey.pazpar2.client.Pazpar2Client;\r
13 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
14 \r
15 public class CommandThread extends Thread {\r
16 \r
17   private static Logger logger = Logger.getLogger(CommandThread.class);\r
18   Pazpar2Command command;\r
19   Pazpar2Client client;\r
20   private ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
21   private StringBuilder response = new StringBuilder("");\r
22   \r
23   public CommandThread (Pazpar2Command command, Pazpar2Client client) {\r
24     this.command = command;\r
25     this.client = client;\r
26   }\r
27   \r
28   public void run() {\r
29     ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
30     if (command.getName().equals("search")) {\r
31       client.setSearchCommand(clientCommand);\r
32     }\r
33     try {\r
34       long start = System.currentTimeMillis();\r
35       client.executeCommand(clientCommand, baos);\r
36       response.append(baos.toString("UTF-8"));\r
37       long end = System.currentTimeMillis();      \r
38       logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );\r
39     } catch (IOException e) {\r
40       logger.error("Message: " + e.getMessage());      \r
41       response = new StringBuilder("<"+command.getName()+"><error exception=\"io\">"+XmlUtils.escape(e.getMessage())+"</error></"+command.getName()+">");\r
42       logger.error(response.toString());\r
43     } catch (Pazpar2ErrorException e) {\r
44       logger.error(e.getMessage());\r
45       response = new StringBuilder("<"+command.getName()+"><error exception=\"pazpar2error\">"+XmlUtils.escape(e.getMessage())+"</error></"+command.getName()+">");      \r
46       logger.error(response.toString());\r
47     }\r
48   }\r
49   \r
50   public String getResponse () {\r
51     return response.toString();\r
52   }\r
53   \r
54   public Pazpar2Command getCommand() {\r
55     return command;\r
56   }\r
57 \r
58 }\r