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)
// --------------------------------------------------------- Public Methods
// See superclass for Javadoc
// Extract attributes and parameters we will need
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"));
|