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
private String xml = null;\r
private static Logger logger = Logger.getLogger(ResponseParser.class);\r
\r
- public static final List<String> docTypes = \r
- Arrays.asList("bytarget","termlist","show","stat","record","search","init");\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
+ public ResponseParser() {\r
try {\r
initSax();\r
} catch (ParserConfigurationException e) {\r
* @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
- // 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
}\r
return result;\r
} 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
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("error") && (!dataElements.isEmpty() && dataElements.peek().getType().equals("applicationerror"))) {\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