import java.io.*; import mixer.*; import java.sql.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class booking extends HttpServlet{ String html = null; String[] hours = {"08-09", "09-10", "10-11", "11-12", "12-13","13-14", "14-15", "15-16", "16-17"}; String[] rooms = {"607", "609", "610", "612", "613", "614", "616", "620"}; HashMap helper = new HashMap(20); Connection con = null; PreparedStatement pstmt = null; PreparedStatement pqstmt = null; public void init() throws ServletException{ try{ String url = "jdbc:mysql://localhost/booking"; Class.forName("com.mysql.jdbc.Driver"); con = DriverManager.getConnection(url, "josef", "cotaidis"); pstmt = con.prepareStatement("INSERT INTO roombooking (sdate, edate, room, comment) values (?, ?, ?, ?);"); pqstmt = con.prepareStatement("SELECT * FROM roombooking WHERE sdate >= ? AND edate <= ? ORDER BY sdate, room;"); }catch(ClassNotFoundException cnfe){ log("Couldn't load database driver: " + cnfe.getMessage()); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } if (html == null) { html = Mixer.getContent(new File(getServletContext().getRealPath("/WEB-INF/classes/booking.html"))); } } public void destroy(){ try{ con.close(); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } } public int parseNumber(String str){ int tmp = 0; if (str.startsWith("0")) tmp = Integer.parseInt(str.substring(1)); else tmp = Integer.parseInt(str); return tmp; } public String parseNumber(int num){ String tmp = null; if (num < 10) tmp = "0" + Integer.toString(num); else tmp = Integer.toString(num); return tmp; } public void doGet(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ Mixer mix = new Mixer(html); GregorianCalendar cal = null; GregorianCalendar tmpCal = null; String date = null; if (req.getParameter("ar") == null){ cal = (GregorianCalendar)Calendar.getInstance(); date = String.format("%1$tY-%1$tm-%1$td", cal); }else{ cal = new GregorianCalendar(parseNumber(req.getParameter("ar")), parseNumber(req.getParameter("manad")) -1, parseNumber(req.getParameter("dag"))); date = String.format("%1$tY-%1$tm-%1$td", cal); } tmpCal = (GregorianCalendar)cal.clone(); java.sql.Timestamp from = java.sql.Timestamp.valueOf(date + " 08:00:00"); java.sql.Timestamp to = java.sql.Timestamp.valueOf(date + " 17:00:00"); ResultSet rs = null; try{ pqstmt.setTimestamp(1, from); pqstmt.setTimestamp(2, to); rs = pqstmt.executeQuery(); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } res.setContentType("text/html"); PrintWriter out = res.getWriter(); if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.MONDAY) mix.add("===today===", "MŒndag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.TUESDAY) mix.add("===today===", "Tisdag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.WEDNESDAY) mix.add("===today===", "Onsdag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.THURSDAY) mix.add("===today===", "Torsdag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.FRIDAY) mix.add("===today===", "Fredag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) mix.add("===today===", "Lšrdag"); else if (cal.get(Calendar.DAY_OF_WEEK) == Calendar.SUNDAY) mix.add("===today===", "Sšndag"); tmpCal.add(Calendar.DAY_OF_MONTH, -1); mix.add("===prev===", "?ar="+tmpCal.get(Calendar.YEAR)+"&manad="+(tmpCal.get(Calendar.MONTH) + 1)+"&dag="+tmpCal.get(Calendar.DAY_OF_MONTH)); tmpCal.add(Calendar.DAY_OF_MONTH, 2); mix.add("===next===", "?ar="+tmpCal.get(Calendar.YEAR)+"&manad="+(tmpCal.get(Calendar.MONTH)+ 1)+"&dag="+tmpCal.get(Calendar.DAY_OF_MONTH)); mix.add("===date===", date); mix.add("===width1===", "width=\""+100/(rooms.length+1)+"%\""); for (int i = 0; i < rooms.length; i++){ mix.add("===width2===", "width=\""+100/(rooms.length+1)+"%\""); mix.add("", "===room===", rooms[i]); } for (int i = 0; i < rooms.length; i++) helper.put(new Integer(rooms[i]), new HelpElement(0)); for (int i = 0; i < hours.length; i++){ try{ while (rs.next() && rs.getTimestamp(1).getHours() == i + 8) helper.get(rs.getInt(3)).set((rs.getTimestamp(2).getHours() - rs.getTimestamp(1).getHours()) * -1, rs.getString(4)); rs.previous(); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } mix.add("", "===hour===", hours[i]); String tmp = ""; for (int j = 0; j < rooms.length; j++){ if (helper.get(Integer.parseInt(rooms[j])).get() == 0) tmp = tmp + " "; else{ if (helper.get(Integer.parseInt(rooms[j])).get() < 0){ helper.get(Integer.parseInt(rooms[j])).set(helper.get(Integer.parseInt(rooms[j])).get() * -1); tmp = tmp + ""+helper.get(Integer.parseInt(rooms[j])).getString()+""; helper.get(Integer.parseInt(rooms[j])).decrese(); }else{ helper.get(Integer.parseInt(rooms[j])).decrese(); } } } mix.add("", "===bookings===", tmp); } for (int i = 0; i < rooms.length; i++){ mix.add("", "===number===", ""+rooms[i]); mix.add("", "===roomnumber===", ""+rooms[i]); } for (int i = 8; i <= 17; i++){ mix.add("", "===fromhour===", "" + i); mix.add("", "===fromhournumber===", "kl: " + parseNumber(i)); } for (int i = 8; i <= 17; i++){ mix.add("", "===tohour===", "" + i); mix.add("", "===tohournumber===", "kl: " + parseNumber(i)); } mix.add("===hiddenvalue===", date); mix.add("===hiddenar===", ""+parseNumber(date.substring(0, 4))); mix.add("===hiddenmanad===", ""+parseNumber(date.substring(5, 7))); mix.add("===hiddendag===", parseNumber(date.substring(8, 10))+""); out.println(mix.getMix()); } public void doPost(HttpServletRequest req, HttpServletResponse res) throws IOException, ServletException{ java.sql.Timestamp from = java.sql.Timestamp.valueOf(req.getParameter("hidden") +" " + req.getParameter("fran") + ":00:00"); java.sql.Timestamp to = java.sql.Timestamp.valueOf(req.getParameter("hidden")+ " " + req.getParameter("till") + ":00:00"); try{ pstmt.setTimestamp(1, from); pstmt.setTimestamp(2, to); pstmt.setInt(3, Integer.parseInt(req.getParameter("grupprum"))); pstmt.setString(4, req.getParameter("comment")); pstmt.executeUpdate(); }catch(SQLException sqle){ log("SQLException caught: " + sqle.getMessage()); } doGet(req, res); } }