Adds support for pazpar2 info command
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / data / ResponseParser.java
index 29a5fb7..8036a29 100644 (file)
@@ -18,6 +18,17 @@ import org.xml.sax.SAXException;
 import org.xml.sax.XMLReader;\r
 import org.xml.sax.helpers.DefaultHandler;\r
 \r
+import com.indexdata.mkjsf.pazpar2.ClientCommandResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.AuthResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.CategoriesResponse;\r
+import com.indexdata.mkjsf.pazpar2.data.sp.TargetCategory;\r
+\r
+/**\r
+ * Parses the XML stored in ClientCommandResponses and builds ResponseDataObjects from it.\r
+ *  \r
+ * @author Niels Erik\r
+ *\r
+ */\r
 public class ResponseParser extends DefaultHandler {\r
 \r
   private XMLReader xmlReader = null;\r
@@ -27,8 +38,8 @@ public class ResponseParser extends DefaultHandler {
   private String xml = null;\r
   private static Logger logger = Logger.getLogger(ResponseParser.class);\r
 \r
-  public static List<String> docTypes = Arrays.asList(  "bytarget","termlist","show","stat","record","search","init",\r
-                                        /* SP extras */ "response" );                                        \r
+  public static List<String> docTypes = Arrays.asList(  "bytarget","termlist","show","stat","record","search","init","info",\r
+                                        /* SP extras */ "auth", "categories" );                                        \r
   \r
   public ResponseParser() {\r
     try {\r
@@ -61,10 +72,10 @@ public class ResponseParser extends DefaultHandler {
    * @param response XML response string from Pazpar2\r
    * @return Response data object\r
    */\r
-  public ResponseDataObject getDataObject (String response) {\r
-    this.xml = response;\r
+  public ResponseDataObject getDataObject (ClientCommandResponse response) {\r
+    this.xml = response.getResponseString();\r
     try {      \r
-      xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8"))));\r
+      xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getResponseToParse())));\r
     } catch (UnsupportedEncodingException e) {\r
       e.printStackTrace(); \r
     } catch (IOException e) {\r
@@ -94,7 +105,7 @@ public class ResponseParser extends DefaultHandler {
     } else if (localName.equals("record")) {\r
       currentElement = new RecordResponse();            \r
     } else if (localName.equals("bytarget")) {\r
-      currentElement = new ByTarget();      \r
+      currentElement = new ByTargetResponse();      \r
     } else if (localName.equals("target")) {\r
       currentElement = new Target();\r
     } else if (localName.equals("stat")) {\r
@@ -112,12 +123,22 @@ public class ResponseParser extends DefaultHandler {
         currentElement = new TermResponse();\r
       }\r
       ((TermListResponse)dataElements.peek()).addTerm((TermResponse)currentElement);\r
+    } else if (localName.equals("info")) {\r
+      currentElement = new InfoResponse();\r
+    } else if (localName.equals("version") && dataElements.peek().getType().equals("info")) {\r
+      currentElement = new Pazpar2VersionResponse();\r
     } else if (localName.equals("applicationerror")) {\r
       currentElement = new CommandError();\r
     } else if (localName.equals("error") && dataElements.peek().getType().equals("applicationerror")) {\r
-      currentElement = new Pazpar2Error(); \r
-    } else if (localName.equals("response")) {  // Note, document element not named 'auth'\r
+      currentElement = new ServiceError(); \r
+    // Service Proxy extras  \r
+    } else if (localName.equals("auth")) {  \r
       currentElement = new AuthResponse();\r
+    } else if (localName.equals("categories")) {\r
+      currentElement = new CategoriesResponse();\r
+    } else if (localName.equals("category") && dataElements.peek().getType().equals("categories")) {\r
+      currentElement = new TargetCategory();\r
+    // Catch all\r
     } else {\r
       currentElement = new ResponseDataObject();\r
     }\r