View Javadoc
1   package uk.ac.ebi.intenz.webapp.controller.modification;
2   
3   import java.sql.Connection;
4   import java.sql.SQLException;
5   
6   import javax.servlet.http.HttpServletRequest;
7   import javax.servlet.http.HttpServletResponse;
8   
9   import org.apache.log4j.Logger;
10  import org.apache.struts.action.ActionForm;
11  import org.apache.struts.action.ActionForward;
12  import org.apache.struts.action.ActionMapping;
13  import org.apache.struts.action.ActionMessage;
14  import org.apache.struts.action.ActionMessages;
15  
16  import uk.ac.ebi.intenz.domain.constants.Status;
17  import uk.ac.ebi.intenz.domain.exceptions.EcException;
18  import uk.ac.ebi.intenz.mapper.AuditPackageMapper;
19  import uk.ac.ebi.intenz.mapper.EventPackageMapper;
20  import uk.ac.ebi.intenz.webapp.dtos.EcSearchForm;
21  import uk.ac.ebi.intenz.webapp.dtos.EnzymeDTO;
22  import uk.ac.ebi.intenz.webapp.exceptions.DeregisterException;
23  import uk.ac.ebi.intenz.webapp.utilities.EntryLockSingleton;
24  import uk.ac.ebi.intenz.webapp.utilities.UnitOfWork;
25  
26  /**
27   * This Action ...
28   *
29   * @author Michael Darsow
30   * @version $Revision: 1.3 $ $Date: 2008/11/17 17:14:10 $
31   */
32  public class CreateEntryUpdateAction extends CurationAction {
33    private static final Logger LOGGER =
34  	  Logger.getLogger(CreateEntryUpdateAction.class.getName());
35    private final static String SEARCH_BY_EC_ACTION_FWD = "searchEc";
36  
37    public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
38                                 HttpServletResponse response) throws Exception {
39      // Do standard checks in the parent's execute method.
40      ActionForward forward = super.execute(mapping, form, request, response);
41      if (forward != null) return forward;
42  
43      ActionMessages errors = new ActionMessages();
44      EnzymeDTO enzymeDTO = (EnzymeDTO) form;
45  
46      // Validate the entry's lists.
47  //    IntEnzValidations.validateEnzymeDTOLists(enzymeDTO, errors);
48  //    if (!errors.isEmpty()) {
49  //      saveErrors(request, errors);
50  //      return mapping.getInputForward();
51  //    }
52  
53      Connection con = (Connection) request.getSession().getAttribute("connection");
54      EntryLockSingleton els = (EntryLockSingleton) request.getSession().getServletContext().getAttribute("entryLock");
55      UnitOfWork unitOfWork = (UnitOfWork) request.getSession().getAttribute("uow");
56      try {
57        // Set the standard remark in the audit tables.
58        AuditPackageMapper auditPackageMapper = new AuditPackageMapper();
59        auditPackageMapper.setRemark(AuditPackageMapper.STANDARD_REMARK, con);
60  
61        // Commit
62        LOGGER.info("Committing form data.");
63        unitOfWork.commit(enzymeDTO, con);
64        LOGGER.info("Data subimtted");
65  
66        // Store event.
67        if (!enzymeDTO.getStatusCode().equals(Status.PRELIMINARY.getCode())){
68          EventPackageMapper eventPackageMapper = new EventPackageMapper();
69          eventPackageMapper.updateFutureCreationEvent(Integer.parseInt(enzymeDTO.getLatestHistoryEventGroupId()),
70                                                     Integer.parseInt(enzymeDTO.getLatestHistoryEventId()),
71                                                     enzymeDTO.getStatusCode(), con);
72        }
73        con.commit();
74  
75        LOGGER.info("Create event (update) finished.");
76      } catch (SQLException e){
77          con.rollback();
78          throw e;
79      } catch (EcException e) {
80        errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.application.ec.invalid", enzymeDTO.getTransferredEc()));
81        saveErrors(request, errors);
82        keepToken(request);
83        return mapping.getInputForward();
84      } catch (DeregisterException e) {
85        LOGGER.error(e.getMessage());
86        // Create standard error message (see 'struts_config.xml').
87        throw e;
88      } finally { // release lock
89        els.releaseLock(enzymeDTO.getId());
90        LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeDTO.getEc() + " released.");
91      }
92  
93      // Forward to 'searchEc' Action to show both entries.
94      LOGGER.info("Searching for EC " + enzymeDTO.getEc());
95      EcSearchForm ecSearchForm = new EcSearchForm();
96      ecSearchForm.setEc(enzymeDTO.getEc());
97      request.setAttribute("ecSearchForm", ecSearchForm);
98      return mapping.findForward(SEARCH_BY_EC_ACTION_FWD);
99    }
100 }