View Javadoc
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          //create proper handlers per role
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 }