80d9ce39e941659847795f3ee731b8805f6baa81
[mkjsf-moved-to-github.git] / src / main / java / com / indexdata / mkjsf / pazpar2 / data / Responses.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 import com.indexdata.mkjsf.utils.Utils;\r
17 \r
18 @Named("pzresp") @SessionScoped\r
19 public class Responses implements Serializable {\r
20     \r
21   private static final long serialVersionUID = -7543231258346154642L;\r
22   protected Map<String,ResponseDataObject> dataObjects = new ConcurrentHashMap<String,ResponseDataObject>();\r
23   private static Logger logger = Logger.getLogger(Responses.class);\r
24   private ErrorHelper errorHelper = null;\r
25 \r
26   public Responses() {    \r
27   }\r
28   \r
29   public void put(String name, ResponseDataObject responseData) {\r
30     dataObjects.put(name, responseData);\r
31   }\r
32   \r
33   public void setErrorHelper(ErrorHelper helper) {    \r
34     this.errorHelper = helper;\r
35   }\r
36   \r
37   public boolean hasApplicationError () {\r
38     if (getSearch().hasApplicationError()) {\r
39       logger.info("Error detected in search");\r
40       return true;\r
41     }\r
42     for (String name : dataObjects.keySet()) {\r
43       if (dataObjects.get(name).hasApplicationError()) {\r
44         logger.info("Error detected in " + name);\r
45         return true;\r
46       }\r
47     }    \r
48     return false;\r
49   }\r
50   \r
51   /**\r
52    * Returns a search command error, if any, otherwise the first\r
53    * error found for an arbitrary command, if any, otherwise\r
54    * an empty dummy error. \r
55    */    \r
56   public ErrorInterface getCommandError() {\r
57     CommandError error = new CommandError();\r
58     if (dataObjects.get("search").hasApplicationError()) {\r
59       error = dataObjects.get("search").getApplicationError();\r
60       error.setErrorHelper(errorHelper);\r
61     } else {\r
62       for (String name : dataObjects.keySet()) {     \r
63         if (dataObjects.get(name).hasApplicationError()) {     \r
64           error = dataObjects.get(name).getApplicationError();\r
65           error.setErrorHelper(errorHelper);\r
66           break;\r
67         } \r
68       }\r
69     }\r
70     return error;         \r
71   }\r
72   \r
73   public void resetSearchResponses() {\r
74     logger.debug("Resetting show,stat,termlist,bytarget,record,search response objects.");\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 void resetAllSessionData () {\r
84     logger.debug("Resetting all response objects");\r
85     dataObjects = new ConcurrentHashMap<String,ResponseDataObject>();    \r
86     resetSearchResponses();\r
87     dataObjects.put("init", new InitResponse());\r
88   }\r
89   \r
90   public InitResponse getInit () {\r
91     logger.info("Request to show init response from " + Utils.objectId(this));\r
92     return ((InitResponse) dataObjects.get("init"));\r
93   }\r
94 \r
95   public ShowResponse getShow () {\r
96     return ((ShowResponse) dataObjects.get("show"));\r
97   }\r
98   \r
99   public StatResponse getStat () {\r
100     return ((StatResponse) dataObjects.get("stat"));\r
101   }\r
102   \r
103   public RecordResponse getRecord() {\r
104     return ((RecordResponse) dataObjects.get("record"));\r
105   }\r
106   \r
107   public SearchResponse getSearch() {\r
108     return ((SearchResponse) dataObjects.get("search"));\r
109   }\r
110   \r
111   public TermListsResponse getTermLists () {\r
112     return ((TermListsResponse) dataObjects.get("termlist"));\r
113   }\r
114   \r
115   public List<TermResponse> getFacetTerms (String facet, int count) {\r
116     return (getTermLists().getTermList(facet).getTerms(count));\r
117   }\r
118     \r
119   public List<TermResponse> getFacetTerms (String facet) {\r
120     return (getTermLists().getTermList(facet).getTerms());\r
121   }\r
122   \r
123   public ByTarget getByTarget() {\r
124     return ((ByTarget) dataObjects.get("bytarget"));\r
125   }\r
126 \r
127   public ResponseDataObject getResponseObject (String name) {\r
128     return dataObjects.get(name);\r
129   }\r
130   \r
131   public boolean hasRecords () {\r
132     return getStat().getRecords() > 0            \r
133            && getShow().getHits() != null \r
134            && getShow().getHits().size()>0;\r
135   }\r
136   \r
137   public String getActiveClients() {    \r
138     if (getShow()!=null) {\r
139       logger.debug("Active clients: "+getShow().getActiveClients());\r
140       return getShow().getActiveClients();\r
141     } else {\r
142       return "";\r
143     }\r
144   }\r
145 \r
146   public SpResponses getSp() {\r
147     // TODO:\r
148     return null;\r
149   }\r
150 \r
151 }\r