View Javadoc

1   /*
2    * Created on Jul 28, 2004
3    */
4   package org.marketchangers.prayer.portlet;
5   
6   import java.io.IOException;
7   import java.util.Date;
8   import java.util.Hashtable;
9   import java.util.Iterator;
10  import java.util.List;
11  import java.util.Map;
12  
13  import javax.portlet.ActionRequest;
14  import javax.portlet.ActionResponse;
15  import javax.portlet.Portlet;
16  import javax.portlet.PortletConfig;
17  import javax.portlet.PortletContext;
18  import javax.portlet.PortletException;
19  import javax.portlet.PortletRequestDispatcher;
20  import javax.portlet.RenderRequest;
21  import javax.portlet.RenderResponse;
22  
23  import org.marketchangers.ServiceLocator;
24  import org.marketchangers.prayer.DateUtil;
25  import org.marketchangers.prayer.PrayerCategory;
26  import org.marketchangers.prayer.PrayerRequest;
27  import org.marketchangers.prayer.PrayerRequestManager;
28  ;
29  
30  /***
31   * @author jniu
32   * @author jwilliams
33   */
34  public class SubmitRequestPortlet implements Portlet {
35  	private PortletContext context;
36  
37  	public void init(PortletConfig config) throws PortletException {
38  		this.context = config.getPortletContext();
39  	}
40  
41  	public void processAction(ActionRequest request, ActionResponse response)
42  		throws PortletException, IOException {
43  
44  		PrayerRequestManager manager = getPrayerRequestManager();
45  
46  		String startdate = request.getParameter("startdate");
47  		String enddate = request.getParameter("enddate");
48  		String category = request.getParameter("category");
49  		String newcategory = request.getParameter("newcategory");
50  		String background = request.getParameter("background");
51  		String content = request.getParameter("content");
52  		String subject = request.getParameter("subject");
53  		String remoteUser = request.getRemoteUser();
54  
55  		PrayerRequest prayerRequest = new PrayerRequest();
56  		prayerRequest.setRequestorUserId(remoteUser);
57  
58  		Map messages = new Hashtable();
59  		request.setAttribute("messages", messages);
60  
61  		if (startdate != null) {
62  
63  			Date startDate = DateUtil.validateDateField(startdate);
64  			if (startDate == null) {
65  				messages.put("success", "false");
66  				messages.put("DateFormat", "false");
67  				response.setRenderParameters(request.getParameterMap());
68  				return;
69  			}
70  			prayerRequest.setStartDate(startDate);
71  		}
72  
73  		if (enddate != null) {
74  
75  			Date endDate = DateUtil.validateDateField(enddate);
76  			if (endDate == null) {
77  				messages.put("success", "false");
78  				messages.put("DateFormat", "false");
79  				response.setRenderParameters(request.getParameterMap());
80  				return;
81  			}
82  			prayerRequest.setEndDate(endDate);
83  		}
84  
85  		PrayerCategory prayerCategory =
86  			getCategory(category, newcategory, remoteUser, manager);
87  		prayerRequest.setCategory(prayerCategory);
88  
89  		if (background != null) {
90  			prayerRequest.setBackground(background);
91  		}
92  
93  		if ((subject != null) && (subject.length() > 0)) {
94  			prayerRequest.setSubject(subject);
95  		} else {
96  			messages.put("success", "false");
97  			messages.put("subjectValid", "false");
98  			response.setRenderParameters(request.getParameterMap());
99  			return;
100 		}
101 
102 		if ((content != null) && (content.length() > 0)) {
103 			prayerRequest.setContent(content);
104 		} else {
105 			messages.put("success", "false");
106 			messages.put("detailsValid", "false");
107 			response.setRenderParameters(request.getParameterMap());
108 			return;
109 		}
110 
111 		prayerRequest.setStatus(PrayerRequest.OPEN);
112 
113 		manager.submitPrayerRequest(prayerRequest);
114 		messages.put("success", "true");
115 	}
116 
117 	public void render(RenderRequest request, RenderResponse response)
118 		throws PortletException, IOException {
119 
120 		request.setAttribute(
121 			"categories",
122 			getCategoriesForRequestor(request.getRemoteUser()));
123 
124 		// we don't want the messages to persist too long, so we're setting params
125 		//     in render and clearing the map that we used to hold the messages
126 		Map messages = (Map) request.getAttribute("messages");
127 		if (messages != null) {
128 			Iterator iMessages = messages.keySet().iterator();
129 			while (iMessages.hasNext()) {
130 				String sKey = (String) iMessages.next();
131 				String sValue = (String) messages.get(sKey);
132 				request.setAttribute(sKey, sValue);
133 			}
134 			messages.clear();
135 		}
136 
137 		// TODO JSP names should follow portlet camel-case naming style
138 		getRequestDispatcher("/submitrequest.jsp").include(request, response);
139 	}
140 
141 	public void destroy() {
142 	}
143 
144 	// -------------------------------------------------------- Private Methods
145 	private List getCategoriesForRequestor(String user) {
146 		return getPrayerRequestManager().getCategoriesForRequestor(user);
147 	}
148 
149 	private PrayerCategory getCategory(
150 		String category,
151 		String newcategory,
152 		String remoteUser,
153 		PrayerRequestManager manager) {
154 
155 		PrayerCategory prayerCategory = null;
156 
157 		if (category != null) {
158 			if (!category.toLowerCase().startsWith("select a category")
159 				&& (!category.toLowerCase().startsWith("add a new category"))) {
160 				//existing category
161 				prayerCategory = manager.getPrayerCategory(category);
162 			} else {
163 				//new category
164 				if (newcategory != null) {
165 					prayerCategory = new PrayerCategory();
166 					prayerCategory.setName(newcategory);
167 					prayerCategory.setRequestorUserId(remoteUser);
168 					manager.createPrayerCategory(prayerCategory);
169 				}
170 			}
171 		}
172 
173 		return prayerCategory;
174 	}
175 
176 	private PrayerRequestManager getPrayerRequestManager() {
177 		return (PrayerRequestManager) getServiceLocator().get(
178 			PrayerRequestManager.class);
179 	}
180 
181 	private PortletRequestDispatcher getRequestDispatcher(String path) {
182 		return context.getRequestDispatcher(path);
183 	}
184 
185 	private ServiceLocator getServiceLocator() {
186 		return (ServiceLocator) context.getAttribute(ServiceLocator.KEY);
187 	}
188 }