%@ 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();
}
%>