Adds init response data object
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / data / Pazpar2Responses.java
1 package com.indexdata.mkjsf.pazpar2.data;\r
2 \r
3 import java.io.Serializable;\r
4 import java.util.List;\r
5 import java.util.Map;\r
6 import java.util.concurrent.ConcurrentHashMap;\r
7 \r
8 import javax.enterprise.context.SessionScoped;\r
9 import javax.inject.Named;\r
10 \r
11 import org.apache.log4j.Logger;\r
12 \r
13 import com.indexdata.mkjsf.errors.ErrorHelper;\r
14 import com.indexdata.mkjsf.errors.ErrorInterface;\r
15 import com.indexdata.mkjsf.pazpar2.data.sp.SpResponses;\r
16 \r
17 @Named("pzresp") @SessionScoped\r
18 public class Pazpar2Responses implements Serializable {\r
19     \r
20   private static final long serialVersionUID = -7543231258346154642L;\r
21   protected Map<String,Pazpar2ResponseData> dataObjects = new ConcurrentHashMap<String,Pazpar2ResponseData>();\r
22   private static Logger logger = Logger.getLogger(Pazpar2Responses.class);\r
23   private ErrorHelper errorHelper = null;\r
24 \r
25   public Pazpar2Responses() {    \r
26   }\r
27   \r
28   public void put(String name, Pazpar2ResponseData responseData) {\r
29     dataObjects.put(name, responseData);\r
30   }\r
31   \r
32   public void setErrorHelper(ErrorHelper helper) {    \r
33     this.errorHelper = helper;\r
34   }\r
35   \r
36   public boolean hasApplicationError () {\r
37     if (getSearch().hasApplicationError()) {\r
38       logger.info("Error detected in search");\r
39       return true;\r
40     }\r
41     for (String name : dataObjects.keySet()) {\r
42       if (dataObjects.get(name).hasApplicationError()) {\r
43         logger.info("Error detected in " + name);\r
44         return true;\r
45       }\r
46     }    \r
47     return false;\r
48   }\r
49   \r
50   /**\r
51    * Returns a search command error, if any, otherwise the first\r
52    * error found for an arbitrary command, if any, otherwise\r
53    * an empty dummy error. \r
54    */    \r
55   public ErrorInterface getCommandError() {\r
56     CommandError error = new CommandError();\r
57     if (dataObjects.get("search").hasApplicationError()) {\r
58       error = dataObjects.get("search").getApplicationError();\r
59       error.setErrorHelper(errorHelper);\r
60     } else {\r
61       for (String name : dataObjects.keySet()) {     \r
62         if (dataObjects.get(name).hasApplicationError()) {     \r
63           error = dataObjects.get(name).getApplicationError();\r
64           error.setErrorHelper(errorHelper);\r
65           break;\r
66         } \r
67       }\r
68     }\r
69     return error;         \r
70   }\r
71   \r
72   public void reset() {\r
73     logger.debug("Resetting show,stat,termlist,bytarget,search response objects.");\r
74     dataObjects = new ConcurrentHashMap<String,Pazpar2ResponseData>();\r
75     dataObjects.put("show", new ShowResponse());\r
76     dataObjects.put("stat", new StatResponse());\r
77     dataObjects.put("termlist", new TermListsResponse());\r
78     dataObjects.put("bytarget", new ByTarget());\r
79     dataObjects.put("record", new RecordResponse());\r
80     dataObjects.put("search", new SearchResponse());\r
81   }\r
82 \r
83   public ShowResponse getShow () {\r
84     return ((ShowResponse) dataObjects.get("show"));\r
85   }\r
86   \r
87   public StatResponse getStat () {\r
88     return ((StatResponse) dataObjects.get("stat"));\r
89   }\r
90   \r
91   public RecordResponse getRecord() {\r
92     return ((RecordResponse) dataObjects.get("record"));\r
93   }\r
94   \r
95   public SearchResponse getSearch() {\r
96     return ((SearchResponse) dataObjects.get("search"));\r
97   }\r
98   \r
99   public TermListsResponse getTermLists () {\r
100     return ((TermListsResponse) dataObjects.get("termlist"));\r
101   }\r
102   \r
103   public List<TermResponse> getFacetTerms (String facet, int count) {\r
104     return (getTermLists().getTermList(facet).getTerms(count));\r
105   }\r
106     \r
107   public List<TermResponse> getFacetTerms (String facet) {\r
108     return (getTermLists().getTermList(facet).getTerms());\r
109   }\r
110   \r
111   public ByTarget getByTarget() {\r
112     return ((ByTarget) dataObjects.get("bytarget"));\r
113   }\r
114 \r
115   public Pazpar2ResponseData getResponseObject (String name) {\r
116     return dataObjects.get(name);\r
117   }\r
118   \r
119   public boolean hasRecords () {\r
120     return getStat().getRecords() > 0            \r
121            && getShow().getHits() != null \r
122            && getShow().getHits().size()>0;\r
123   }\r
124   \r
125   public String getActiveClients() {    \r
126     if (getShow()!=null) {\r
127       logger.debug("Active clients: "+getShow().getActiveClients());\r
128       return getShow().getActiveClients();\r
129     } else {\r
130       return "";\r
131     }\r
132   }\r
133 \r
134   public SpResponses getSp() {\r
135     // TODO:\r
136     return null;\r
137   }\r
138 \r
139 }\r