<%@ page buffer="32kb" contentType="text/html; charset=iso-8859-1" language="java" errorPage="" import="java.io.*,java.sql.*,javax.sql.DataSource,java.util.Date,java.util.Calendar,java.util.Locale,java.text.SimpleDateFormat,java.util.TimeZone" %><% String strDefaultCSS = "blue"; // Database initialisation Connection connection = (Connection) request.getAttribute("connection"); Statement statement = connection.createStatement(); String id = request.getParameter("id"); // OK, firstly, lets get the top most news feed. This will give us our Last-Modified date ResultSet rs; if (id != null && id.length() > 0) rs = statement.executeQuery("SELECT Article.MenuID, Article.UserID, Article.ContentsCompiled, Article.DateCreated, Concat(A.First, ' ',A.Last) as UserName, Menu.Name, Article.Name, B.UserID, B.Name, B.DateModified, MenuCSS.CSS, AverageScore from Article inner join User A on Article.UserID = A.ID inner join Menu on Article.MenuID = Menu.ID left join (select ArticleModificationHistory.ID as ID, ArticleModificationHistory.User as UserID, Concat(User.First,' ',User.Last) as Name, DateModified from ArticleModificationHistory inner join User on ArticleModificationHistory.User = User.ID order by ArticleModificationHistory.DateModified DESC limit 0,1) B on Article.ID = B.ID left join MenuCSS on Article.MenuID = MenuCSS.MenuID left join ArticleVotes on Article.ID = ArticleVotes.ArticleID where Article.ID=" + id + ";"); else rs = statement.executeQuery("SELECT Article.MenuID, Article.UserID, Article.ContentsCompiled, Article.DateCreated, Concat(A.First, ' ',A.Last) as UserName, Menu.Name, Article.Name, B.UserID, B.Name, B.DateModified, MenuCSS.CSS, AverageScore from Article inner join User A on Article.UserID = A.ID inner join Menu on Article.MenuID = Menu.ID left join (select ArticleModificationHistory.ID as ID, ArticleModificationHistory.User as UserID, Concat(User.First,' ',User.Last) as Name, DateModified from ArticleModificationHistory inner join User on ArticleModificationHistory.User = User.ID order by ArticleModificationHistory.DateModified DESC limit 0,1) B on Article.ID = B.ID left join MenuCSS on Article.MenuID = MenuCSS.MenuID left join ArticleVotes on Article.ID = ArticleVotes.ArticleID order by Article.DateCreated DESC limit 0, 1"); Date dtHeader = null; Date dtModified = null; SimpleDateFormat df = new SimpleDateFormat("EEE', 'dd' 'MMM' 'yyyy' 'HH:mm:ss", Locale.UK); try{ rs.next(); dtHeader = rs.getTimestamp(4); dtModified = rs.getTimestamp(10); /** // If we did return a record, set the value of the Last Modified and Expires in the Response header // Otherwise we use the implicit values created by the JSP host. if (dtHeader != null){ response.setDateHeader("Last-Modified",dtHeader.getTime()); Calendar cal = Calendar.getInstance(); cal.setTime(dtHeader); cal.add(Calendar.YEAR,1); response.setDateHeader("Expires",cal.getTimeInMillis()); } if (dtModified != null) { response.setDateHeader("Last-Modified",dtModified.getTime()); Calendar cal = Calendar.getInstance(); cal.setTime(dtModified); cal.add(Calendar.YEAR,1); response.setDateHeader("Expires",cal.getTimeInMillis()); } // Let's check the HTTP 1.1 Request Header, to see if we have got a modified since date. long lRequestTime = request.getDateHeader("If-Modified-Since"); // If the database contains newer information than the client has, or there is no data // on the database, then lets send out the RSS feed (even if won't contain any items) if (lRequestTime == -1 || dtHeader == null || lRequestTime < dtHeader.getTime() || (dtModified != null && lRequestTime < dtModified.getTime())){ */ // Lets fetch the top 15 news stories // Note, we cover the case that a new story could have been added since we // ran the first select stament. To prevent against a possibility that the // last modified date would be less than the most recent date in the stories int menuID = rs.getInt(1); int userID = rs.getInt(2); Reader readerHTML = rs.getClob(3).getCharacterStream(); String username = rs.getString(5); String menu = rs.getString(6); String articleName = rs.getString(7); int userIDModified = rs.getInt(8); String usernameModified = rs.getString(9); String menuCSS = rs.getString(11); float rating = rs.getFloat(12); if (rs.wasNull()) { rating = -1; } ResultSet rs2 = statement.executeQuery("SELECT MenuCSS.CSS from ReverseMenu left join MenuCSS on ReverseMenu.ParentID = MenuCSS.MenuID where ReverseMenu.ID=" + menuID + " order by ReverseMenu.Order ASC, MenuCSS.Order ASC"); StringBuffer sb1 = new StringBuffer(); sb1.append(strDefaultCSS); while (rs2.next()) { String strCSS = rs2.getString(1); if (strCSS != null) { sb1.append(","); sb1.append(strCSS); } } rs2.close(); if (menuCSS != null) { if (sb1.length() > 0) { sb1.append(","); } sb1.append(menuCSS); } rs2 = statement.executeQuery("SELECT Menu.ID, Menu.Name from ReverseMenu left join Menu on ReverseMenu.ParentID = Menu.ID where ReverseMenu.ID=" + menuID + " and ReverseMenu.ParentID is not null order by ReverseMenu.Order ASC"); StringBuffer sb2 = new StringBuffer(); boolean bNotEmpty = false; while (rs2.next()) { if (bNotEmpty) { sb2.append(" > "); } bNotEmpty = true; sb2.append(""); sb2.append(rs2.getString(2)); sb2.append(""); } rs2.close(); if (bNotEmpty) { sb2.append(" > "); } sb2.append(""); sb2.append(menu); sb2.append(""); sb2.append(" > "); sb2.append(""); sb2.append(articleName); sb2.append(""); %>
<%=articleName%>
<% char[] ca = new char[1024]; int iRead = 0; while (iRead != -1) { while (!readerHTML.ready()) { try { Thread.sleep(10); } catch (InterruptedException e) {} } iRead = readerHTML.read(ca); if (iRead != -1) { out.write(ca,0,iRead); } } out.write("
"); out.write("Created by "+username+" on "); out.write(df.format(dtHeader)); out.write("
"); if (dtModified != null) { out.write("Last modified by "+usernameModified+" on "); out.write(df.format(dtModified)); out.write(""); } %> <% /* } else{ // If the client is up to date, then lets return them nothing, and inform them // that they are already up to date. response.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } */ // Finally, lets clean up after ourselves. rs.close(); statement.close(); connection.close(); } catch (Exception e) { e.printStackTrace(); } %>