1 package ejava.examples.webtier.web;
2
3 import java.io.IOException;
4 import java.util.ArrayList;
5 import java.util.HashMap;
6 import java.util.List;
7 import java.util.Map;
8
9 import javax.servlet.RequestDispatcher;
10 import javax.servlet.ServletException;
11 import javax.servlet.http.HttpServlet;
12 import javax.servlet.http.HttpServletRequest;
13 import javax.servlet.http.HttpServletResponse;
14
15 import org.apache.commons.logging.Log;
16 import org.apache.commons.logging.LogFactory;
17
18 import ejava.examples.webtier.bl.Registrar;
19 import ejava.examples.webtier.bl.RegistrarException;
20 import ejava.examples.webtier.bl.RegistrarImpl;
21 import ejava.examples.webtier.bo.Student;
22
23 @SuppressWarnings("serial")
24 public class RegistrarHandlerServlet extends HttpServlet {
25 Log log = LogFactory.getLog(RegistrarHandlerServlet.class);
26 Registrar registrar;
27 Map<String, Handler> handlers = new HashMap<String, Handler>();
28
29 public void init() {
30 registrar = new RegistrarImpl();
31
32 String level = super.getServletConfig().getInitParameter("level");
33 log.info("level=" + level);
34
35
36 if (level != null && "admin".equals(level)) {
37 handlers.put("Create Student", new CreateStudent());
38 handlers.put("Generate Students", new GenerateStudents());
39 handlers.put("Find Students", new GetStudents());
40 handlers.put("Get Student", new GetStudent());
41 handlers.put("Remove Student", new RemoveStudent());
42 }
43 else if (level != null && "user".equals(level)) {
44
45 }
46 else {
47
48 }
49 }
50
51 protected void doGet(HttpServletRequest request,
52 HttpServletResponse response) throws ServletException, IOException {
53
54 String command = request.getParameter("command");
55 if (command != null) {
56 Handler handler = handlers.get(command);
57 if (handler != null) {
58 handler.handle(request, response);
59 }
60 else {
61 RequestDispatcher rd = getServletContext().getRequestDispatcher(
62 "/WEB-INF/content/UnknownCommand.jsp");
63 rd.forward(request, response);
64 }
65 }
66 else {
67 RequestDispatcher rd = getServletContext().getRequestDispatcher(
68 "NoCommand.jsp");
69 rd.forward(request, response);
70 }
71
72
73 }
74
75 protected void doPost(HttpServletRequest request,
76 HttpServletResponse response) throws ServletException, IOException {
77 doGet(request, response);
78 }
79
80 private abstract class Handler {
81 public abstract void handle(HttpServletRequest request,
82 HttpServletResponse response)
83 throws ServletException, IOException;
84 }
85
86 private class CreateStudent extends Handler {
87 public void handle(HttpServletRequest request,
88 HttpServletResponse response)
89 throws ServletException, IOException {
90 Student student = new Student();
91 student.setFirstName(request.getParameter("firstName"));
92 student.setLastName(request.getParameter("lastName"));
93
94 try {
95 log.debug("creating new student:" + student);
96 Student newStudent = registrar.addStudent(student);
97 request.setAttribute("student", newStudent);
98 log.debug("new student created:" + student);
99
100 RequestDispatcher rd = getServletContext().getRequestDispatcher(
101 "/WEB-INF/content/DisplayStudent.jsp");
102 rd.forward(request, response);
103 } catch (RegistrarException ex) {
104 log.fatal("error creating student:" + ex);
105 request.setAttribute("exception", ex);
106 RequestDispatcher rd = getServletContext().getRequestDispatcher(
107 "DisplayException.jsp");
108 rd.forward(request, response);
109 }
110
111 }
112 }
113
114 private class GenerateStudents extends Handler {
115 public void handle(HttpServletRequest request,
116 HttpServletResponse response)
117 throws ServletException, IOException {
118 String countStr = request.getParameter("count");
119 int count = 100;
120 try { count = Integer.parseInt(countStr); }
121 catch(Exception ex) {}
122
123 try {
124 log.debug("generating " + count + " students");
125 List<Student> students = new ArrayList<Student>();
126 for(int i=0; i<count; i++) {
127 Student student = new Student();
128 student.setFirstName("gen");
129 student.setLastName("student" + i);
130 @SuppressWarnings("unused")
131 Student newStudent = registrar.addStudent(student);
132 students.add(student);
133 }
134 log.debug("new students created");
135 request.setAttribute("students", students);
136 request.setAttribute("index", 0);
137 request.setAttribute("count", count);
138 request.setAttribute("nextIndex", 0);
139 request.setAttribute("firstName", "%");
140 request.setAttribute("lastName", "%");
141
142 RequestDispatcher rd = getServletContext().getRequestDispatcher(
143 "/WEB-INF/content/DisplayStudents.jsp");
144 rd.forward(request, response);
145 } catch (RegistrarException ex) {
146 log.fatal("error generating students:" + ex);
147 request.setAttribute("exception", ex);
148 RequestDispatcher rd = getServletContext().getRequestDispatcher(
149 "DisplayException.jsp");
150 rd.forward(request, response);
151 }
152
153 }
154 }
155
156
157 private class GetStudents extends Handler {
158 public void handle(HttpServletRequest request,
159 HttpServletResponse response)
160 throws ServletException, IOException {
161 String indexStr = request.getParameter("index");
162 String countStr = request.getParameter("count");
163 String firstName = (String)request.getParameter("firstName");
164 firstName = (firstName == null ? "%" : firstName);
165 String lastName = (String)request.getParameter("lastName");
166 lastName = (lastName == null ? "%" : lastName);
167
168 Map<String, Object> params = new HashMap<String, Object>();
169 params.put("firstName", firstName);
170 params.put("lastName", lastName);
171
172 int index = 0;
173 try { index = Integer.parseInt(indexStr); }
174 catch(Exception ex) {
175 log.info("error in index format (" + indexStr +
176 ") defaulting to " + index);
177 }
178 int count = 20;
179 try { count = Integer.parseInt(countStr); }
180 catch(Exception ex) {
181 log.info("error in count format (" + countStr +
182 ") defaulting to " + count);
183 }
184
185 try {
186 log.debug("getting students(" + index + ", " + count + "):" +
187 params);
188 List<Student> students =
189 registrar.getStudents("getStudentsByName",
190 params, index, count);
191 int nextIndex = (students.size() < count) ?
192 0 : index + count;
193 request.setAttribute("students", students);
194 request.setAttribute("index", index);
195 request.setAttribute("count", count);
196 request.setAttribute("nextIndex", nextIndex);
197 request.setAttribute("firstName", firstName);
198 request.setAttribute("lastName", lastName);
199 log.debug("students found:" + students.size());
200
201 RequestDispatcher rd = getServletContext().getRequestDispatcher(
202 "/WEB-INF/content/DisplayStudents.jsp");
203 rd.forward(request, response);
204 } catch (RegistrarException ex) {
205 log.fatal("error getting students:" + ex);
206 request.setAttribute("exception", ex);
207 RequestDispatcher rd = getServletContext().getRequestDispatcher(
208 "/WEB-INF/content/DisplayException.jsp");
209 rd.forward(request, response);
210 }
211
212 }
213 }
214
215 private class GetStudent extends Handler {
216 public void handle(HttpServletRequest request,
217 HttpServletResponse response)
218 throws ServletException, IOException {
219 String idStr = request.getParameter("id");
220 long id = 0;
221 try { id = Long.parseLong(idStr); }
222 catch(Exception ex) {
223 log.info("error in id format:" + idStr);
224 request.setAttribute("exception", ex);
225 RequestDispatcher rd = getServletContext().getRequestDispatcher(
226 "/WEB-INF/content/DisplayException.jsp");
227 rd.forward(request, response);
228 }
229
230
231
232 try {
233 log.debug("getting student:");
234 Student student = registrar.getStudent(id);
235 request.setAttribute("student", student);
236 log.debug("student found:" + student);
237
238 RequestDispatcher rd = getServletContext().getRequestDispatcher(
239 "/WEB-INF/content/DisplayStudent.jsp");
240 rd.forward(request, response);
241 } catch (RegistrarException ex) {
242 log.fatal("error getting student:" + ex);
243 request.setAttribute("exception", ex);
244 RequestDispatcher rd = getServletContext().getRequestDispatcher(
245 "/WEB-INF/content/DisplayException.jsp");
246 rd.forward(request, response);
247 }
248
249 }
250 }
251
252
253 private class RemoveStudent extends Handler {
254 public void handle(HttpServletRequest request,
255 HttpServletResponse response)
256 throws ServletException, IOException {
257 String idStr = request.getParameter("id");
258 long id = 0;
259 try { id = Long.parseLong(idStr); }
260 catch(Exception ex) {
261 log.info("error in id format:" + idStr);
262 request.setAttribute("exception", ex);
263 RequestDispatcher rd = getServletContext().getRequestDispatcher(
264 "/WEB-INF/content/DisplayException.jsp");
265 rd.forward(request, response);
266 }
267
268
269 try {
270 log.debug("removing student:");
271 Student student = registrar.getStudent(id);
272 student = registrar.dropStudent(student);
273 request.setAttribute("student", student);
274 request.setAttribute("removed", true);
275 log.debug("student removed:" + student);
276
277 RequestDispatcher rd = getServletContext().getRequestDispatcher(
278 "/WEB-INF/content/DisplayStudent.jsp");
279 rd.forward(request, response);
280 } catch (RegistrarException ex) {
281 log.fatal("error getting student:" + ex);
282 request.setAttribute("exception", ex);
283 RequestDispatcher rd = getServletContext().getRequestDispatcher(
284 "/WEB-INF/content/DisplayException.jsp");
285 rd.forward(request, response);
286 }
287
288 }
289 }
290
291 }