package com.indexdata.mkjsf.pazpar2;\r
\r
-import java.io.ByteArrayOutputStream;\r
-import java.io.IOException;\r
-\r
import org.apache.log4j.Logger;\r
\r
-import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
import com.indexdata.mkjsf.pazpar2.commands.Pazpar2Command;\r
-import com.indexdata.mkjsf.pazpar2.data.CommandError;\r
+import com.indexdata.mkjsf.pazpar2.data.Responses;\r
\r
+/**\r
+ * Helper class for running multiple concurrent Pazpar2 commands. Basically \r
+ * used for updating display data (show,stat,bytarget,termlist) together.\r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
public class CommandThread extends Thread {\r
\r
private static Logger logger = Logger.getLogger(CommandThread.class);\r
Pazpar2Command command;\r
SearchClient client;\r
- private ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
- private StringBuilder response = new StringBuilder(""); \r
+ Responses pzresp;\r
+ HttpResponseWrapper commandResponse = null; \r
\r
- public CommandThread (Pazpar2Command command, SearchClient client) {\r
+ public CommandThread (Pazpar2Command command, SearchClient client, Responses pzresp) {\r
this.command = command;\r
this.client = client;\r
+ this.pzresp = pzresp;\r
}\r
\r
/**\r
- * Runs the specified command using the specified Pazpar2 client\r
- * Sets the Pazpar2 response as an XML response string to be retrieved by\r
- * getResponse().\r
- * \r
- * In case of an exception, an error response is generated, the document\r
- * element being the same as it would have been if successful (named after\r
- * the command, that is). \r
- * \r
+ * Executes the specified command using the specified Pazpar2 client\r
*/\r
- public void run() {\r
- \r
- if (command.getName().equals("search")) {\r
- client.setSearchCommand(command);\r
- }\r
- try {\r
- long start = System.currentTimeMillis();\r
- CommandResponse commandResponse = client.executeCommand(command, baos);\r
- if (commandResponse.getStatusCode()==200) {\r
- response.append(commandResponse.getResponseString()); \r
- } else if (commandResponse.getStatusCode()==417) { \r
- logger.error("Pazpar2 status code 417: " + baos.toString("UTF-8"));\r
- response.append(CommandError.insertPazpar2ErrorXml(command.getName(), "Expectation failed (417)", commandResponse.getResponseString())); \r
- } else {\r
- String resp = baos.toString("UTF-8");\r
- logger.error("Pazpar2 status code was " + commandResponse.getStatusCode() + ": " + resp);\r
- throw new Pazpar2ErrorException(resp,commandResponse.getStatusCode(),resp,null);\r
- } \r
- long end = System.currentTimeMillis(); \r
- logger.debug("Executed " + command.getName() + " in " + (end-start) + " ms." );\r
- } catch (IOException e) {\r
- response.append(CommandError.createErrorXml(command.getName(), "io", e.getMessage())); \r
- logger.error(response.toString());\r
- } catch (Pazpar2ErrorException e) {\r
- response.append(CommandError.createErrorXml(command.getName(), "pazpar2error", e.getMessage())); \r
- logger.error(response.toString());\r
- } catch (Exception e) {\r
- response.append(CommandError.createErrorXml(command.getName(), "general", e.getMessage())); \r
- logger.error(response.toString()); \r
- }\r
+ public void run() { \r
+ logger.debug(command.getCommandName() + " executing asynchronously");\r
+ command.run(client,pzresp);\r
}\r
\r
/**\r
* \r
* @return Pazpar2 response as an XML string, possibly a generated error XML\r
*/\r
- public String getResponse () {\r
- return response.toString();\r
+ public HttpResponseWrapper getCommandResponse () {\r
+ return commandResponse;\r
}\r
\r
public Pazpar2Command getCommand() {\r