// **********************************************************************
// <copyright>
// BBN Technologies
// 10 Moulton Street
// Cambridge, MA 02138
// (617) 873-8000
//
// Copyright (C) BBNT Solutions LLC. All rights reserved.
// </copyright>
// **********************************************************************
// $Source: /cvs/distapps/openmap/src/vpfservlet/WEB-INF/src/com/bbn/openmap/vpfservlet/DirectoryServlet.java,v $
// $Revision: 1.5 $ $Date: 2005/08/11 20:39:16 $ $Author: dietrick $
// **********************************************************************
package com.bbn.openmap.vpfservlet;
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.bbn.openmap.util.html.HtmlListElement;
/**
* This servlet lists the files in a directory of a configured VPF database.
* Directory listing can be disabled, see the listDirectories servlet parameter
* in the deployment descriptor. (web.xml)
*/
public class DirectoryServlet
extends VPFHttpServlet {
/**
* A do-nothing constructor - init does all the work.
*/
public DirectoryServlet() {
super();
}
/**
* false if this servlet should generate a "disabled by administrator"
* method rather than a directory list.
*/
private boolean listFiles;
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String filePath = (String) request.getAttribute(DispatchServlet.ROOTPATH_FILENAME);
if (filePath == null) {
String path = setPathInfo(request);
filePath = contextInfo.resolvePath(path);
if (!pathOkay(filePath, path, response)) {
return;
}
}
File fp = new File(filePath);
String pathInfo = getPathInfo(request);
PrintWriter out = response.getWriter();
String filename = fp.getName().toLowerCase();
// This was never used!!!
String end = "</BODY></HTML>";
response.setContentType("text/html");
out.println(HTML_DOCTYPE + "<HTML>\n<HEAD><TITLE>" + filename + "</TITLE></HEAD>\r\n<BODY>\r\n<H1>Directory " + filename
+ "</H1>\r\n");
out.println(getStylesheetHTML(request));
if (!listFiles) {
out.println("Directory listing disabled by administrator.");
} else if (!fp.isDirectory()) {
out.println("Requested path is not a directory.");
} else {
out.println("");
File files[] = fp.listFiles();
ArrayList filenames = new ArrayList();
ArrayList directories = new ArrayList();
for (int i = 0; i < files.length; i++) {
String name = files[i].getName();
if (files[i].isDirectory()) {
directories.add(name);
} else {
filenames.add(name);
}
}
Collections.sort(directories);
Collections.sort(filenames);
if (!pathInfo.endsWith("/")) {
pathInfo += '/';
}
HtmlListElement filelist = new HtmlListElement("Sub-Directories");
for (Iterator dir = directories.iterator(); dir.hasNext();) {
String url = fileURL(request, response, pathInfo, (String) dir.next());
filelist.addElement(url);
}
filelist.generate(out);
filelist = new HtmlListElement("Files");
for (Iterator file = filenames.iterator(); file.hasNext();) {
String url = fileURL(request, response, pathInfo, (String) file.next());
filelist.addElement(url);
}
filelist.generate(out);
}
out.println(end);
}
public void init(ServletConfig config)
throws ServletException {
super.init(config);
listFiles = Boolean.valueOf(config.getInitParameter("listDirectories")).booleanValue();
}
}