View Javadoc

1   package uk.ac.ebi.intenz.webapp.controller.modification;
2   
3   import java.sql.Connection;
4   import java.sql.SQLException;
5   import java.util.Enumeration;
6   
7   import javax.servlet.http.HttpServletRequest;
8   import javax.servlet.http.HttpServletResponse;
9   
10  import org.apache.log4j.Logger;
11  import org.apache.struts.action.ActionForm;
12  import org.apache.struts.action.ActionForward;
13  import org.apache.struts.action.ActionMapping;
14  import org.apache.struts.action.ActionMessage;
15  import org.apache.struts.action.ActionMessages;
16  
17  import uk.ac.ebi.intenz.domain.constants.Status;
18  import uk.ac.ebi.intenz.domain.exceptions.EcException;
19  import uk.ac.ebi.intenz.mapper.AuditPackageMapper;
20  import uk.ac.ebi.intenz.mapper.CommonProceduresMapper;
21  import uk.ac.ebi.intenz.mapper.EnzymeEntryMapper;
22  import uk.ac.ebi.intenz.mapper.EventPackageMapper;
23  import uk.ac.ebi.intenz.webapp.dtos.EcSearchForm;
24  import uk.ac.ebi.intenz.webapp.dtos.EnzymeDTO;
25  import uk.ac.ebi.intenz.webapp.exceptions.DeregisterException;
26  import uk.ac.ebi.intenz.webapp.utilities.EntryLockSingleton;
27  import uk.ac.ebi.intenz.webapp.utilities.UnitOfWork;
28  
29  /**
30   * This Action ...
31   *
32   * @author Michael Darsow
33   * @version $Revision: 1.3 $ $Date: 2008/11/17 17:14:10 $
34   */
35  public class AmendEntryAction extends CurationAction {
36    private static final Logger LOGGER =
37  	  Logger.getLogger(AmendEntryAction.class.getName());
38    private final static String ERROR_FWD = "error";
39    private final static String SEARCH_BY_EC_ACTION_FWD = "searchEc";
40  
41      @Override
42    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
43                                 HttpServletResponse response) throws Exception {
44      // Do standard checks in the parent's execute method.
45      ActionForward forward = super.execute(mapping, form, request, response);
46      if (forward != null) return forward;
47  
48       Enumeration enumeration = request.getParameterNames();
49       while (enumeration.hasMoreElements()){
50          String ele = (String) enumeration.nextElement();
51          LOGGER.debug(ele+": "+request.getParameter(ele));
52       }
53  
54      ActionMessages errors = new ActionMessages();
55      EnzymeDTO enzymeDTO = (EnzymeDTO) form;
56  
57      boolean keepApproved = enzymeDTO.getStatusCode().equals(Status.APPROVED.getCode());
58      Connection con = (Connection) request.getSession().getAttribute("connection");
59      EntryLockSingleton els = (EntryLockSingleton) request.getSession().getServletContext().getAttribute("entryLock");
60      EnzymeEntryMapper enzymeEntryMapper = new EnzymeEntryMapper();
61      UnitOfWork unitOfWork = (UnitOfWork) request.getSession().getAttribute("uow");
62      try {
63        // Check if a clone already exists.
64        if (!keepApproved && enzymeEntryMapper.cloneExists(new Long(enzymeDTO.getId()), con)) {
65          errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.application.clone.exists", enzymeDTO.getEc()));
66          saveErrors(request, errors);
67          els.releaseLock(enzymeDTO.getId()); // release lock
68          request.setAttribute("title", "Error - IntEnz Curator Application");
69          return mapping.findForward(ERROR_FWD);
70        }
71  
72        // Set the standard remark in the audit tables.
73        AuditPackageMapper auditPackageMapper = new AuditPackageMapper();
74        auditPackageMapper.setRemark(AuditPackageMapper.STANDARD_REMARK, con);
75  
76        if (!keepApproved) {
77          CommonProceduresMapper commonProceduresMapper = new CommonProceduresMapper();
78          Long newEnzymeId = commonProceduresMapper.createClone(new Long(enzymeDTO.getId()), con);
79          LOGGER.info("EC " + enzymeDTO.getEc() + " (ID: " + enzymeDTO.getId() + ") cloned. New enzyme ID: " + newEnzymeId);
80  
81          // Store event.
82          EventPackageMapper eventPackageMapper = new EventPackageMapper();
83          eventPackageMapper.insertFutureModificationEvent(new Long(enzymeDTO.getId()), newEnzymeId, con);
84  
85          enzymeDTO.setId(newEnzymeId.toString());
86        }
87  
88        // Commit
89        LOGGER.info("Committing form data.");
90        unitOfWork.commit(enzymeDTO, con);
91        LOGGER.info("Data subimtted");
92  
93        con.commit();
94  
95        LOGGER.info("Amend event finished.");
96      } catch (SQLException e){
97          con.rollback();
98          throw e;
99      } catch (EcException e) {
100       errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.application.ec.invalid", enzymeDTO.getTransferredEc()));
101       saveErrors(request, errors);
102       keepToken(request);
103       return mapping.getInputForward();
104     } catch (DeregisterException e) {
105       LOGGER.error(e.getMessage());
106       throw e;
107     } finally { // release lock
108       els.releaseLock(enzymeDTO.getId());
109       LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeDTO.getEc() + " released.");
110     }
111 
112     // Forward to 'searchEc' Action to show both entries.
113     LOGGER.info("Searching for EC " + enzymeDTO.getEc());
114     EcSearchForm ecSearchForm = new EcSearchForm();
115     ecSearchForm.setEc(enzymeDTO.getEc());
116     request.setAttribute("ecSearchForm", ecSearchForm);
117     return mapping.findForward(SEARCH_BY_EC_ACTION_FWD);
118   }
119 
120 }