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
28
29
30
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
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
47
48
49
50
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
58 AuditPackageMapper auditPackageMapper = new AuditPackageMapper();
59 auditPackageMapper.setRemark(AuditPackageMapper.STANDARD_REMARK, con);
60
61
62 LOGGER.info("Committing form data.");
63 unitOfWork.commit(enzymeDTO, con);
64 LOGGER.info("Data subimtted");
65
66
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
87 throw e;
88 } finally {
89 els.releaseLock(enzymeDTO.getId());
90 LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeDTO.getEc() + " released.");
91 }
92
93
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 }