<%@ page import="org.xmldb.api.*,org.xmldb.api.base.*,org.xmldb.api.modules.*" %>
<%@ page import="java.util.Date" %>
<%@ page import="java.text.SimpleDateFormat" %>
<%!
// ------------------------------------------------------------------
// Change these details
// ------------------------------------------------------------------
private String dbURI = "xmldb:sedna://localhost/db";
private String dbUser = "SYSTEM";
private String dbPass = "MANAGER";
// ------------------------------------------------------------------
static final String GB_COLLECTION = "guestbook";
SimpleDateFormat xsdDateFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
Database sednaDatabase = null;
public void registerDriver() throws Exception
{
if(sednaDatabase == null) {
sednaDatabase = (Database)(Class.forName("net.cfoster.sedna.DatabaseImpl").newInstance());
DatabaseManager.registerDatabase(sednaDatabase);
}
}
public void ensureGuestbookCollectionExists() throws XMLDBException
{
Collection root = DatabaseManager.getCollection(dbURI, dbUser, dbPass);
Collection gbookCol = root.getChildCollection(GB_COLLECTION);
if(gbookCol == null) { // doesn't exist
CollectionManagementService cms = (CollectionManagementService)root.getService("CollectionManagementService","1.0");
cms.createCollection(GB_COLLECTION);
}
root.close();
}
public String makeXMLSafe(String string) {
return string.replaceAll("<","<").replaceAll(">",">").trim();
}
public String getXSDDateTimeFromDate(Date date) {
return xsdDateFormat.format(date);
}
%>
<%
registerDriver();
ensureGuestbookCollectionExists();
String name = request.getParameter("name");
String email = request.getParameter("email");
String message = request.getParameter("message");
if(name != null) // Has signed guestbook
{
if(name.trim().length()==0) out.println("<div class='error'>Must give a name.</div>");
else if(message.trim().length()==0) out.println("<div class='error'>Must write a message.</div>");
else // signed it ok
{
Collection gbookCol = DatabaseManager.getCollection(dbURI+"/"+GB_COLLECTION, dbUser, dbPass);
XMLResource res = (XMLResource)gbookCol.createResource(null, "XMLResource");
res.setContent("<message>"+
"<timestamp>" + getXSDDateTimeFromDate(new Date()) + "</timestamp>" +
"<name>" + makeXMLSafe(name) + "</name>" +
"<email>" + makeXMLSafe(email) + "</email>" +
"<content>" + makeXMLSafe(message) + "</content>" +
"</message>");
gbookCol.storeResource(res);
gbookCol.close();
}
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-GB" lang="en-GB">
<head>
<title>Simple JSP Guestbook</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<link href="style.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div class="x-body">
<h1>Please sign the guestbook!</h1>
<form method="post" action="">
Your Name:
<input type="text" name="name" />
Your E-Mail Address:
<input type="text" name="email" />
Your Message:
<textarea name="message" rows="20" cols="52"></textarea>
<input type="submit" value="Sign Guestbook" />
</form>
<h2>Guestbook entries</h2>
<hr />
<%
Collection gbookCol = DatabaseManager.getCollection(dbURI+"/"+GB_COLLECTION, dbUser, dbPass);
XQueryService xq = (XQueryService)gbookCol.getService("XQueryService","1.0");
ResourceSet rs = xq.query("for $x in //message order by $x/timestamp descending return <div class='message'>"+
"<h3>{data($x/name)}</h3>"+
"<div class=\"date\">"+
"{day-from-dateTime($x/timestamp)}/"+
"{month-from-dateTime($x/timestamp)}/"+
"{year-from-dateTime($x/timestamp)}"+
"</div> <p>{data($x/content)}</p> "+
"</div>");
ResourceIterator iterator = rs.getIterator();
while(iterator.hasMoreResources())
out.println(iterator.nextResource());
gbookCol.close();
%>
</div>
</body>
</html>