in progress
[jalview.git] / forester / java / src / org / forester / ws / seqdb / EbiDbEntry.java
1 // $Id:
2 // forester -- software libraries and applications
3 // for genomics and evolutionary biology research.
4 //
5 // Copyright (C) 2010 Christian M Zmasek
6 // Copyright (C) 2010 Sanford-Burnham Medical Research Institute
7 // All rights reserved
8 //
9 // This library is free software; you can redistribute it and/or
10 // modify it under the terms of the GNU Lesser General Public
11 // License as published by the Free Software Foundation; either
12 // version 2.1 of the License, or (at your option) any later version.
13 //
14 // This library is distributed in the hope that it will be useful,
15 // but WITHOUT ANY WARRANTY; without even the implied warranty of
16 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 // Lesser General Public License for more details.
18 //
19 // You should have received a copy of the GNU Lesser General Public
20 // License along with this library; if not, write to the Free Software
21 // Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
22 //
23 // Contact: phylosoft @ gmail . com
24 // WWW: https://sites.google.com/site/cmzmasek/home/software/forester
25
26 package org.forester.ws.seqdb;
27
28 import java.util.List;
29 import java.util.SortedSet;
30 import java.util.TreeSet;
31 import java.util.regex.Matcher;
32 import java.util.regex.Pattern;
33
34 import org.forester.go.GoTerm;
35 import org.forester.phylogeny.data.Accession;
36 import org.forester.phylogeny.data.Annotation;
37 import org.forester.util.ForesterUtil;
38
39 public final class EbiDbEntry implements SequenceDatabaseEntry {
40
41     //    public static SequenceDatabaseEntry createInstanceFromPlainText( final List<String> lines ) {
42     //        final EbiDbEntry e = new EbiDbEntry();
43     //        for( final String line : lines ) {
44     //            if ( line.startsWith( "PA" ) ) {
45     //                e.setPA( SequenceDbWsTools.extractFrom( line, "PA" ) );
46     //            }
47     //            else if ( line.startsWith( "DE" ) ) {
48     //                e.setDe( SequenceDbWsTools.extractFrom( line, "DE" ) );
49     //            }
50     //            else if ( line.startsWith( "OS" ) ) {
51     //                if ( line.indexOf( "(" ) > 0 ) {
52     //                    e.setOs( SequenceDbWsTools.extractFromTo( line, "OS", "(" ) );
53     //                }
54     //                else {
55     //                    e.setOs( SequenceDbWsTools.extractFrom( line, "OS" ) );
56     //                }
57     //            }
58     //            else if ( line.startsWith( "OX" ) ) {
59     //                if ( line.indexOf( "NCBI_TaxID=" ) > 0 ) {
60     //                    e.setTaxId( SequenceDbWsTools.extractFromTo( line, "NCBI_TaxID=", ";" ) );
61     //                }
62     //            }
63     //        }
64     //        return e;
65     //    }
66     public static SequenceDatabaseEntry createInstanceFromPlainTextForRefSeq( final List<String> lines ) {
67         final Pattern X_PATTERN = Pattern.compile( "^[A-Z]+" );
68         final Pattern chromosome_PATTERN = Pattern.compile( "\\s+/chromosome=\"(\\w+)\"" );
69         final Pattern map_PATTERN = Pattern.compile( "\\s+/map=\"([\\w+\\.])\"" );
70         final Pattern gene_PATTERN = Pattern.compile( "\\s+/gene=\"(.+)\"" );
71         final Pattern mim_PATTERN = Pattern.compile( "\\s+/db_xref=\"MIM:(\\d+)\"" );
72         final Pattern taxon_PATTERN = Pattern.compile( "\\s+/db_xref=\"taxon:(\\d+)\"" );
73         final Pattern interpro_PATTERN = Pattern.compile( "\\s+/db_xref=\"InterPro:([A-Z0-9]+)\"" );
74         final Pattern uniprot_PATTERN = Pattern.compile( "\\s+/db_xref=\"UniProtKB/[A-Za-z-]*:(\\w+)\"" );
75         final Pattern hgnc_PATTERN = Pattern.compile( "\\s+/db_xref=\"[A-Z:]*HGNC:(\\d+)\"" );
76         final Pattern geneid_PATTERN = Pattern.compile( "\\s+/db_xref=\"GeneID:(\\d+)\"" );
77         final Pattern pdb_PATTERN = Pattern.compile( "\\s+/db_xref=\"PDB:([A-Z0-9]+)\"" );
78         final Pattern ec_PATTERN = Pattern.compile( "\\s+/EC_number=\"([\\.\\-\\d]+)\"" );
79         final Pattern product_PATTERN = Pattern.compile( "\\s+/product=\"(\\w{1,10})\"" );
80         final EbiDbEntry e = new EbiDbEntry();
81         final StringBuilder def = new StringBuilder();
82         boolean in_definition = false;
83         boolean in_features = false;
84         boolean in_source = false;
85         boolean in_gene = false;
86         boolean in_cds = false;
87         boolean in_mrna = false;
88         boolean in_protein = false;
89         for( final String line : lines ) {
90             if ( line.startsWith( "ACCESSION " ) ) {
91                 e.setAccession( SequenceDbWsTools.extractFrom( line, "ACCESSION" ) );
92                 in_definition = false;
93             }
94             else if ( line.startsWith( "ID " ) ) {
95                 e.setAccession( SequenceDbWsTools.extractFromTo( line, "ID", ";" ) );
96                 in_definition = false;
97             }
98             else if ( line.startsWith( "DEFINITION " ) || ( line.startsWith( "DE " ) ) ) {
99                 boolean definiton = false;
100                 if ( line.startsWith( "DEFINITION " ) ) {
101                     definiton = true;
102                 }
103                 if ( line.indexOf( "[" ) > 0 ) {
104                     if ( definiton ) {
105                         x( def, ( SequenceDbWsTools.extractFromTo( line, "DEFINITION", "[" ) ) );
106                     }
107                     else {
108                         x( def, ( SequenceDbWsTools.extractFromTo( line, "DE", "[" ) ) );
109                     }
110                 }
111                 else if ( line.indexOf( "." ) > 0 ) {
112                     if ( definiton ) {
113                         x( def, ( SequenceDbWsTools.extractFromTo( line, "DEFINITION", "." ) ) );
114                     }
115                     else {
116                         x( def, ( SequenceDbWsTools.extractFromTo( line, "DE", "." ) ) );
117                     }
118                 }
119                 else {
120                     if ( definiton ) {
121                         x( def, ( SequenceDbWsTools.extractFrom( line, "DEFINITION" ) ) );
122                     }
123                     else {
124                         x( def, ( SequenceDbWsTools.extractFrom( line, "DE" ) ) );
125                     }
126                 }
127                 if ( definiton ) {
128                     in_definition = true;
129                 }
130             }
131             else if ( line.startsWith( "  ORGANISM " ) ) {
132                 if ( line.indexOf( "(" ) > 0 ) {
133                     e.setTaxonomyScientificName( SequenceDbWsTools.extractFromTo( line, "  ORGANISM", "(" ) );
134                 }
135                 else {
136                     e.setTaxonomyScientificName( SequenceDbWsTools.extractFrom( line, "  ORGANISM" ) );
137                 }
138                 //  in_def = false;
139             }
140             else if ( line.startsWith( "OS " ) ) {
141                 if ( line.indexOf( "(" ) > 0 ) {
142                     e.setTaxonomyScientificName( SequenceDbWsTools.extractFromTo( line, "OS", "(" ) );
143                 }
144                 else {
145                     e.setTaxonomyScientificName( SequenceDbWsTools.extractFrom( line, "OS" ) );
146                 }
147             }
148             else if ( line.startsWith( " " ) && in_definition ) {
149                 def.append( " " );
150                 if ( line.indexOf( "[" ) > 0 ) {
151                     def.append( SequenceDbWsTools.extractTo( line, "[" ) );
152                 }
153                 else if ( line.indexOf( "." ) > 0 ) {
154                     def.append( SequenceDbWsTools.extractTo( line, "." ) );
155                 }
156                 else {
157                     def.append( line.trim() );
158                 }
159             }
160             else {
161                 in_definition = false;
162             }
163             if ( !line.startsWith( "FT " ) && X_PATTERN.matcher( line ).find() ) {
164                 in_features = false;
165                 in_source = false;
166                 in_gene = false;
167                 in_cds = false;
168                 in_mrna = false;
169                 in_protein = false;
170                 // in_def = false;
171             }
172             if ( line.startsWith( "FEATURES " ) || line.startsWith( "FT " ) ) {
173                 in_features = true;
174             }
175             if ( in_features && ( line.startsWith( "     source " ) || line.startsWith( "FT   source " ) ) ) {
176                 in_source = true;
177                 in_gene = false;
178                 in_cds = false;
179                 in_mrna = false;
180                 in_protein = false;
181             }
182             if ( in_features && ( line.startsWith( "     gene " ) || line.startsWith( "FT   gene " ) ) ) {
183                 in_source = false;
184                 in_gene = true;
185                 in_cds = false;
186                 in_mrna = false;
187                 in_protein = false;
188             }
189             if ( in_features && ( line.startsWith( "     CDS " ) || line.startsWith( "FT   CDS " ) ) ) {
190                 in_source = false;
191                 in_gene = false;
192                 in_cds = true;
193                 in_mrna = false;
194                 in_protein = false;
195             }
196             if ( in_features && ( line.startsWith( "     Protein " ) || line.startsWith( "FT   Protein " ) ) ) {
197                 in_source = false;
198                 in_gene = false;
199                 in_cds = false;
200                 in_mrna = false;
201                 in_protein = true;
202             }
203             if ( in_features && ( line.startsWith( "     mRNA " ) || line.startsWith( "FT   mRNA " ) ) ) {
204                 in_source = false;
205                 in_gene = false;
206                 in_cds = false;
207                 in_mrna = true;
208                 in_protein = false;
209             }
210             if ( in_source ) {
211                 final Matcher ti = taxon_PATTERN.matcher( line );
212                 if ( ti.find() ) {
213                     e.setTaxId( ti.group( 1 ) );
214                 }
215                 final Matcher chr = chromosome_PATTERN.matcher( line );
216                 if ( chr.find() ) {
217                     e.setChromosome( chr.group( 1 ) );
218                 }
219                 final Matcher map = map_PATTERN.matcher( line );
220                 if ( map.find() ) {
221                     e.setMap( map.group( 1 ) );
222                 }
223             }
224             if ( in_cds || in_gene ) {
225                 final Matcher hgnc = hgnc_PATTERN.matcher( line );
226                 if ( hgnc.find() ) {
227                     e.addCrossReference( new Accession( hgnc.group( 1 ), "hgnc" ) );
228                 }
229                 final Matcher geneid = geneid_PATTERN.matcher( line );
230                 if ( geneid.find() ) {
231                     e.addCrossReference( new Accession( geneid.group( 1 ), "geneid" ) );
232                 }
233             }
234             if ( in_protein || in_cds || in_gene || in_mrna ) {
235                 final Matcher ec = ec_PATTERN.matcher( line );
236                 if ( ec.find() ) {
237                     e.addAnnotation( new Annotation( "EC", ec.group( 1 ) ) );
238                 }
239                 final Matcher gene = gene_PATTERN.matcher( line );
240                 if ( gene.find() ) {
241                     e.setGeneName( gene.group( 1 ) );
242                 }
243                 final Matcher uniprot = uniprot_PATTERN.matcher( line );
244                 if ( uniprot.find() ) {
245                     e.addCrossReference( new Accession( uniprot.group( 1 ), "uniprot" ) );
246                 }
247                 final Matcher interpro = interpro_PATTERN.matcher( line );
248                 if ( interpro.find() ) {
249                     e.addCrossReference( new Accession( interpro.group( 1 ), "interpro" ) );
250                 }
251                 final Matcher mim = mim_PATTERN.matcher( line );
252                 if ( mim.find() ) {
253                     e.addCrossReference( new Accession( mim.group( 1 ), "mim" ) );
254                 }
255                 final Matcher product = product_PATTERN.matcher( line );
256                 if ( product.find() ) {
257                     e.setSequenceSymbol( product.group( 1 ) );
258                 }
259                 final Matcher pdb = pdb_PATTERN.matcher( line );
260                 if ( pdb.find() ) {
261                     e.addCrossReference( new Accession( pdb.group( 1 ), "pdb" ) );
262                 }
263             }
264         }
265         if ( def.length() > 0 ) {
266             e.setSequenceName( def.toString().trim() );
267         }
268         return e;
269     }
270     private String _map;
271     private String _chromosome;
272
273     private void setMap( String map ) {
274         _map = map;
275         
276     }
277
278     private void setChromosome( String chromosome ) {
279         _chromosome = chromosome;
280         
281     }
282
283     @Override
284     public String getMap( ) {
285         return _map;
286         
287     }
288     @Override
289     public String  getChromosome() {
290         return _chromosome;
291         
292     }
293     
294     
295     private static void x( final StringBuilder sb, final String s ) {
296         if ( sb.length() > 0 ) {
297             sb.append( " " );
298         }
299         sb.append( s.trim() );
300     }
301     // FIXME actually this is NCBI entry
302     //http://www.ebi.ac.uk/Tools/dbfetch/dbfetch/emb/AAR37336/
303     private String                _pa;
304     private String                _de;
305     private String                _os;
306     private String                _tax_id;
307     private String                _symbol;
308     private String                _provider;
309     private SortedSet<Accession>  _cross_references;
310     private SortedSet<Annotation> _annotations;
311     private String                _gene_name;
312
313     // TODO  PUBMED   15798186
314     //TODO  (FEATURES) 
315     // source /db_xref="taxon:9606"
316     // gene            1..2881  
317     // /gene="RBM39" 
318     //
319     // /db_xref="MIM:604739"  
320     // CDS
321     // /gene="RBM39"
322     // /db_xref="MIM:604739"
323     // /db_xref="InterPro:IPR002475"
324     // /product="Bcl-2"
325     // /db_xref="UniProtKB/TrEMBL:Q5J7V1" <- reparse?
326     //
327     // Protein
328     /*
329     LOCUS       NM_184234               2881 bp    mRNA    linear   PRI 16-JUN-2013
330     DEFINITION  Homo sapiens RNA binding motif protein 39 (RBM39), transcript
331             variant 1, mRNA.
332     ACCESSION   NM_184234
333     VERSION     NM_184234.2  GI:336176061
334     KEYWORDS    RefSeq.
335     SOURCE      Homo sapiens (human)
336     ORGANISM  Homo sapiens
337             Eukaryota; Metazoa; Chordata; Craniata; Vertebrata; Euteleostomi;
338             Mammalia; Eutheria; Euarchontoglires; Primates; Haplorrhini;
339             Catarrhini; Hominidae; Homo.
340     REFERENCE   1  (bases 1 to 2881)
341     AUTHORS   Sillars-Hardebol,A.H., Carvalho,B., Belien,J.A., de Wit,M.,
342             Delis-van Diemen,P.M., Tijssen,M., van de Wiel,M.A., Ponten,F.,
343             Meijer,G.A. and Fijneman,R.J.
344     TITLE     CSE1L, DIDO1 and RBM39 in colorectal adenoma to carcinoma
345             progression
346     JOURNAL   Cell Oncol (Dordr) 35 (4), 293-300 (2012)
347     PUBMED   22711543
348     REMARK    GeneRIF: Data show that CSE1L, DIDO1 and RBM39 mRNA expression
349             levels correlated with chromosome 20q DNA copy number status.
350     REFERENCE   2  (bases 1 to 2881)
351     AUTHORS   Huang,G., Zhou,Z., Wang,H. and Kleinerman,E.S.
352     TITLE     CAPER-alpha alternative splicing regulates the expression of
353             vascular endothelial growth factor(1)(6)(5) in Ewing sarcoma cells
354     JOURNAL   Cancer 118 (8), 2106-2116 (2012)
355     PUBMED   22009261
356     REMARK    GeneRIF: Increased VEGF(165) expression is secondary to the
357             down-regulation of CAPER-alpha by EWS/FLI-1. CAPER-alpha mediates
358             alternative splicing and controls the shift from VEGF(189) to
359             VEGF(165) .
360     REFERENCE   3  (bases 1 to 2881)
361     AUTHORS   Han,B., Stockwin,L.H., Hancock,C., Yu,S.X., Hollingshead,M.G. and
362             Newton,D.L.
363     TITLE     Proteomic analysis of nuclei isolated from cancer cell lines
364             treated with indenoisoquinoline NSC 724998, a novel topoisomerase I
365             inhibitor
366     JOURNAL   J. Proteome Res. 9 (8), 4016-4027 (2010)
367     PUBMED   20515076
368     REMARK    Erratum:[J Proteome Res. 2011 Apr 1;10(4):2128]
369     REFERENCE   4  (bases 1 to 2881)
370     AUTHORS   Zhang,J.Y., Looi,K.S. and Tan,E.M.
371     TITLE     Identification of tumor-associated antigens as diagnostic and
372             predictive biomarkers in cancer
373     JOURNAL   Methods Mol. Biol. 520, 1-10 (2009)
374     PUBMED   19381943
375     REFERENCE   5  (bases 1 to 2881)
376     AUTHORS   Dutta,J., Fan,G. and Gelinas,C.
377     TITLE     CAPERalpha is a novel Rel-TAD-interacting factor that inhibits
378             lymphocyte transformation by the potent Rel/NF-kappaB oncoprotein
379             v-Rel
380     JOURNAL   J. Virol. 82 (21), 10792-10802 (2008)
381     PUBMED   18753212
382     REMARK    GeneRIF: this study identifies CAPERalpha (RNA binding motif
383             protein 39) as a new transcriptional coregulator for v-Rel and
384             reveals an important role in modulating Rel's oncogenic activity.
385     REFERENCE   6  (bases 1 to 2881)
386     AUTHORS   Cazalla,D., Newton,K. and Caceres,J.F.
387     TITLE     A novel SR-related protein is required for the second step of
388             Pre-mRNA splicing
389     JOURNAL   Mol. Cell. Biol. 25 (8), 2969-2980 (2005)
390     PUBMED   15798186
391     REFERENCE   7  (bases 1 to 2881)
392     AUTHORS   Dowhan,D.H., Hong,E.P., Auboeuf,D., Dennis,A.P., Wilson,M.M.,
393             Berget,S.M. and O'Malley,B.W.
394     TITLE     Steroid hormone receptor coactivation and alternative RNA splicing
395             by U2AF65-related proteins CAPERalpha and CAPERbeta
396     JOURNAL   Mol. Cell 17 (3), 429-439 (2005)
397     PUBMED   15694343
398     REFERENCE   8  (bases 1 to 2881)
399     AUTHORS   Sun,N.N., Fastje,C.D., Wong,S.S., Sheppard,P.R., Macdonald,S.J.,
400             Ridenour,G., Hyde,J.D. and Witten,M.L.
401     TITLE     Dose-dependent transcriptome changes by metal ores on a human acute
402             lymphoblastic leukemia cell line
403     JOURNAL   Toxicol Ind Health 19 (7-10), 157-163 (2003)
404     PUBMED   15747776
405     REMARK    GeneRIF: 10 genes were down-regulated following treatment of the
406             T-ALL cells with 0.15 and 1.5 microg/mL of metal ores at 72 h
407     REFERENCE   9  (bases 1 to 2881)
408     AUTHORS   Jung,D.J., Na,S.Y., Na,D.S. and Lee,J.W.
409     TITLE     Molecular cloning and characterization of CAPER, a novel
410             coactivator of activating protein-1 and estrogen receptors
411     JOURNAL   J. Biol. Chem. 277 (2), 1229-1234 (2002)
412     PUBMED   11704680
413     REMARK    GeneRIF: This paper describes the mouse gene.
414     REFERENCE   10 (bases 1 to 2881)
415     AUTHORS   Imai,H., Chan,E.K., Kiyosawa,K., Fu,X.D. and Tan,E.M.
416     TITLE     Novel nuclear autoantigen with splicing factor motifs identified
417             with antibody from hepatocellular carcinoma
418     JOURNAL   J. Clin. Invest. 92 (5), 2419-2426 (1993)
419     PUBMED   8227358
420     COMMENT     REVIEWED REFSEQ: This record has been curated by NCBI staff. The
421             reference sequence was derived from DC346351.1, BC141835.1 and
422             C75555.1.
423             On Jun 16, 2011 this sequence version replaced gi:35493810.
424             
425             Summary: This gene encodes a member of the U2AF65 family of
426             proteins. The encoded protein is found in the nucleus, where it
427             co-localizes with core spliceosomal proteins. It has been shown to
428             play a role in both steroid hormone receptor-mediated transcription
429             and alternative splicing, and it is also a transcriptional
430             coregulator of the viral oncoprotein v-Rel. Multiple transcript
431             variants have been observed for this gene. A related pseudogene has
432             been identified on chromosome X. [provided by RefSeq, Aug 2011].
433             
434             Transcript Variant: This variant (1) encodes the longest isoform
435             (a, also called CC1.4).
436             
437             Publication Note:  This RefSeq record includes a subset of the
438             publications that are available for this gene. Please see the Gene
439             record to access additional publications.
440             
441             ##Evidence-Data-START##
442             Transcript exon combination :: BC141835.1, L10911.1 [ECO:0000332]
443             RNAseq introns              :: mixed/partial sample support
444                                            ERS025081, ERS025082 [ECO:0000350]
445             ##Evidence-Data-END##
446             COMPLETENESS: complete on the 3' end.
447     PRIMARY     REFSEQ_SPAN         PRIMARY_IDENTIFIER PRIMARY_SPAN        COMP
448             1-578               DC346351.1         3-580
449             579-2872            BC141835.1         429-2722
450             2873-2881           C75555.1           1-9                 c
451     FEATURES             Location/Qualifiers
452      source          1..2881
453                      /organism="Homo sapiens"
454                      /mol_type="mRNA"
455                      /db_xref="taxon:9606"
456                      /chromosome="20"
457                      /map="20q11.22"
458      gene            1..2881
459                      /gene="RBM39"
460                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
461                      /note="RNA binding motif protein 39"
462                      /db_xref="GeneID:9584"
463                      /db_xref="HGNC:15923"
464                      /db_xref="HPRD:09201"
465                      /db_xref="MIM:604739"
466      exon            1..396
467                      /gene="RBM39"
468                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
469                      /inference="alignment:Splign:1.39.8"
470      STS             35..262
471                      /gene="RBM39"
472                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
473                      /standard_name="REN58946"
474                      /db_xref="UniSTS:383746"
475      misc_feature    221..223
476                      /gene="RBM39"
477                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
478                      /note="upstream in-frame stop codon"
479      STS             299..453
480                      /gene="RBM39"
481                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
482                      /standard_name="G64285"
483                      /db_xref="UniSTS:158667"
484      exon            397..460
485                      /gene="RBM39"
486                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
487                      /inference="alignment:Splign:1.39.8"
488      CDS             410..2002
489                      /gene="RBM39"
490                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
491                      /note="isoform a is encoded by transcript variant 1;
492                      coactivator of activating protein-1 and estrogen
493                      receptors; functional spliceosome-associated protein 59;
494                      RNA-binding region (RNP1, RRM) containing 2;
495                      hepatocellular carcinoma protein 1; splicing factor HCC1"
496                      /codon_start=1
497                      /product="RNA-binding protein 39 isoform a"
498                      /protein_id="NP_909122.1"
499                      /db_xref="GI:35493811"
500                      /db_xref="CCDS:CCDS13266.1"
501                      /db_xref="GeneID:9584"
502                      /db_xref="HGNC:15923"
503                      /db_xref="HPRD:09201"
504                      /db_xref="MIM:604739"
505                      /translation="MADDIDIEAMLEAPYKKDENKLSSANGHEERSKKRKKSKSRSRS
506                      HERKRSKSKERKRSRDRERKKSKSRERKRSRSKERRRSRSRSRDRRFRGRYRSPYSGP
507                      KFNSAIRGKIGLPHSIKLSRRRSRSKSPFRKDKSPVREPIDNLTPEERDARTVFCMQL
508                      AARIRPRDLEEFFSTVGKVRDVRMISDRNSRRSKGIAYVEFVDVSSVPLAIGLTGQRV
509                      LGVPIIVQASQAEKNRAAAMANNLQKGSAGPMRLYVGSLHFNITEDMLRGIFEPFGRI
510                      ESIQLMMDSETGRSKGYGFITFSDSECAKKALEQLNGFELAGRPMKVGHVTERTDASS
511                      ASSFLDSDELERTGIDLGTTGRLQLMARLAEGTGLQIPPAAQQALQMSGSLAFGAVAE
512                      FSFVIDLQTRLSQQTEASALAAAASVQPLATQCFQLSNMFNPQTEEEVGWDTEIKDDV
513                      IEECNKHGGVIHIYVDKNSAQGNVYVKCPSIAAAIAAVNALHGRWFAGKMITAAYVPL
514                      PTYHNLFPDSMTATQLLVPSRR"
515      misc_feature    413..415
516                      /gene="RBM39"
517                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
518                      /experiment="experimental evidence, no additional details
519                      recorded"
520                      /note="N-acetylalanine; propagated from
521                      UniProtKB/Swiss-Prot (Q14498.2); acetylation site"
522      
523      exon            461..510
524                      /gene="RBM39"
525                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
526                      /inference="alignment:Splign:1.39.8"
527     
528      exon            1902..2874
529                      /gene="RBM39"
530                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
531                      /inference="alignment:Splign:1.39.8"
532      STS             1956..2182
533                      /gene="RBM39"
534                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
535                      /standard_name="REN58786"
536                      /db_xref="UniSTS:383586"
537      STS             2104..2148
538                      /gene="RBM39"
539                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
540                      /standard_name="D19S1033"
541                      /db_xref="UniSTS:154759"
542      STS             2145..2400
543                      /gene="RBM39"
544                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
545                      /standard_name="REN58785"
546                      /db_xref="UniSTS:383585"
547     
548      polyA_signal    2851..2856
549                      /gene="RBM39"
550                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
551      polyA_site      2874
552                      /gene="RBM39"
553                      /gene_synonym="CAPER; CAPERalpha; FSAP59; HCC1; RNPC2"
554     ORIGIN      
555         1 atttggagct tggggcagct tctcgcgaga gcccgtgctg agggctctgt gaggccccgt
556        61 gtgtttgtgt gtgtgtatgt gtgctggtga atgtgagtac agggaagcag cggccgccat
557       121 ttcagggagc ttgtcgacgc tgtcgcaggg gtggatcctg agctgccgaa gccgccgtcc
558       181 tgctctcccg cgtgggcttc tctaattcca ttgttttttt tagattctct cgggcctagc
559       241 cgtccttgga acccgatatt cgggctgggc ggttccgcgg cctgggccta ggggcttaac
560     
561     
562     
563     */
564     private EbiDbEntry() {
565     }
566
567     private void addCrossReference( final Accession accession ) {
568         if ( _cross_references == null ) {
569             _cross_references = new TreeSet<Accession>();
570         }
571         System.out.println( "XREF ADDED: " + accession );
572         _cross_references.add( accession );
573     }
574
575     @Override
576     public Object clone() throws CloneNotSupportedException {
577         throw new CloneNotSupportedException();
578     }
579
580     @Override
581     public String getAccession() {
582         return _pa;
583     }
584
585     @Override
586     public SortedSet<Accession> getCrossReferences() {
587         return _cross_references;
588     }
589
590     @Override
591     public String getGeneName() {
592         return _gene_name;
593     }
594
595     @Override
596     public SortedSet<GoTerm> getGoTerms() {
597         return null;
598     }
599
600     @Override
601     public String getProvider() {
602         return _provider;
603     }
604
605     @Override
606     public String getSequenceName() {
607         return _de;
608     }
609
610     @Override
611     public String getSequenceSymbol() {
612         return _symbol;
613     }
614
615     private void setSequenceSymbol( final String symbol ) {
616         _symbol = symbol;
617     }
618
619     @Override
620     public String getTaxonomyIdentifier() {
621         return _tax_id;
622     }
623
624     @Override
625     public String getTaxonomyScientificName() {
626         return _os;
627     }
628
629     @Override
630     public boolean isEmpty() {
631         return ( ForesterUtil.isEmpty( getAccession() ) && ForesterUtil.isEmpty( getSequenceName() )
632                 && ForesterUtil.isEmpty( getTaxonomyScientificName() )
633                 && ForesterUtil.isEmpty( getTaxonomyIdentifier() ) && ForesterUtil.isEmpty( getSequenceSymbol() ) );
634     }
635
636     private void setSequenceName( final String rec_name ) {
637         if ( _de == null ) {
638             _de = rec_name;
639         }
640     }
641
642     private void setGeneName( final String gene_name ) {
643         if ( _gene_name == null ) {
644             _gene_name = gene_name;
645         }
646     }
647
648     private void setTaxonomyScientificName( final String os ) {
649         if ( _os == null ) {
650             _os = os;
651         }
652     }
653
654     private void setAccession( final String pa ) {
655         if ( _pa == null ) {
656             _pa = pa;
657         }
658     }
659
660     public void setProvider( final String provider ) {
661         _provider = provider;
662     }
663
664     private void setTaxId( final String tax_id ) {
665         if ( _tax_id == null ) {
666             _tax_id = tax_id;
667         }
668     }
669
670     @Override
671     public SortedSet<Annotation> getAnnotations() {
672         return _annotations;
673     }
674
675     private void addAnnotation( final Annotation annotation ) {
676         if ( _annotations == null ) {
677             _annotations = new TreeSet<Annotation>();
678         }
679         _annotations.add( annotation );
680     }
681 }