1 package uk.ac.ebi.intenz.webapp.controller.modification;
2
3 import java.sql.Connection;
4 import java.sql.SQLException;
5 import java.util.GregorianCalendar;
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.mapper.AuditPackageMapper;
19 import uk.ac.ebi.intenz.mapper.CommonProceduresMapper;
20 import uk.ac.ebi.intenz.mapper.EnzymeEntryMapper;
21 import uk.ac.ebi.intenz.mapper.EventPackageMapper;
22 import uk.ac.ebi.intenz.webapp.dtos.EcSearchForm;
23 import uk.ac.ebi.intenz.webapp.dtos.EnzymeDTO;
24 import uk.ac.ebi.intenz.webapp.exceptions.DeregisterException;
25 import uk.ac.ebi.intenz.webapp.utilities.EntryLockSingleton;
26 import uk.ac.ebi.intenz.webapp.utilities.UnitOfWork;
27
28
29
30
31
32
33
34 public class DeleteEntryAction extends CurationAction {
35 private static final Logger LOGGER =
36 Logger.getLogger(DeleteEntryAction.class.getName());
37 private final static String ERROR_FWD = "error";
38 private final static String SEARCH_BY_EC_ACTION_FWD = "searchEc";
39
40 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request,
41 HttpServletResponse response) throws Exception {
42
43 ActionForward forward = super.execute(mapping, form, request, response);
44 if (forward != null) return forward;
45
46 EnzymeDTO enzymeDTO = (EnzymeDTO) form;
47
48 Long enzymeId = new Long(enzymeDTO.getId());
49 Connection con = (Connection) request.getSession().getAttribute("connection");
50 EntryLockSingleton els = (EntryLockSingleton) request.getSession().getServletContext().getAttribute("entryLock");
51 EnzymeEntryMapper enzymeEntryMapper = new EnzymeEntryMapper();
52 ActionMessages errors = new ActionMessages();
53 UnitOfWork unitOfWork = (UnitOfWork) request.getSession().getAttribute("uow");
54 try {
55
56 if (enzymeEntryMapper.cloneExists(enzymeId, con)) {
57 errors.add(ActionMessages.GLOBAL_MESSAGE, new ActionMessage("errors.application.clone.exists", enzymeDTO.getEc()));
58 saveErrors(request, errors);
59 els.releaseLock(enzymeId.toString());
60 request.setAttribute("title", "Error - IntEnz Curator Application");
61 return mapping.findForward(ERROR_FWD);
62 }
63
64
65 AuditPackageMapper auditPackageMapper = new AuditPackageMapper();
66 auditPackageMapper.setRemark(AuditPackageMapper.STANDARD_REMARK, con);
67
68
69 CommonProceduresMapper commonProceduresMapper = new CommonProceduresMapper();
70 Long newEnzymeId = commonProceduresMapper.createClone(enzymeId, con);
71 LOGGER.info("EC " + enzymeDTO.getEc() + " (ID: " + enzymeId + ") cloned. New enzyme ID: " + newEnzymeId);
72 enzymeDTO.setId(newEnzymeId.toString());
73
74
75 enzymeDTO.setHistoryLine(getNewHistoryLine(enzymeDTO.getHistoryLine()));
76
77
78 enzymeDTO.setStatusCode(Status.SUGGESTED.getCode());
79 enzymeDTO.setStatusText(Status.SUGGESTED.toString());
80
81
82 LOGGER.info("Committing form data.");
83 unitOfWork.commit(enzymeDTO, con);
84 LOGGER.info("Data subimtted");
85
86
87 EventPackageMapper eventPackageMapper = new EventPackageMapper();
88 eventPackageMapper.insertFutureDeletionEvent(enzymeId, newEnzymeId, enzymeDTO.getLatestHistoryEventNote(), con);
89
90 con.commit();
91
92 LOGGER.info("Delete event stored.");
93 } catch (SQLException e){
94 con.rollback();
95 throw e;
96 } catch (DeregisterException e) {
97 LOGGER.error(e.getMessage());
98
99 throw e;
100 } finally {
101 els.releaseLock(enzymeId.toString());
102 LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeId + " released.");
103 }
104
105
106 EcSearchForm ecSearchForm = new EcSearchForm();
107 ecSearchForm.setEc(enzymeDTO.getEc());
108 request.setAttribute("ecSearchForm", ecSearchForm);
109 return mapping.findForward(SEARCH_BY_EC_ACTION_FWD);
110 }
111
112
113
114
115
116
117
118 private String getNewHistoryLine(String oldHistory) {
119 assert oldHistory != null : "Parameter 'oldHistory' must not be null.";
120
121 GregorianCalendar gc = new GregorianCalendar();
122 int year = gc.get(GregorianCalendar.YEAR);
123 StringBuffer historyLine = new StringBuffer();
124 historyLine.append(oldHistory);
125 historyLine.append(", deleted ");
126 historyLine.append(year);
127 return historyLine.toString();
128 }
129 }