CourteouspoemServlet.java
package org.melati.courteouspoem;
import java.io.File;
import java.io.IOException;
import javax.servlet.ServletException;
import org.melati.Melati;
import org.melati.servlet.TemplateServlet;
import org.melati.template.ServletTemplateContext;
//import org.melati.courteouspoem.poem.CourteouspoemDatabase;
/**
* Base servlet for Courteouspoem servlets.
*/
public abstract class CourteouspoemServlet extends TemplateServlet {
public static final String templatePrefix = "org/melati/courteouspoem/view/";
public String getSysAdminName () {
return "TimP";
}
public String getSysAdminEmail () {
return "timp@paneris.org";
}
/**
* @see org.melati.servlet.ConfigServlet#doConfiguredRequest(org.melati.Melati)
*/
protected void doConfiguredRequest(final Melati melati)
throws ServletException, IOException {
String pathInfo = melati.getRequest().getPathInfo();
if (pathInfo == null) pathInfo = "";
// check if pathinfo exists in filesystem
// if so then redirect to it, unless we came from there
while (pathInfo != "" && !fileAt(pathInfo)) {
String s = pathInfo.substring(1);
int i = s.indexOf('/');
if (i != -1)
pathInfo = s.substring(i);
else
pathInfo = "";
}
if (pathInfo != "") {
String referer = melati.getRequest().getHeader("Referer");
if (referer != null &&
referer.indexOf(pathInfo) == -1) {
melati.getResponse().sendRedirect(pathInfo);
return;
}
}
super.doConfiguredRequest(melati);
}
private boolean fileAt(String filename){
if (filename.equals("")) return false;
if (filename.equals("/")) return false;
String fsName = "/dist/courteouspoem/www" + filename;
File it = new File(fsName);
return it.exists();
}
public String courteouspoemTemplate(String name) {
return addExtension(templatePrefix + name);
}
// Override org.melati.TemplateServlet.addExtension()
// to cope with heterogenous naming convention :)
protected String addExtension(String templateName) {
int index = templateName.indexOf(".wm");
if (index == -1)
templateName = templateName + ".wm";
return templateName;
}
/**
* Concrete class for {@link TemplateServlet}.
*
* @param melati
* @param context
* @return Template name
*/
protected String doTemplateRequest(Melati melati, ServletTemplateContext context)
throws Exception {
return courteouspoemTemplate(reallyDoTemplateRequest(melati, context));
}
/**
* Override this method to build up output in individual servlets.
*
* @return Template name without path or extension
*/
protected abstract String
reallyDoTemplateRequest(Melati melati,
ServletTemplateContext templateContext)
throws Exception;
protected String getSetting(Melati melati, String settingName) {
String returnString = melati.getDatabase().getSettingTable().get(settingName);
if (returnString == null)
throw new RuntimeException("Setting " + settingName + " not found in setting table");
return returnString;
}
}