Dictionary/src/java/org/thdl/lex/LexActionServlet.java

266 lines
8.5 KiB
Java

package org.thdl.lex;
import java.io.IOException;
import java.util.HashMap;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.thdl.lex.commands.AbortCommand;
import org.thdl.lex.commands.Command;
import org.thdl.lex.commands.CommandException;
import org.thdl.lex.commands.CommandToken;
import org.thdl.lex.commands.DisplayCommand;
import org.thdl.lex.commands.FindCommand;
import org.thdl.lex.commands.GetInsertFormCommand;
import org.thdl.lex.commands.GetRemoveFormCommand;
import org.thdl.lex.commands.GetUpdateFormCommand;
import org.thdl.lex.commands.InsertCommand;
import org.thdl.lex.commands.NullCommand;
import org.thdl.lex.commands.PreferencesCommand;
import org.thdl.lex.commands.RemoveCommand;
import org.thdl.lex.commands.UpdateCommand;
import org.thdl.lex.component.LexComponent;
/**
* Description of the Class
*
* @author travis
* @created October 1, 2003
*/
public class LexActionServlet extends HttpServlet {
//attributes
private HashMap commands;
//accessors
/**
* Sets the commands attribute of the LexActionServlet object
*
* @param commands
* The new commands value
* @since
*/
public void setCommands(HashMap commands) {
this.commands = commands;
}
/**
* Gets the commands attribute of the LexActionServlet object
*
* @return The commands value
* @since
*/
public HashMap getCommands() {
return commands;
}
//helper methods
/**
* Description of the Method
*
* @param config
* Description of Parameter
* @exception ServletException
* Description of Exception
* @since
*/
public void init(ServletConfig config) throws ServletException {
try {
super.init(config);
initCommands();
config.getServletContext().setAttribute("flatData",
new LexFlatDataRepository());
/*
* LexSourceRepository sources = LexSourceRepository.getInstance();
* sources.setOaiServer(
* config.getServletContext().getInitParameter( "oaiServer" ) );
* sources.setOaiMetadataPrefix(
* config.getServletContext().getInitParameter( "oaiMetadataPrefix" ) );
* sources.setOaiHome( config.getServletContext().getInitParameter(
* "oaiHome" ) ); sources.setOaiLocalCopy(
* config.getServletContext().getInitParameter( "oaiLocalCopy" ) );
* //int oaiDelay = Integer.parseInt(
* config.getServletContext().getInitParameter( "oaiRefreshDelay" ) );
* sources.setOaiRefreshDelay( 24 );
* config.getServletContext().setAttribute( "sources", sources );
*/
String delay = config.getInitParameter("globalDataRefreshDelay");
long refreshDelay = Long.parseLong(delay) * 1000;
String recent = config.getInitParameter("recentItems");
int recentItems = Integer.parseInt(recent);
Global global = new Global(recentItems, refreshDelay);
config.getServletContext().setAttribute(
LexConstants.GLOBAL_CONTEXT_ATTR, global);
LexLogger.debugComponent(global);
System.setProperty("java.awt.headless", "true");
} catch (Exception e) {
throw new ServletException(e);
}
}
/**
* Description of the Method
*
* @param req
* Description of Parameter
* @param res
* Description of Parameter
* @exception ServletException
* Description of Exception
* @exception IOException
* Description of Exception
* @since
*/
public void service(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
/*
* LexLogger.debug( "Checking Request state at start of
* LexActionServlet.service()" ); LexLogger.logRequestState( req );
* LexLogger.logSessionState( req );
*/
String next;
try {
String cmd = req.getParameter(LexConstants.COMMAND_REQ_PARAM);
Command command = lookupCommand(cmd);
LexComponent component = (LexComponent) req
.getAttribute(LexConstants.COMPONENT_REQ_ATTR);
next = command.execute(req, component);
CommandToken.set(req);
} catch (CommandException e) {
req.setAttribute("javax.servlet.jsp.jspException", e);
next = LexConstants.ERROR_PAGE;
try {
LexComponentRepository.cleanup();
} catch (LexRepositoryException lre) {
Exception ex = new Exception(
"LexComponentRepository couldn't clean up after Exception because: "
+ lre.getMessage(), e);
req.setAttribute("javax.servlet.jsp.jspException", ex);
}
} catch (Exception e) {
req.setAttribute("javax.servlet.jsp.jspException", e);
next = LexConstants.ERROR_PAGE;
try {
LexComponentRepository.cleanup();
} catch (LexRepositoryException lre) {
Exception ex = new Exception(
"LexComponentRepository couldn't clean up after Exception because: "
+ lre.getMessage(), e);
req.setAttribute("javax.servlet.jsp.jspException", ex);
}
}
RequestDispatcher rd;
rd = getServletContext().getRequestDispatcher(
LexConstants.JSP_DIR + next);
rd.forward(req, res);
LexLogger
.debug("Checking Request state at end of LexActionServlet.service()");
LexLogger.logRequestState(req);
LexLogger
.debug("Checking Session state at end of LexActionServlet.service()");
LexLogger.logSessionState(req);
LexLogger
.debug("Checking Context state at end of LexActionServlet.service()");
LexLogger.logContextState(getServletContext());
}
/**
* Description of the Method
*
* @param cmdKey
* Description of Parameter
* @return Description of the Returned Value
* @exception CommandException
* Description of Exception
* @since
*/
private Command lookupCommand(String cmdKey) throws CommandException {
if (cmdKey == null) {
cmdKey = "menu";
}
if (getCommands().containsKey(cmdKey)) {
return (Command) getCommands().get(cmdKey);
} else {
throw new CommandException("Invalid Command Identifier: '" + cmdKey
+ "'");
}
}
/**
* Description of the Method
*
* @since
*/
private void initCommands() {
HashMap commands = new HashMap();
commands.put("menu", new NullCommand("menu.jsp"));
commands.put("search", new NullCommand("search.jsp"));
commands.put("logout", new NullCommand("logout.jsp"));
commands.put("getMetaPrefsForm", new NullCommand("metaPrefsForm.jsp"));
commands.put("getMetaDefaultsForm", new NullCommand(
"metaDefaultsForm.jsp"));
commands.put("find", new FindCommand("displayEntry.jsp"));
commands.put("getInsertForm", new GetInsertFormCommand(
"displayForm.jsp?formMode=insert", Boolean.FALSE));
commands.put("getInsertTermForm", new GetInsertFormCommand(
"displayForm.jsp?formMode=insert", Boolean.TRUE));
commands.put("getTranslationForm", new GetInsertFormCommand(
"displayForm.jsp?formMode=insert", Boolean.FALSE));
commands.put("getAnnotationForm", new GetInsertFormCommand(
"displayForm.jsp?formMode=insert", Boolean.FALSE));
commands.put("getUpdateForm", new GetUpdateFormCommand(
"displayForm.jsp?formMode=update", Boolean.FALSE));
commands.put("getUpdateTermForm", new GetUpdateFormCommand(
"displayForm.jsp?formMode=update", Boolean.TRUE));
/*
* commands.put( "getAnnotationForm", new AnnotateCommand(
* "displayForm.jsp?formMode=insert" ) ); commands.put( "addAnnotation",
* new AddAnnotationCommand( "displayEntry.jsp", Boolean.TRUE ) );
*/
commands.put("insert", new InsertCommand("displayEntry.jsp",
Boolean.FALSE));
commands.put("insertTerm", new InsertCommand("displayEntry.jsp",
Boolean.TRUE));
commands.put("update", new UpdateCommand("displayEntry.jsp",
Boolean.FALSE));
commands.put("updateTerm", new UpdateCommand("displayEntry.jsp",
Boolean.TRUE));
commands.put("display", new DisplayCommand("displayEntry.jsp"));
commands.put("displayFull", new DisplayCommand("displayEntry.jsp"));
commands.put("editEntry", new DisplayCommand("displayEntry.jsp"));
commands.put("getRemoveForm", new GetRemoveFormCommand(
"displayForm.jsp?formMode=remove", Boolean.FALSE));
commands.put("getRemoveTermForm", new GetRemoveFormCommand(
"displayForm.jsp?formMode=remove", Boolean.TRUE));
commands.put("remove", new RemoveCommand("displayEntry.jsp",
Boolean.FALSE));
commands.put("removeTerm", new RemoveCommand("menu.jsp", Boolean.TRUE));
commands.put("setMetaPrefs", new PreferencesCommand("menu.jsp"));
commands.put("setMetaDefaults", new PreferencesCommand("menu.jsp"));
// commands.put( "refreshSources", new RefreshSourcesCommand( "test.jsp"
// ) );
commands.put("abort", new AbortCommand("menu.jsp"));
setCommands(commands);
}
}