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.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   * This Action ...
30   *
31   * @author Michael Darsow
32   * @version $Revision: 1.3 $ $Date: 2008/11/17 17:14:10 $
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      // Do standard checks in the parent's execute method.
43      ActionForward forward = super.execute(mapping, form, request, response);
44      if (forward != null) return forward;
45  
46      EnzymeDTO enzymeDTO = (EnzymeDTO) form;
47  //    EnzymeDTO enzymeDTO = (EnzymeDTO) request.getSession().getAttribute("enzymeDTO");
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        // Check if a clone already exists.
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()); // release lock
60          request.setAttribute("title", "Error - IntEnz Curator Application");
61          return mapping.findForward(ERROR_FWD);
62        }
63  
64        // Set the standard remark in the audit tables.
65        AuditPackageMapper auditPackageMapper = new AuditPackageMapper();
66        auditPackageMapper.setRemark(AuditPackageMapper.STANDARD_REMARK, con);
67  
68        // Create clone.
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        // Set clone's history line.
75        enzymeDTO.setHistoryLine(getNewHistoryLine(enzymeDTO.getHistoryLine()));
76  
77        // Always set the status to 'suggested'.
78        enzymeDTO.setStatusCode(Status.SUGGESTED.getCode());
79        enzymeDTO.setStatusText(Status.SUGGESTED.toString());
80  
81        // Commit
82        LOGGER.info("Committing form data.");
83        unitOfWork.commit(enzymeDTO, con);
84        LOGGER.info("Data subimtted");
85  
86        // Store event.
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        // Create standard error message (see 'struts_config.xml').
99        throw e;
100     } finally { // release lock
101       els.releaseLock(enzymeId.toString());
102       LOGGER.info("Lock of EC " + enzymeDTO.getEc() + " (ID: " + enzymeId + " released.");
103     }
104 
105     // Forward to 'searchEc' Action to show both entries.
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    * Gets the new history line by appending 'deleted ...'.
114    *
115    * @param oldHistory The enzyme's old history.
116    * @return the new history line.
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 }