Merge branch 'master' of ssh://git.indexdata.com/home/git/private/mkjsf.git into...
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / data / ResponseDataObject.java
diff --git a/src/main/java/com/indexdata/mkjsf/pazpar2/data/ResponseDataObject.java b/src/main/java/com/indexdata/mkjsf/pazpar2/data/ResponseDataObject.java
new file mode 100644 (file)
index 0000000..5e2d639
--- /dev/null
@@ -0,0 +1,181 @@
+package com.indexdata.mkjsf.pazpar2.data;\r
+\r
+import java.io.Serializable;\r
+import java.util.ArrayList;\r
+import java.util.HashMap;\r
+import java.util.List;\r
+\r
+import org.apache.log4j.Logger;\r
+\r
+import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
+\r
+/**\r
+ * Parent class of all response data objects, with generic methods for retrieving data elements\r
+ * \r
+ * @author Niels Erik\r
+ *\r
+ */\r
+public class ResponseDataObject implements Serializable {\r
+\r
+  Logger logger = Logger.getLogger(ResponseDataObject.class);\r
+  private static final long serialVersionUID = -3909755656714679959L;\r
+  String type = null;\r
+  HashMap<String,String> attributes = new HashMap<String,String>();\r
+  HashMap<String,List<ResponseDataObject>> elements = new HashMap<String,List<ResponseDataObject>>();\r
+  String textContent = "";\r
+  CommandError error = null;\r
+  String xml = null;\r
+  boolean isBinary = false;\r
+  byte[] binary = null;\r
+        \r
+  public void setType (String type) {\r
+    this.type = type;\r
+  }\r
+  \r
+  public String getType () {\r
+    return type;\r
+  }\r
+  \r
+  public void setAttribute (String name, String value) {\r
+    attributes.put(name, value);\r
+  }\r
+  \r
+  public String getAttribute (String name) {\r
+    return attributes.get(name);\r
+  }\r
+    \r
+  /**\r
+   * Used by the response XML parser to add child element objects to a parent element object\r
+   * \r
+   * @param name of the child element\r
+   * @param value the child object itself\r
+   */\r
+  public void addElement (String name, ResponseDataObject value) {    \r
+    if (elements.containsKey(name)) {\r
+      elements.get(name).add(value);\r
+    } else {\r
+      List<ResponseDataObject> list = new ArrayList<ResponseDataObject>();\r
+      list.add(value);      \r
+      elements.put(name,list);\r
+    }\r
+  }\r
+  \r
+  public List<ResponseDataObject> getElements (String name) {\r
+    return elements.get(name);\r
+  }\r
+    \r
+  public ResponseDataObject getOneElement (String name) {\r
+    if (elements.get(name) != null) {\r
+      return elements.get(name).get(0);\r
+    } else {\r
+      return null;\r
+    }\r
+  }\r
+  \r
+  /**\r
+   * Returns the text content of the first element found with the given\r
+   * name\r
+   * @param name of the element \r
+   * @return text value, empty string if none found\r
+   */\r
+  public String getOneValue (String name) {\r
+    if (getOneElement(name)!=null && getOneElement(name).getValue().length()>0) {\r
+      return getOneElement(name).getValue();\r
+    } else {\r
+      return "";\r
+    }\r
+  }\r
+  \r
+  /**\r
+   * Returns string array with the values of the named element(s)\r
+   *   \r
+   * @param name of the child object(s) to retrieve value(s) from\r
+   * @return\r
+   */\r
+  public String[] getValueArray (String name) {\r
+    List<ResponseDataObject> elements = getElements(name);\r
+    String[] valueArray = {};\r
+    if (elements != null) {\r
+      valueArray = new String[elements.size()];\r
+      int i = 0;\r
+      for (ResponseDataObject element : elements) {\r
+        valueArray[i++] = element.getValue();\r
+      }      \r
+    }\r
+    return valueArray;\r
+  }\r
+    \r
+  public void appendContent (String content) {\r
+    textContent = textContent + content;\r
+  }\r
+  \r
+  public String getValue () {\r
+    return textContent;\r
+  }\r
+  \r
+  public String getProperty(String name) {\r
+    List<ResponseDataObject> els = elements.get(name);\r
+    if (els != null) {\r
+      return els.get(0).getValue();\r
+    } else {     \r
+      return null;\r
+    }\r
+  }\r
+  \r
+  public int getIntValue(String name) {\r
+    String val = getOneValue(name);\r
+    if (val.length()==0) {\r
+      return 0;\r
+    } else {\r
+      return Integer.parseInt(val);\r
+    }\r
+  }\r
+    \r
+  public boolean hasApplicationError () {\r
+    return (getOneElement("applicationerror") != null);   \r
+  }\r
+  \r
+  public CommandError getApplicationError() {\r
+    return (CommandError) getOneElement("applicationerror");\r
+  }\r
+  \r
+  public boolean hasServiceError() {\r
+    return hasApplicationError() \r
+        && getApplicationError().isServiceError();        \r
+  }\r
+  \r
+  public ServiceError getServiceError() {\r
+    return (hasServiceError()? getApplicationError().getServiceError() : null);\r
+  }\r
+      \r
+  public void setXml(String xml) {\r
+    this.xml = xml; \r
+  }\r
+  \r
+  public String getXml() {\r
+    if (type != null && type.equals("record")) {\r
+      logger.debug("Getting XML for "+type + ": "+xml);\r
+    }      \r
+    return xml == null ? "" : xml;\r
+  }\r
+  \r
+  public boolean getHasResults () {\r
+    return (xml != null && xml.length()>0) || (getIsBinary() && binary.length>0);\r
+  }\r
+  \r
+  public boolean getIsBinary () {\r
+    return isBinary;\r
+  }\r
+    \r
+  public void setBinary(byte[] bytes) {\r
+    isBinary = true;\r
+    binary = bytes;\r
+  }\r
+  \r
+  public byte[] getBinary () {\r
+    return binary;\r
+  }\r
+  \r
+  \r
+        \r
+}\r