« LOM OAI-PMH Harvester in Python | Main | OS X on VirtualBox »
February 28, 2012
Jython servlet and JSP for AJAX slide presentations
Servlet Code:
from javax.servlet.http import HttpServlet
from java.util import ArrayList
from java.util import HashMap
import re
import string
from just import just
class presentationXML(HttpServlet):
def doGet(self,request,response):
self.doPost (request,response)
def doPost(self,request,response):
response.setContentType ("text/plain")
presentation_id = request.getParameter('presentation_id')
presentation = self.get_presentation(presentation_id)
prezs = presentation.get('rows')
top_slide = prezs.get(0)
request.setAttribute("top_title", top_slide['title'])
request.setAttribute("top_author", top_slide['author'])
request.setAttribute("top_desc", top_slide['description'])
slides = self.get_slides(presentation_id)
rows = slides.get('rows')
columns = slides.get('columns')
request.setAttribute("columns", columns)
request.setAttribute("rows", rows)
disp = request.getRequestDispatcher('presentation.xml.jsp')
disp.forward(request, response)
def build_slide(self, slide):
title = slide['title']
body = slide['body']
slide_list = ""
for i in body.split("\n"):
(tag, line) = i.split(':')
slide_list = slide_list + "\n<" + tag + '><span class="red">»</span> ' + line + "</" + tag + ">"
return {'title' : title, 'slide_list' : slide_list, 'example_url' : slide['example_url'] }
def get_slides(self, pres_id):
juice = just()
reply = juice.sql("select * from slides.slide where presentation_id = " + str(pres_id) + " order by sort_order asc")
slides = []
for row in reply['rows']:
slide = self.build_slide(row)
slides.append(slide)
return( self.jhash(slides, ['title', 'slide_list', 'example_url' ]) )
def get_presentation(self, pres_id):
juice = just()
reply = juice.sql("select * from slides.presentation where presentation_id = " + str(pres_id) + "limit 1")
return( self.jhash(reply['rows'], reply['columns']) )
def jhash(self, rows, columns):
results = HashMap()
jrows = ArrayList()
jcols = ArrayList()
for row in rows:
res = HashMap()
for col in columns:
jcols.add(col)
res.put(col, row[col])
jrows.add(res)
results.put('columns', jcols)
results.put('rows', jrows)
return results
JSP:
<?xml version="1.0" encoding="UTF-8"?>
<%@ page contentType="text/xml" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<?xml-stylesheet type="text/xsl" href="xslt/ajax-s-html.xml"?>
<ajax-s>
<pages>
<page>
<br/>
<br/>
<h2>${top_title}</h2>
<h3>${top_desc}</h3>
<h4><span class="red">»</span> ${top_author}</h4>
</page>
<c:forEach items="${rows}" var="row">
<page>
<h2>${row['title']}</h2>
<dl>
<c:out value="${row['slide_list']}" escapeXml="false"/>
</dl>
<c:if test="${row['example_url'] != ''}">
<p style="text-align: right"><a target="__newwin" href="${row['example_url']}">e.g. <span class="red">»</span></a></p>
</c:if>
</page>
</c:forEach>
</pages>
</ajax-s>
DB Query Bean
import re
import string
import com.ziclix.python.sql as sql
class just:
def sql(self, skewl):
description, results = self.query(skewl)
cols = []
final = {}
final['rows'] = []
final['columns'] = []
for i in description:
cols.append(i[0])
for i in results:
row = list(i)
r = {}
count = 0
for c in row:
r[cols[count]] = c
count = count + 1
final['rows'].append(r)
final['columns'] = cols
return final
def query(self, q):
dburl, user, pw, drv = ("jdbc:postgresql://localhost:5432/roo","*****","*****","org.postgresql.Driver")
db = sql.zxJDBC.connect(dburl, user, pw, drv)
cursor = db.cursor()
cursor.datahandler = sql.handler.PostgresqlDataHandler(cursor.datahandler)
cursor.execute(q)
columns = cursor.description
results = cursor.fetchall()
return (columns, results)
Tags: Jython
Posted by pj at February 28, 2012 03:05 PM