Adds convenience methods for UI pages
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / data / ResponseDataObject.java
1 package com.indexdata.mkjsf.pazpar2.data;\r
2 \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
7 \r
8 import org.apache.log4j.Logger;\r
9 \r
10 import com.indexdata.mkjsf.pazpar2.data.ResponseDataObject;\r
11 \r
12 public class ResponseDataObject implements Serializable {\r
13 \r
14   Logger logger = Logger.getLogger(ResponseDataObject.class);\r
15   private static final long serialVersionUID = -3909755656714679959L;\r
16   String type = null;\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
21   String xml = null;\r
22   boolean isBinary = false;\r
23   byte[] binary = null;\r
24         \r
25   public void setType (String type) {\r
26     this.type = type;\r
27   }\r
28   \r
29   public String getType () {\r
30     return type;\r
31   }\r
32   \r
33   public void setAttribute (String name, String value) {\r
34     attributes.put(name, value);\r
35   }\r
36   \r
37   public String getAttribute (String name) {\r
38     return attributes.get(name);\r
39   }\r
40     \r
41   public void addElement (String name, ResponseDataObject value) {    \r
42     if (elements.containsKey(name)) {\r
43       elements.get(name).add(value);\r
44     } else {\r
45       List<ResponseDataObject> list = new ArrayList<ResponseDataObject>();\r
46       list.add(value);      \r
47       elements.put(name,list);\r
48     }\r
49   }\r
50   \r
51   public List<ResponseDataObject> getElements (String name) {\r
52     return elements.get(name);\r
53   }\r
54   \r
55   public List<ResponseDataObject> getElements(String name, int maxElements) {\r
56     if (getElements(name)!=null) {\r
57       int size = getElements(name).size();\r
58       if (size>0) {\r
59         return ((ArrayList<ResponseDataObject>) getElements(name)).subList(0, Math.min(maxElements,size));        \r
60       } \r
61     }   \r
62     return getElements(name);\r
63   }\r
64   \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
68       if (size>0) {\r
69         List<ResponseDataObject> maxElementsList = ((ArrayList<ResponseDataObject>) getElements(name)).subList(0, Math.min(maxElements,size));\r
70         int i = 0;\r
71         int totalLength = 0;\r
72         for (ResponseDataObject element : maxElementsList) {\r
73           totalLength += element.getValue().length(); \r
74           i++;\r
75           if (totalLength>maxTotalValueLength) {\r
76             break;\r
77           } \r
78         }\r
79         return maxElementsList.subList(0, i);\r
80       } \r
81     }   \r
82     return getElements(name);\r
83   }\r
84 \r
85   \r
86   public ResponseDataObject getOneElement (String name) {\r
87     if (elements.get(name) != null) {\r
88       return elements.get(name).get(0);\r
89     } else {\r
90       return null;\r
91     }\r
92   }\r
93   \r
94   /**\r
95    * Returns the text content of the first element found with the given\r
96    * name\r
97    * @param name of the element \r
98    * @return text value, empty string if none found\r
99    */\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
103     } else {\r
104       return "";\r
105     }\r
106   }\r
107   \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
113       int i = 0;\r
114       for (ResponseDataObject element : elements) {\r
115         valueArray[i++] = element.getValue();\r
116       }      \r
117     }\r
118     return valueArray;\r
119   }\r
120     \r
121   public void appendContent (String content) {\r
122     textContent = textContent + content;\r
123   }\r
124   \r
125   public String getValue () {\r
126     return textContent;\r
127   }\r
128   \r
129   public String getProperty(String name) {\r
130     List<ResponseDataObject> els = elements.get(name);\r
131     if (els != null) {\r
132       return els.get(0).getValue();\r
133     } else {     \r
134       return null;\r
135     }\r
136   }\r
137   \r
138   public int getIntValue(String name) {\r
139     String val = getOneValue(name);\r
140     if (val.length()==0) {\r
141       return 0;\r
142     } else {\r
143       return Integer.parseInt(val);\r
144     }\r
145   }\r
146     \r
147   public boolean hasApplicationError () {\r
148     return (getOneElement("applicationerror") != null);   \r
149   }\r
150   \r
151   public CommandError getApplicationError() {\r
152     return (CommandError) getOneElement("applicationerror");\r
153   }\r
154   \r
155   public boolean hasServiceError() {\r
156     return hasApplicationError() \r
157         && getApplicationError().isServiceError();        \r
158   }\r
159   \r
160   public ServiceError getServiceError() {\r
161     return (hasServiceError()? getApplicationError().getServiceError() : null);\r
162   }\r
163       \r
164   public void setXml(String xml) {\r
165     this.xml = xml; \r
166   }\r
167   \r
168   public String getXml() {\r
169     if (type != null && type.equals("record")) {\r
170       logger.debug("Getting XML for "+type + ": "+xml);\r
171     }      \r
172     return xml == null ? "" : xml;\r
173   }\r
174   \r
175   public boolean getHasResults () {\r
176     return (xml != null && xml.length()>0) || (getIsBinary() && binary.length>0);\r
177   }\r
178   \r
179   public boolean getIsBinary () {\r
180     return isBinary;\r
181   }\r
182     \r
183   public void setBinary(byte[] bytes) {\r
184     isBinary = true;\r
185     binary = bytes;\r
186   }\r
187   \r
188   public byte[] getBinary () {\r
189     return binary;\r
190   }\r
191   \r
192   \r
193         \r
194 }\r