View Javadoc

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  	// ------------------------------------------------------------ Portlet API
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  	// -------------------------------------------------------- Private Methods
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 }