1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.jdiagnose.library.web.spring;
17
18 import java.text.ParseException;
19 import java.text.SimpleDateFormat;
20 import java.util.Date;
21
22 import javax.servlet.http.HttpServletRequest;
23 import javax.servlet.http.HttpServletResponse;
24 import javax.servlet.http.HttpSession;
25
26 import org.jdiagnose.remote.provider.DefaultSystemHolder;
27 import org.jdiagnose.remote.provider.MutableSystemProvider;
28 import org.jdiagnose.remote.system.RemoteSystemCreator;
29 import org.springframework.validation.BindException;
30 import org.springframework.web.servlet.ModelAndView;
31 import org.springframework.web.servlet.mvc.SimpleFormController;
32 import org.springframework.web.servlet.view.RedirectView;
33
34 /***
35 * @author jmccrindle
36 */
37 public class QueryFormController extends SimpleFormController {
38
39 private SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
40 private SimpleDateFormat systemDateFormat = new SimpleDateFormat("HH:mm:ss");
41 private MutableSystemProvider provider = null;
42 private RemoteSystemCreator creator = null;
43 private SessionSystemsFactory sessionSystemsFactory = null;
44 private String sessionSystemsKey = "sessionSystemsKey";
45
46
47
48
49 protected Object formBackingObject(HttpServletRequest request)
50 throws Exception {
51 QueryCommand command = new QueryCommand();
52 command.setSystem("Query at " + systemDateFormat.format(new Date()));
53 command.setStartDate(System.currentTimeMillis() - (24 * 60 * 60 * 1000));
54 command.setEndDate(System.currentTimeMillis());
55 return command;
56 }
57
58
59
60
61 protected void onBind(HttpServletRequest request, Object command, BindException errors)
62 throws Exception {
63
64 QueryCommand queryCommand = (QueryCommand) command;
65
66 String startDate = request.getParameter("start.date");
67 String startHours = request.getParameter("start.hours");
68 String startMinutes = request.getParameter("start.minutes");
69
70 try {
71 queryCommand.setStartDate(dateFromStrings(startDate, startHours,
72 startMinutes));
73 } catch (ParseException e) {
74 errors.rejectValue("startDate", "errors.date.invalid", "Invalid Date");
75 }
76
77 String endDate = request.getParameter("end.date");
78 String endHours = request.getParameter("end.hours");
79 String endMinutes = request.getParameter("end.minutes");
80
81 try {
82 queryCommand.setEndDate(dateFromStrings(endDate, endHours, endMinutes));
83 } catch (ParseException e) {
84 errors.rejectValue("endDate", "errors.date.invalid", "Invalid Date");
85 }
86 }
87
88 /***
89 * @param startDate
90 * @param startHours
91 * @param startMinutes
92 * @return
93 * @throws ParseException
94 */
95 private long dateFromStrings(String startDate, String startHours, String startMinutes) throws ParseException {
96 Date date = new Date();
97 if(startDate != null) {
98 date = dateFormat.parse(startDate);
99 }
100 long dateAsLong = date.getTime() + (Integer.parseInt(startHours) * 60 * 60 * 1000)
101 + (Integer.parseInt(startMinutes)) * 60 * 1000;
102 return dateAsLong;
103 }
104
105
106
107
108 protected ModelAndView onSubmit(HttpServletRequest request,
109 HttpServletResponse response, Object command, BindException errors)
110 throws Exception {
111 QueryCommand queryCommand = (QueryCommand) command;
112 String systemHolderId = provider.nextId();
113 DefaultSystemHolder holder = new DefaultSystemHolder();
114 holder.setDescription(queryCommand.getSystem());
115 holder.setId(systemHolderId);
116 holder.setRemoteSystem(creator.getRemoteSystem(queryCommand));
117 provider.addHolder(holder);
118 HttpSession session = request.getSession(true);
119 SessionSystems sessionSystems = (SessionSystems) session.getAttribute(sessionSystemsKey);
120 if(sessionSystems == null) {
121 sessionSystems = sessionSystemsFactory.create();
122 session.setAttribute(sessionSystemsKey, sessionSystems);
123 }
124 sessionSystems.getIds().add(systemHolderId);
125 return new ModelAndView(new RedirectView(request.getContextPath() + "/hosts.htm?system=" + systemHolderId));
126 }
127
128 public void setDateFormat(SimpleDateFormat dateFormat) {
129 this.dateFormat = dateFormat;
130 }
131 public void setProvider(MutableSystemProvider provider) {
132 this.provider = provider;
133 }
134 public void setSystemDateFormat(SimpleDateFormat systemDateFormat) {
135 this.systemDateFormat = systemDateFormat;
136 }
137 public void setCreator(RemoteSystemCreator creator) {
138 this.creator = creator;
139 }
140 public void setSessionSystemsFactory(
141 SessionSystemsFactory sessionSystemsFactory) {
142 this.sessionSystemsFactory = sessionSystemsFactory;
143 }
144 public void setSessionSystemsKey(String sessionSystemsKey) {
145 this.sessionSystemsKey = sessionSystemsKey;
146 }
147 }