1 package org.marketchangers.prayer.portlet;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.Hashtable;
6 import java.util.Iterator;
7 import java.util.Map;
8
9 import javax.portlet.ActionRequest;
10 import javax.portlet.ActionResponse;
11 import javax.portlet.Portlet;
12 import javax.portlet.PortletConfig;
13 import javax.portlet.PortletContext;
14 import javax.portlet.PortletException;
15 import javax.portlet.PortletRequest;
16 import javax.portlet.PortletRequestDispatcher;
17 import javax.portlet.RenderRequest;
18 import javax.portlet.RenderResponse;
19
20 import org.marketchangers.Environment;
21 import org.marketchangers.PortalUserManager;
22 import org.marketchangers.ServiceLocator;
23 import org.marketchangers.prayer.PrayerComment;
24 import org.marketchangers.prayer.PrayerRequest;
25 import org.marketchangers.prayer.PrayerRequestManager;
26 import org.marketchangers.prayer.PrayerRequestQuery;
27
28 /***
29 * @author <a href="mailto:ypak@wc-group.com">Yong Pak</a>
30 * @author <a href="mailto:mtodd@wc-group.com">Matthew Todd</a>
31 * @author <a href="mailto:jniu@wc-group.com">Jianshuo Niu</a>
32 */
33 public class PrayerRequestSearchPortlet implements Portlet {
34 private static final Integer NO_INTEGER = new Integer(Integer.MIN_VALUE);
35 private PortletContext context;
36
37
38 public void init(PortletConfig config) throws PortletException {
39 this.context = config.getPortletContext();
40 }
41
42 public void processAction(ActionRequest request, ActionResponse response)
43 throws PortletException, IOException {
44 if (getString(request, "userAction").equals("addComment")) {
45 addComment(request, response);
46 } else {
47 doSearch(request, response);
48 }
49 }
50
51 public void render(RenderRequest request, RenderResponse response)
52 throws PortletException, IOException {
53 if (getInteger(request, "prayerId").equals(NO_INTEGER)) {
54 if (getString(request, "userAction").equals("report")) {
55 renderReport(request, response);
56 } else {
57 renderSearchBoxAndList(request, response);
58 }
59 } else {
60 renderSingleRequest(request, response);
61 }
62 }
63
64 public void destroy() {
65 }
66
67
68 private void addComment(ActionRequest request, ActionResponse response) {
69 Integer prayerId = getInteger(request, "prayerId");
70
71 if (!prayerId.equals(NO_INTEGER)) {
72 PrayerRequestManager manager = getPrayerRequestManager();
73 String user = request.getRemoteUser();
74
75 PrayerComment comment = new PrayerComment();
76 comment.setAuthorUserId(user);
77 comment.setContent(getString(request, "comment"));
78 comment.setParentRequest(
79 manager.getPrayerRequestById(user, prayerId));
80 comment.setPostDate(getEnvironment().getCurrentDate());
81 if(comment.getContent()==null ||comment.getContent().trim().equalsIgnoreCase("")){
82 response.setRenderParameter("hasComments","false");
83 }else{
84 response.setRenderParameter("hasComments","true");
85 manager.addComment(comment);
86 }
87
88 response.setRenderParameter("prayerId", prayerId.toString());
89 }
90 }
91
92 private void copySessionAttributeToRequest(String key, PortletRequest r) {
93 r.setAttribute(key, r.getPortletSession().getAttribute(key));
94 }
95
96 private void doSearch(ActionRequest request, ActionResponse response) {
97 PrayerRequestManager manager = getPrayerRequestManager();
98 String user = request.getRemoteUser();
99
100 PrayerRequestQuery query =
101 new PrayerRequestQuery(request.getParameterMap());
102 if(query.hasValidDate()){
103
104 request.getPortletSession().setAttribute(
105 "prayerRequests",
106 manager.search(user, query));
107 response.setRenderParameter("validSearch","true");
108 }else{
109 response.setRenderParameter("validSearch","false");
110 request.getPortletSession().setAttribute(
111 "prayerRequests",
112 new ArrayList());
113 }
114 }
115
116 private Map getCommentAuthors(Integer id, PrayerRequestManager manager) {
117 Map results = new Hashtable();
118
119 Iterator comments = manager.getCommentsByPrayerId(id).iterator();
120 while (comments.hasNext()) {
121 String userId = ((PrayerComment) comments.next()).getAuthorUserId();
122 results.put(userId, getUserManager().lookupUserById(userId));
123 }
124
125 return results;
126 }
127
128 private Environment getEnvironment() {
129 return (Environment) getServiceLocator().get(Environment.class);
130 }
131
132 private Integer getInteger(PortletRequest request, String key) {
133 try {
134 return new Integer(String.valueOf(request.getParameter(key)));
135 } catch (NumberFormatException nfe) {
136 return NO_INTEGER;
137 }
138 }
139
140 private PrayerRequestManager getPrayerRequestManager() {
141 return (PrayerRequestManager) getServiceLocator().get(
142 PrayerRequestManager.class);
143 }
144
145 private PortletRequestDispatcher getRequestDispatcher(String path) {
146 return context.getRequestDispatcher(path);
147 }
148
149 private Map getRequestorMap(String user, PrayerRequestManager manager) {
150 Map requestorMap = new Hashtable();
151
152 Iterator requestorUserIds =
153 manager.getRequestorsForIntercessor(user).iterator();
154
155 PortalUserManager userManager = getUserManager();
156
157 while (requestorUserIds.hasNext()) {
158 String userId = (String) requestorUserIds.next();
159 requestorMap.put(userId, userManager.lookupUserById(userId));
160 }
161
162 return requestorMap;
163 }
164
165 private ServiceLocator getServiceLocator() {
166 return (ServiceLocator) context.getAttribute(ServiceLocator.KEY);
167 }
168
169 private String getString(PortletRequest request, String key) {
170 return String.valueOf(request.getParameter(key));
171 }
172
173 private PortalUserManager getUserManager() {
174 return (PortalUserManager) getServiceLocator().get(
175 PortalUserManager.class);
176 }
177
178 private void renderReport(RenderRequest req, RenderResponse res)
179 throws PortletException, IOException {
180
181 PrayerRequestManager manager = getPrayerRequestManager();
182 String user = req.getRemoteUser();
183
184 copySessionAttributeToRequest("prayerRequests", req);
185 req.setAttribute("requestors", getRequestorMap(user, manager));
186 req.setAttribute("userRole", "intercessor");
187
188 getRequestDispatcher("/report.jsp").include(req, res);
189 }
190
191 private void renderSearchBoxAndList(RenderRequest req, RenderResponse res)
192 throws PortletException, IOException {
193
194 PrayerRequestManager manager = getPrayerRequestManager();
195 String user = req.getRemoteUser();
196
197 copySessionAttributeToRequest("prayerRequests", req);
198 req.setAttribute("requestors", getRequestorMap(user, manager));
199 req.setAttribute("userRole", "intercessor");
200
201 getRequestDispatcher("/prayerRequestSearch.jsp").include(req, res);
202 }
203
204 private void renderSingleRequest(RenderRequest req, RenderResponse res)
205 throws PortletException, IOException {
206
207 PrayerRequestManager requestManager = getPrayerRequestManager();
208
209 String user = req.getRemoteUser();
210 Integer prayerRequestId = getInteger(req, "prayerId");
211
212 PrayerRequest prayerRequest =
213 requestManager.getPrayerRequestById(user, prayerRequestId);
214
215 req.setAttribute("prayerRequest", prayerRequest);
216
217 req.setAttribute(
218 "prayerComments",
219 requestManager.getCommentsByPrayerId(prayerRequestId));
220
221 req.setAttribute(
222 "requestor",
223 getUserManager().lookupUserById(
224 prayerRequest.getRequestorUserId()));
225
226 req.setAttribute(
227 "commentAuthors",
228 getCommentAuthors(prayerRequestId, requestManager));
229
230 req.setAttribute("userRole", "intercessor");
231
232 getRequestDispatcher("/singleRequest.jsp").include(req, res);
233 }
234 }