public org.apache.struts.action.ActionForward | execute(org.apache.struts.action.ActionMapping mapping, org.apache.struts.action.ActionForm form, javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response)Process the specified HTTP request, and create the corresponding HTTP
response (or forward to another web component that will create it).
Return an ActionForward instance describing where and how
control should be forwarded, or null if the response has
already been completed.
// --------------------------------------------------------- Public Methods
// Extract attributes and parameters we will need
Locale locale = getLocale(request);
MessageResources messages = getResources(request);
HttpSession session = request.getSession();
SubscriptionForm subform = (SubscriptionForm) form;
String action = subform.getAction();
if (action == null) {
action = "?";
}
if (log.isDebugEnabled()) {
log.debug("SaveSubscriptionAction: Processing " + action +
" action");
}
// Is there a currently logged on user?
User user = (User) session.getAttribute(Constants.USER_KEY);
if (user == null) {
if (log.isTraceEnabled()) {
log.trace(" User is not logged on in session "
+ session.getId());
}
return (mapping.findForward("logon"));
}
// Was this transaction cancelled?
if (isCancelled(request)) {
if (log.isTraceEnabled()) {
log.trace(" Transaction '" + action +
"' was cancelled");
}
session.removeAttribute(Constants.SUBSCRIPTION_KEY);
return (mapping.findForward("success"));
}
// Is there a related Subscription object?
Subscription subscription =
(Subscription) session.getAttribute(Constants.SUBSCRIPTION_KEY);
if ("Create".equals(action)) {
subscription =
user.createSubscription(request.getParameter("host"));
}
if (subscription == null) {
if (log.isTraceEnabled()) {
log.trace(" Missing subscription for user '" +
user.getUsername() + "'");
}
response.sendError(HttpServletResponse.SC_BAD_REQUEST,
messages.getMessage("error.noSubscription"));
return (null);
}
// Was this transaction a Delete?
if (action.equals("Delete")) {
if (log.isTraceEnabled()) {
log.trace(" Deleting mail server '" +
subscription.getHost() + "' for user '" +
user.getUsername() + "'");
}
user.removeSubscription(subscription);
session.removeAttribute(Constants.SUBSCRIPTION_KEY);
try {
UserDatabase database = (UserDatabase)
servlet.getServletContext().
getAttribute(Constants.DATABASE_KEY);
database.save();
} catch (Exception e) {
log.error("Database save", e);
}
return (mapping.findForward("success"));
}
// All required validations were done by the form itself
// Update the persistent subscription information
if (log.isTraceEnabled()) {
log.trace(" Populating database from form bean");
}
try {
PropertyUtils.copyProperties(subscription, subform);
} catch (InvocationTargetException e) {
Throwable t = e.getTargetException();
if (t == null)
t = e;
log.error("Subscription.populate", t);
throw new ServletException("Subscription.populate", t);
} catch (Throwable t) {
log.error("Subscription.populate", t);
throw new ServletException("Subscription.populate", t);
}
try {
UserDatabase database = (UserDatabase)
servlet.getServletContext().
getAttribute(Constants.DATABASE_KEY);
database.save();
} catch (Exception e) {
log.error("Database save", e);
}
// Remove the obsolete form bean and current subscription
if (mapping.getAttribute() != null) {
if ("request".equals(mapping.getScope()))
request.removeAttribute(mapping.getAttribute());
else
session.removeAttribute(mapping.getAttribute());
}
session.removeAttribute(Constants.SUBSCRIPTION_KEY);
// Forward control to the specified success URI
if (log.isTraceEnabled()) {
log.trace(" Forwarding to success page");
}
return (mapping.findForward("success"));
|