1 package com.indexdata.mkjsf.pazpar2.data;
\r
3 import java.io.Serializable;
\r
4 import java.util.ArrayList;
\r
5 import java.util.HashMap;
\r
6 import java.util.List;
\r
8 import org.apache.log4j.Logger;
\r
10 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;
\r
12 public class ResponseDataObject implements Serializable {
\r
14 Logger logger = Logger.getLogger(ResponseDataObject.class);
\r
15 private static final long serialVersionUID = -3909755656714679959L;
\r
17 HashMap<String,String> attributes = new HashMap<String,String>();
\r
18 HashMap<String,List<ResponseDataObject>> elements = new HashMap<String,List<ResponseDataObject>>();
\r
19 String textContent = "";
\r
20 CommandError error = null;
\r
22 boolean isBinary = false;
\r
23 byte[] binary = null;
\r
25 public void setType (String type) {
\r
29 public String getType () {
\r
33 public void setAttribute (String name, String value) {
\r
34 attributes.put(name, value);
\r
37 public String getAttribute (String name) {
\r
38 return attributes.get(name);
\r
41 public void addElement (String name, ResponseDataObject value) {
\r
42 if (elements.containsKey(name)) {
\r
43 elements.get(name).add(value);
\r
45 List<ResponseDataObject> list = new ArrayList<ResponseDataObject>();
\r
47 elements.put(name,list);
\r
51 public List<ResponseDataObject> getElements (String name) {
\r
52 return elements.get(name);
\r
55 public List<ResponseDataObject> getElements(String name, int maxElements) {
\r
56 if (getElements(name)!=null) {
\r
57 int size = getElements(name).size();
\r
59 return ((ArrayList<ResponseDataObject>) getElements(name)).subList(0, Math.min(maxElements,size));
\r
62 return getElements(name);
\r
65 public List<ResponseDataObject> getElements(String name, int maxElements, int maxTotalValueLength) {
\r
66 if (getElements(name)!=null) {
\r
67 int size = getElements(name).size();
\r
69 List<ResponseDataObject> maxElementsList = ((ArrayList<ResponseDataObject>) getElements(name)).subList(0, Math.min(maxElements,size));
\r
71 int totalLength = 0;
\r
72 for (ResponseDataObject element : maxElementsList) {
\r
73 totalLength += element.getValue().length();
\r
75 if (totalLength>maxTotalValueLength) {
\r
79 return maxElementsList.subList(0, i);
\r
82 return getElements(name);
\r
86 public ResponseDataObject getOneElement (String name) {
\r
87 if (elements.get(name) != null) {
\r
88 return elements.get(name).get(0);
\r
95 * Returns the text content of the first element found with the given
\r
97 * @param name of the element
\r
98 * @return text value, empty string if none found
\r
100 public String getOneValue (String name) {
\r
101 if (getOneElement(name)!=null && getOneElement(name).getValue().length()>0) {
\r
102 return getOneElement(name).getValue();
\r
108 public String[] getValueArray (String name) {
\r
109 List<ResponseDataObject> elements = getElements(name);
\r
110 String[] valueArray = {};
\r
111 if (elements != null) {
\r
112 valueArray = new String[elements.size()];
\r
114 for (ResponseDataObject element : elements) {
\r
115 valueArray[i++] = element.getValue();
\r
121 public void appendContent (String content) {
\r
122 textContent = textContent + content;
\r
125 public String getValue () {
\r
126 return textContent;
\r
129 public String getProperty(String name) {
\r
130 List<ResponseDataObject> els = elements.get(name);
\r
132 return els.get(0).getValue();
\r
138 public int getIntValue(String name) {
\r
139 String val = getOneValue(name);
\r
140 if (val.length()==0) {
\r
143 return Integer.parseInt(val);
\r
147 public boolean hasApplicationError () {
\r
148 return (getOneElement("applicationerror") != null);
\r
151 public CommandError getApplicationError() {
\r
152 return (CommandError) getOneElement("applicationerror");
\r
155 public boolean hasServiceError() {
\r
156 return hasApplicationError()
\r
157 && getApplicationError().isServiceError();
\r
160 public ServiceError getServiceError() {
\r
161 return (hasServiceError()? getApplicationError().getServiceError() : null);
\r
164 public void setXml(String xml) {
\r
168 public String getXml() {
\r
169 if (type != null && type.equals("record")) {
\r
170 logger.debug("Getting XML for "+type + ": "+xml);
\r
172 return xml == null ? "" : xml;
\r
175 public boolean getHasResults () {
\r
176 return (xml != null && xml.length()>0) || (getIsBinary() && binary.length>0);
\r
179 public boolean getIsBinary () {
\r
183 public void setBinary(byte[] bytes) {
\r
188 public byte[] getBinary () {
\r