View Javadoc
1   package uk.ac.ebi.intenz.webapp.controller;
2   
3   import java.io.IOException;
4   import java.sql.SQLException;
5   import java.util.Map;
6   import java.util.PropertyResourceBundle;
7   
8   import javax.servlet.ServletContext;
9   import javax.servlet.ServletException;
10  
11  import org.apache.log4j.Logger;
12  
13  import uk.ac.ebi.intenz.domain.enzyme.EnzymeEntry;
14  import uk.ac.ebi.intenz.domain.exceptions.DomainException;
15  import uk.ac.ebi.intenz.mapper.EnzymeEntryMapper;
16  import uk.ac.ebi.intenz.webapp.utilities.IntEnzMessenger;
17  import uk.ac.ebi.rhea.mapper.MapperException;
18  
19  /**
20   * This command handles enzyme ID requests.
21   * 
22   * @author Michael Darsow
23   * @version 0.9 - 21-July-2003
24   */
25  public class SearchIDCommand extends DatabaseCommand {
26  
27  	public static final Logger LOGGER = Logger.getLogger(SearchIDCommand.class);
28  
29  	/**
30  	 * TBD
31  	 * 
32  	 * @throws ServletException
33  	 * @throws IOException
34  	 */
35  	public void process() throws ServletException, IOException {
36  		String id = request.getParameter("id");
37  
38  		if (id != null) {
39  			EnzymeEntry enzymeEntry = findEnzymeEntry(new Long(id));
40  			if (enzymeEntry != null) {
41  				request.setAttribute("result", enzymeEntry);
42  				forward("/entry.jsp");
43  			} else {
44  				if (request.getAttribute("message") != null) {
45  					forward("/error.jsp");
46  				} else {
47  					request.setAttribute("message",
48  							"The enzyme with the given ID: <b>" + id
49  									+ "</b> does not exist.");
50  					forward("/notFound.jsp"); // No result found.
51  				}
52  			}
53  		} else {
54  			request.setAttribute(
55  					"message",
56  					"The <b>id</b> parameter has to be set to be able to search for an enzyme using its ID.");
57  			forward("/error.jsp");
58  			return;
59  		}
60  	}
61  
62  	// ------------------- PRIVATE METHODS ------------------------
63  
64  	/**
65  	 * Calls the according <code>find()</code> method and handles empty results
66  	 * and SQL exceptions.
67  	 * 
68  	 * @param id
69  	 *            ID of the enzyme to search for.
70  	 * @return An <code>EnzymeEntry</code> instance or <code>null</code>.
71  	 */
72  	protected EnzymeEntry findEnzymeEntry(Long id) {
73  		EnzymeEntry enzymeEntry = null;
74  
75  		ServletContext application = request.getSession().getServletContext();
76  		@SuppressWarnings("unchecked")
77  		Map<Long, EnzymeEntry> entries = (Map<Long, EnzymeEntry>) application
78  				.getAttribute("entries_id");
79  
80  		// Check if object already stored in the cache.
81  		if (entries.containsKey(id)) {
82  			enzymeEntry = (EnzymeEntry) entries.get(id);
83  		} else {
84  			try {
85  				enzymeEntry = enzymeEntryMapper.findById(id, con);
86  				if (enzymeEntry != null) {
87  					entries.put(id, enzymeEntry);
88  				}
89  			} catch (SQLException e) {
90  				IntEnzMessenger.sendError(this.getClass().toString(), e
91  						.getMessage(), (String) request.getSession()
92  						.getAttribute("user"));
93  				request.setAttribute("message", e.getMessage());
94  			} catch (MapperException e) {
95  				IntEnzMessenger.sendError(this.getClass().toString(), e
96  						.getMessage(), (String) request.getSession()
97  						.getAttribute("user"));
98  				request.setAttribute("message", e.getMessage());
99  			} catch (DomainException e) {
100 				LOGGER.error("Searching by ID", e);
101 				PropertyResourceBundle intenzMessages = (PropertyResourceBundle) request
102 						.getSession().getServletContext()
103 						.getAttribute("intenz.messages");
104 				IntEnzMessenger.sendError(this.getClass().toString(),
105 						intenzMessages.getString(e.getMessageKey()),
106 						(String) request.getSession().getAttribute("user"));
107 				request.setAttribute("message", e.getMessage());
108 			} finally {
109 				try {
110 					con.close();
111 				} catch (SQLException e) {
112 					IntEnzMessenger.sendError(this.getClass().toString(), e
113 							.getMessage(), (String) request.getSession()
114 							.getAttribute("user"));
115 					request.setAttribute("message", e.getMessage());
116 					return null;
117 				}
118 			}
119 		}
120 		return enzymeEntry;
121 	}
122 }