View Javadoc

1   package uk.ac.ebi.intenz.webapp.helper;
2   
3   import java.util.*;
4   import uk.ac.ebi.intenz.domain.constants.XrefDatabaseConstant;
5   import uk.ac.ebi.intenz.domain.enzyme.EnzymeLink;
6   
7   /**
8    * This class ...
9    *
10   * @author Michael Darsow
11   * @version $Revision: 1.1 $ $Date: 2008/02/25 14:03:41 $
12   */
13  public class EnzymeLinkHelper {
14  
15  //  private static final Logger LOGGER = Logger.getLogger(EnzymeClassHelper.class);
16  
17    private EnzymeLinkHelper() {
18    }
19  
20    public static String renderLinks(SortedSet links, String ec) {
21      StringBuffer html = new StringBuffer();
22      Set databaseNames = new HashSet();
23      SortedSet uniprotLinks = new TreeSet();
24      SortedSet otherLinks = new TreeSet();
25      for (Iterator it = links.iterator(); it.hasNext();) {
26        EnzymeLink link = (EnzymeLink) it.next();
27        if (link.getXrefDatabaseConstant() == XrefDatabaseConstant.SWISSPROT) {
28          uniprotLinks.add(link);
29          continue;
30        }
31        otherLinks.add(link);
32        databaseNames.add(link.getXrefDatabaseConstant().getDisplayName());
33      }
34      html.append("<div style=\"margin-left: 2em\">");
35      html.append(renderIubmbLinks(otherLinks, ec));
36      html.append("\n<br/><br/>\n");
37      html.append(renderUniprotLinks(uniprotLinks, ec));
38      html.append("</div>");
39  
40      return html.toString();
41    }
42  
43    public static String renderIubmbLinks(SortedSet links, String ec) {
44      StringBuffer html = new StringBuffer();
45      int iii = 0;
46      List casNumbers = new ArrayList();
47      for (Iterator it = links.iterator(); it.hasNext(); iii++) {
48        EnzymeLink link = (EnzymeLink) it.next();
49        if (link.getXrefDatabaseConstant().getDisplayName().equals(XrefDatabaseConstant.CAS.getDatabaseCode())) {
50          if (!link.getAccession().equals("")) casNumbers.add(link);
51          continue;
52        }
53        if (html.length() > 0) html.append(", ");
54        html.append("<a href=\"")
55        	.append(link.getFullUrl(ec))
56        	.append("\" target=\"_blank\"");
57        // Hovers:
58        if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.DIAGRAM)
59      		  || link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.MIM)){
60      	  html.append(" title=\"").append(link.getName()).append('"');
61        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.PROSITE)){
62      	  html.append(" title=\"Database of protein families and domains\"");
63        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.BRENDA)){
64      	  html.append(" title=\"A comprehensive enzyme information system (Cologne University Bioinformatics Center)\"");
65        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.CSA)){
66      	  html.append(" title=\"Catalyic Site Atlas\"");
67        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.ENZYME)){
68      	  html.append(" title=\"ENZYME database at Expert Protein Analysis SYstem (Swiss Institute of Bioinformatics)\"");
69        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.ERGO)){
70      	  html.append(" title=\"ERGO Light: curated database of public and proprietary genomic DNA\"");
71        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.MIM)){
72      	  html.append(" title=\"Online Mendelian Inheritance in Man: a catalog of human genes and genetic disorders (NCBI)");
73        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.PDB)){
74      	  html.append(" title=\"Known enzyme structures deposited in the Protein Data Bank (PDB)\"");
75        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.MEROPS)){
76      	  html.append(" title=\"Information resource for peptidases and the proteins that inhibit them\"");
77        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.UMBBD)){
78      	  html.append(" title=\"University of Minnesota Biocatalysis/Biodegradation Database\"");
79        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.NIST74)){
80      	  html.append(" title=\"Thermodynamics of Enzyme-Catalyzed Reactions\"");
81        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.GO)){
82      	  html.append(" title=\"Gene Ontology: "+ link.getName() +"\"");
83        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.KEGG)){
84      	  html.append(" title=\"KEGG ENZYME: a part of the KEGG (Kyoto Encyclopedia of Genes and Genomes) LIGAND database\"");
85        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.NC_IUBMB)){
86      	  html.append(" title=\"Nomenclature Comitee of the IUBMB\"");
87        }
88        html.append(">");
89        // Link text:
90        if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.GO)){
91      	  html.append(link.getAccession());
92        } else if (link.getXrefDatabaseConstant().equals(XrefDatabaseConstant.PROSITE)){
93      	  html.append("PROSITE:").append(link.getAccession());
94        } else {
95      	  html.append(link.getXrefDatabaseConstant().getDisplayName());
96        }
97        html.append("</a>");
98      }
99      if (casNumbers.size() > 0){
100       if (html.length() > 0) html.append(", ");
101       html.append("CAS Registry Number");
102       if (casNumbers.size() > 1) html.append("s");
103       html.append(": ");
104       for (int i = 0; i < casNumbers.size(); i++){
105           EnzymeLink cas = (EnzymeLink) casNumbers.get(i);
106           if (i > 0) html.append(", ");
107           html.append(cas.getAccession());
108           String dc = cas.getDataComment();
109           if (dc != null && dc.length() > 0){
110         	  html.append(" (").append(dc).append(")");
111           }
112       }
113     }
114     return html.toString();
115   }
116 
117   public static String renderUniprotLinks(SortedSet links, String ec) {
118 //    Set uniprotLinks = getUniprotLinks(links);
119     if (links == null) throw new NullPointerException("Parameter 'links' must not be null.");
120     StringBuffer html = new StringBuffer();
121     if (links.size() > 0) {
122 //      html.append("<tr>\n");
123 //      html.append("<td valign=\"top\" nowrap=\"nowrap\" colspan=\"2\">\n");
124 
125       html.append("<table border=\"0\"><tr><td valign=\"top\" nowrap=\"nowrap\" width=\"130\">");
126       html.append("<b title=\"UniProt Knowledge Base: curated protein sequence database\">UniProtKB/Swiss-Prot</b>");
127       if (links.size() > 9) {
128         html.append(" (").append(links.size()).append("):<br/>");
129         html.append(" <span class=\"link_url\">[<a class=\"link\" id=\"sp_more\" href=\"javascript:fold('sp', 'sp_more', 'show', 'hide');\">show</a>]</span>\n");
130       } else {
131         html.append(':');
132       }
133       html.append("</td>\n");
134       html.append("<td valign=\"top\" align=\"left\" nowrap=\"nowrap\" width=\"100%\">\n");
135       if (links.size() > 9) {
136         html.append("&nbsp;");
137         html.append("<div id=\"sp\" style=\"display:none\">\n");
138       }
139       html.append("<table border=\"0\" celltabbing=\"3\">\n");
140       int count = 0;
141       for (Iterator it = links.iterator(); it.hasNext();) {
142         EnzymeLink uniprotLink = (EnzymeLink) it.next();
143         if (count % 2 > 0 || count == 0) {
144           if (count == 0) html.append("<tr>\n");
145           html.append("<td valign=\"top\"><a target=\"_blank\" href=\"");
146           html.append(uniprotLink.getFullUrl(ec));
147           html.append("\">");
148           html.append(uniprotLink.getAccession());
149           html.append("</a></td>\n");
150           html.append("<td valign=\"top\">\n");
151           html.append(uniprotLink.getName());
152           html.append("</td>\n");
153           html.append("<td>&nbsp;</td>\n");
154           if(!it.hasNext()) html.append("</tr>\n");
155           count++;
156         } else {
157           html.append("<td valign=\"top\"><a target=\"_blank\" href=\"");
158           html.append(uniprotLink.getFullUrl(ec));
159           html.append("\">");
160           html.append(uniprotLink.getAccession());
161           html.append("</a></td>\n");
162           html.append("<td valign=\"top\">\n");
163           html.append(uniprotLink.getName());
164           html.append("</td>\n");
165           html.append("</tr>\n");
166           count = 0;
167         }
168       }
169       html.append("</table></td></tr>\n");
170       if (links.size() > 9) html.append("</div>\n");
171       html.append("</td></tr></table>");
172 //      html.append("</td></tr>");
173       html.append("\n");
174     }
175 
176     return html.toString();
177   }
178 
179   private static String getLinkHTMLTableRow(EnzymeLink link, String ec, boolean isNotFirstLink) {
180     final String displayName = link.getXrefDatabaseConstant().getDisplayName();
181     StringBuffer html = new StringBuffer();
182     html.append("<tr>\n");
183     html.append("<td nowrap=\"nowrap\" colspan=\"2\">\n");
184 
185     html.append("<table border=\"0\"><tr><td nowrap=\"nowrap\" width=\"80px\">");
186 
187     if (isNotFirstLink) {
188       html.append("&nbsp;");
189     } else {
190       html.append("<b>");
191       html.append(displayName);
192       html.append(":</b>\n");
193     }
194     html.append("</td>\n");
195     html.append("<td class=\"link_url\" nowrap=\"nowrap\">(");
196     if (displayName.equals("BRENDA") || displayName.equals("KEGG") ||
197         displayName.equals("GO") ||
198         displayName.equals("EXPASY") || displayName.equals("ERGO") ||
199         displayName.equals("NIST 74")) {
200       html.append("<a class=\"link\" target=\"new\" href=\"" + link.getFullUrl(ec) + "\">");
201       html.append(link.getFullUrl(ec));
202       html.append("</a>");
203     }
204 
205     if (displayName.equals("PROSITE") || displayName.equals("CAS")) {
206       if (displayName.equals("PROSITE")) {
207         html.append("<a class=\"link\" target=\"new\" href=\"" + link.getFullUrl(ec) + "\">");
208         html.append(link.getFullUrl(ec));
209         html.append("</a>");
210       }
211       if (displayName.equals("CAS") && !link.getAccession().equals(""))
212         html.append(link.getAccession());
213     }
214 
215     if (displayName.equals("MIM")) {
216       html.append(link.getName());
217       html.append(" MIM:");
218       html.append(link.getAccession());
219     }
220 
221     if (displayName.equals("DIAGRAM")) {
222       html.append("<a class=\"link\" target=\"new\" href=\"" + link.getFullUrl(ec) + "\">");
223       html.append(link.getName());
224     }
225 
226     if (displayName.equals("UM-BBD") || displayName.equals("MEROPS")) {
227       html.append("<a class=\"link\" target=\"new\" href=\"" + link.getFullUrl(ec) + "\">");
228       html.append(link.getFullUrl(ec));
229       html.append("</a>");
230     }
231     html.append(")</td></tr>\n");
232 
233     html.append("</table></td></tr>\n");
234 
235     return html.toString();
236   }
237 
238   private static Set getUniprotLinks(List links) {
239     Set sortedlinks = new TreeSet();
240     for (int iii = 0; iii < links.size(); iii++) {
241       EnzymeLink enzymeLink = (EnzymeLink) links.get(iii);
242       if (enzymeLink.getXrefDatabaseConstant() == XrefDatabaseConstant.SWISSPROT)
243         sortedlinks.add(enzymeLink);
244     }
245     return sortedlinks;
246   }
247 
248 }