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
31
32
33
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
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
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());
68 request.setAttribute("title", "Error - IntEnz Curator Application");
69 return mapping.findForward(ERROR_FWD);
70 }
71
72
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
82 EventPackageMapper eventPackageMapper = new EventPackageMapper();
83 eventPackageMapper.insertFutureModificationEvent(new Long(enzymeDTO.getId()), newEnzymeId, con);
84
85 enzymeDTO.setId(newEnzymeId.toString());
86 }
87
88
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 {
108 els.releaseLock(enzymeDTO.getId());
109 LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeDTO.getEc() + " released.");
110 }
111
112
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 }