Renames project from pz2utils4jsf to mkjsf
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / pz2utils4jsf / pazpar2 / data / Pazpar2ResponseParser.java
index 40cf412..73f0cf5 100644 (file)
@@ -36,6 +36,7 @@ public class Pazpar2ResponseParser extends DefaultHandler {
   private Pazpar2ResponseData currentElement = null;\r
   private Stack<Pazpar2ResponseData> dataElements = new Stack<Pazpar2ResponseData>();\r
   private Pazpar2ResponseData result = null;\r
+  private String xml = null;\r
 \r
   private static final List<String> docTypes = \r
       Arrays.asList("bytarget","termlist","show","stat","record","search");\r
@@ -72,17 +73,18 @@ public class Pazpar2ResponseParser extends DefaultHandler {
    * @return Response data object\r
    */\r
   public Pazpar2ResponseData getDataObject (String response) {\r
-    try {\r
+    this.xml = response;\r
+    try {      \r
       xmlReader.parse(new InputSource(new ByteArrayInputStream(response.getBytes("UTF-8"))));\r
     } catch (UnsupportedEncodingException e) {\r
       // TODO Auto-generated catch block\r
-      e.printStackTrace();\r
+      e.printStackTrace();      \r
     } catch (IOException e) {\r
       // TODO Auto-generated catch block\r
       e.printStackTrace();\r
     } catch (SAXException e) {\r
       // TODO Auto-generated catch block\r
-      e.printStackTrace();\r
+      e.printStackTrace();      \r
     }\r
     return result;\r
   }\r
@@ -94,19 +96,19 @@ public class Pazpar2ResponseParser extends DefaultHandler {
   @Override\r
   public void startElement(String namespaceURI, String localName, String qName, Attributes atts) throws SAXException {\r
     if (localName.equals("show")) {\r
-      currentElement = new ShowResponse();\r
+      currentElement = new ShowResponse();      \r
     } else if (localName.equals("hit")) {\r
       currentElement = new Hit();\r
     } else if (localName.equals("location")) {\r
       currentElement = new Location();\r
     } else if (localName.equals("bytarget")) {\r
-      currentElement = new ByTarget();\r
+      currentElement = new ByTarget();      \r
     } else if (localName.equals("target")) {\r
       currentElement = new Target();\r
     } else if (localName.equals("stat")) {\r
-      currentElement = new StatResponse();\r
+      currentElement = new StatResponse();      \r
     } else if (localName.equals("termlist")) {\r
-      currentElement = new TermListsResponse();\r
+      currentElement = new TermListsResponse();      \r
     } else if (localName.equals("list")) {\r
       currentElement = new TermListResponse();\r
       ((TermListResponse)currentElement).setName(atts.getValue("name"));\r
@@ -119,11 +121,13 @@ public class Pazpar2ResponseParser extends DefaultHandler {
       }\r
       ((TermListResponse)dataElements.peek()).addTerm((TermResponse)currentElement);\r
     } else if (localName.equals("record")) {\r
-      currentElement = new RecordResponse();\r
+      currentElement = new RecordResponse();      \r
     } else if (localName.equals("search")) {\r
       currentElement = new SearchResponse();\r
     } else if (localName.equals("applicationerror")) {\r
-      currentElement = new ApplicationError();\r
+      currentElement = new CommandError();\r
+    } else if (localName.equals("error") && dataElements.peek().getType().equals("applicationerror")) {\r
+      currentElement = new Pazpar2Error();     \r
     } else {\r
       currentElement = new Pazpar2ResponseData();\r
     }\r
@@ -134,6 +138,10 @@ public class Pazpar2ResponseParser extends DefaultHandler {
     if (!docTypes.contains(localName)) {\r
       dataElements.peek().addElement(localName, currentElement);\r
     }\r
+    if (this.xml != null) { // Store XML for doc level elements\r
+      currentElement.setXml(xml);\r
+      xml = null;\r
+    }\r
     dataElements.push(currentElement);    \r
   }\r
  \r
@@ -151,6 +159,4 @@ public class Pazpar2ResponseParser extends DefaultHandler {
       dataElements.pop();\r
     }\r
   }\r
-\r
-\r
 }\r