/*
* Copyright (c) 2001, Xiaoping Jia.
* All Rights Reserved.
*/
package expo2;
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
import org.apache.ecs.*;
import org.apache.ecs.html.*;
/**
* Java Expo web app version 2.
* The base servlet.
*
* The purposes of the base servlet are:
*
* - Enforce a consistent style of layout and look & feel.
* - Simplyfy the responsibility and construction of individual pages.
* - Make it easy for global chages or upgrade.
* - Configurable and extensible.
*
*
* @version 1.1 2001/04/20
* @since 1.0
* @author Xiaoping Jia
*/
public abstract class JavaExpoBase extends HttpServlet {
/**
* To be overriden by each subclass to handle requests.
*
* @param request the HTTP request
* @param response the HTTP response
* @param contents a list of HTML page elements that the main contents od the page is composed of
* @return true to follow the logic of the main servlet;
* false to bypass the rest of the base servlet.
*/
abstract public boolean handleRequest(HttpServletRequest request,
HttpServletResponse response,
List contents)
throws ServletException, IOException;
/**
* Handle POST request.
* The main logic of the base servlet.
*/
public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
Html html = new Html();
Body body = new Body();
body.setBgColor(HtmlColor.lavender);
html.addElement(new Head().addElement(new Title("Enterprise Java Expo")));
makeHeader(body);
List contents = new ArrayList();
if (handleRequest(request, response, contents)) {
Iterator iter;
List left = makeLeftBar(response);
List right = makeRightBar(response);
if (left == null && right == null) {
iter = contents.iterator();
while (iter.hasNext()) {
Object e = iter.next();
if (e instanceof Element) {
body.addElement((Element) e);
} else if (e instanceof String) {
body.addElement((String) e);
}
}
} else {
TR tr = new TR();
TD td;
body.addElement(new Table().setWidth("100%")
.addElement(tr));
if (left != null) {
td = new TD().setWidth("20%").setVAlign("top");
iter = left.iterator();
while (iter.hasNext()) {
Object e = iter.next();
if (e instanceof Element) {
td.addElement((Element) e);
} else if (e instanceof String) {
td.addElement((String) e);
}
}
tr.addElement(td);
}
td = new TD();
iter = contents.iterator();
while (iter.hasNext()) {
Object e = iter.next();
if (e instanceof Element) {
td.addElement((Element) e);
} else if (e instanceof String) {
td.addElement((String) e);
}
}
tr.addElement(td);
if (right != null) {
td = new TD().setWidth("20%").setVAlign("top");
iter = right.iterator();
while (iter.hasNext()) {
Object e = iter.next();
if (e instanceof Element) {
td.addElement((Element) e);
} else if (e instanceof String) {
td.addElement((String) e);
}
}
tr.addElement(td);
}
}
makeFooter(body);
html.addElement(body);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println(html.toString());
}
}
/**
* Handle GET request.
* Provide identical behavior as the POST requests.
*/
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
public void init() {
try {
// read menu items from the config file /WEB-INF/menus.cfg
ServletContext ctx = getServletContext();
BufferedReader mfile =
new BufferedReader(new FileReader(ctx.getRealPath("WEB-INF/menus.cfg")));
menus = new ArrayList();
String line;
while ((line = mfile.readLine()) != null) {
line = line.trim();
if (line.length() > 0 && line.charAt(0) != '#') {
int i = line.indexOf(':');
if (i > 0) {
String name = line.substring(0, i).trim();
String url = line.substring(i + 1).trim();
menus.add(new MenuItem(name, url));
}
}
// skip empty or comment line
}
} catch (FileNotFoundException e) {
System.out.println("Unable to open file menus.cfg");
} catch (IOException e) {
System.out.println("Error in reading file menus.cfg");
}
}
/**
* Make a default header. Maybe overridden by subclasses.
*
* @param body the HTML page bady to which the header is attached
*/
protected void makeHeader(Body body) {
if (header == null) {
header =
new Table().setWidth("100%")
.addElement(new TR()
.addElement(new TD()
.addElement(new IMG("http://flyweight.cti.depaul.edu:9080/se452servlets/images/duke-j2ee.gif").setWidth(75).setHeight(80)))
.addElement(new TD()
.addElement(new Center()
.addElement(new B()
.addElement(new Font("Arial,Helvetica", HtmlColor.navy, +6)
.addElement("Enterprise Java Expo"))
.addElement(new BR())
.addElement(new Font("Times New Roman,Times", HtmlColor.indigo, +4)
.addElement("Chicago Vienna Shanghai San Francisco"))))));
}
body.addElement(header);
}
/**
* Make a default footer. Maybe overridden by subclasses.
*
* @param body the HTML page bady to which the footer is attached
*/
protected void makeFooter(Body body) {
if (footer == null) {
footer =
new Table().setWidth("100%")
.addElement(new TR()
.addElement(new TD().setVAlign("top")
.addElement("Copyright © 2001 Enterprise Java Expo. (Ver 2.0)")
.addElement(new BR())
.addElement("Powered by ")
.addElement(new A("http://jakarta.apache.org/tomcat/", "Tomcat")))
.addElement(new TD().setAlign("right")
.addElement(new IMG("http://flyweight.cti.depaul.edu:9080/se452servlets/images/tomcat-power.gif").setWidth(75).setHeight(80))));
}
body.addElement(new HR())
.addElement(footer);
}
/**
* Make a default left bar. Maybe overridden by subclasses.
*
* @param response the HTTP response
* @return a list of HTML elements that the left bar is composed of
*/
protected List makeLeftBar(HttpServletResponse response) {
List left = null;
if (menus != null) {
left = new ArrayList();
Iterator iter = menus.iterator();
while (iter.hasNext()) {
MenuItem mi = (MenuItem) iter.next();
if (mi != null &&
mi.name != null &&
mi.url != null) {
left.add(new A(response.encodeURL(urlPrefix + mi.url), mi.name));
left.add(new BR());
}
}
}
return left;
}
/**
* Make a default right bar. Maybe overridden by subclasses.
*
* @param response the HTTP response
* @return a list of HTML elements that the left bar is composed of
*/
protected List makeRightBar(HttpServletResponse response) {
return null;
}
static class MenuItem {
String name, url;
MenuItem(String name, String url) {
this.name = name; this.url = url;
}
}
protected static final String urlPrefix = "/se452servlets/servlet/expo2.";
protected List menus = null;
protected Element header = null;
protected Element footer = null;
}