More work on commands, statemgmt, EL references
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / CommandThread.java
index 50ec2b6..323ef78 100644 (file)
@@ -5,20 +5,19 @@ import java.io.IOException;
 \r
 import org.apache.log4j.Logger;\r
 \r
-import com.indexdata.masterkey.pazpar2.client.ClientCommand;\r
-import com.indexdata.masterkey.pazpar2.client.Pazpar2Client;\r
 import com.indexdata.masterkey.pazpar2.client.exceptions.Pazpar2ErrorException;\r
-import com.indexdata.pz2utils4jsf.pazpar2.data.ApplicationError;\r
+import com.indexdata.pz2utils4jsf.pazpar2.commands.Pazpar2Command;\r
+import com.indexdata.pz2utils4jsf.pazpar2.data.CommandError;\r
 \r
 public class CommandThread extends Thread {\r
 \r
   private static Logger logger = Logger.getLogger(CommandThread.class);\r
   Pazpar2Command command;\r
-  Pazpar2Client client;\r
+  SearchClient client;\r
   private ByteArrayOutputStream baos = new ByteArrayOutputStream();\r
-  private StringBuilder response = new StringBuilder("");\r
+  private StringBuilder response = new StringBuilder("");  \r
   \r
-  public CommandThread (Pazpar2Command command, Pazpar2Client client) {\r
+  public CommandThread (Pazpar2Command command, SearchClient client) {\r
     this.command = command;\r
     this.client = client;\r
   }\r
@@ -34,22 +33,34 @@ public class CommandThread extends Thread {
    *  \r
    */\r
   public void run() {\r
-    ClientCommand clientCommand = new ClientCommand(command.getName(), command.getEncodedQueryString());\r
+    \r
     if (command.getName().equals("search")) {\r
-      client.setSearchCommand(clientCommand);\r
+      client.setSearchCommand(command);\r
     }\r
     try {\r
       long start = System.currentTimeMillis();\r
-      client.executeCommand(clientCommand, baos);\r
-      response.append(baos.toString("UTF-8"));\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(ApplicationError.createErrorXml(command.getName(), "io", e.getMessage())); \r
+      response.append(CommandError.createErrorXml(command.getName(), "io", e.getMessage())); \r
       logger.error(response.toString());\r
     } catch (Pazpar2ErrorException e) {\r
-      response.append(ApplicationError.createErrorXml(command.getName(), "pazpar2error", e.getMessage())); \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
   }\r
   \r