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
9
10
11
12
13 public class EnzymeLinkHelper {
14
15
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
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
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
119 if (links == null) throw new NullPointerException("Parameter 'links' must not be null.");
120 StringBuffer html = new StringBuffer();
121 if (links.size() > 0) {
122
123
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(" ");
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> </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
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(" ");
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 }