1 package jalview.datamodel.xdb.embl;
\r
3 import jalview.datamodel.DBRefEntry;
\r
4 import jalview.datamodel.Sequence;
\r
5 import jalview.datamodel.SequenceFeature;
\r
6 import jalview.datamodel.SequenceI;
\r
8 import java.util.Iterator;
\r
9 import java.util.Vector;
\r
11 public class EmblEntry {
\r
17 String rLastUpdated;
\r
23 EmblSequence sequence;
\r
25 * @return the accession
\r
27 public String getAccession() {
\r
31 * @param accession the accession to set
\r
33 public void setAccession(String accession) {
\r
34 this.accession = accession;
\r
37 * @return the dbRefs
\r
39 public Vector getDbRefs() {
\r
43 * @param dbRefs the dbRefs to set
\r
45 public void setDbRefs(Vector dbRefs) {
\r
46 this.dbRefs = dbRefs;
\r
51 public String getDesc() {
\r
55 * @param desc the desc to set
\r
57 public void setDesc(String desc) {
\r
61 * @return the features
\r
63 public Vector getFeatures() {
\r
67 * @param features the features to set
\r
69 public void setFeatures(Vector features) {
\r
70 this.features = features;
\r
73 * @return the keywords
\r
75 public Vector getKeywords() {
\r
79 * @param keywords the keywords to set
\r
81 public void setKeywords(Vector keywords) {
\r
82 this.keywords = keywords;
\r
85 * @return the lastUpdated
\r
87 public String getLastUpdated() {
\r
91 * @param lastUpdated the lastUpdated to set
\r
93 public void setLastUpdated(String lastUpdated) {
\r
94 this.lastUpdated = lastUpdated;
\r
99 public Vector getRefs() {
\r
103 * @param refs the refs to set
\r
105 public void setRefs(Vector refs) {
\r
109 * @return the releaseCreated
\r
111 public String getRCreated() {
\r
115 * @param releaseCreated the releaseCreated to set
\r
117 public void setRcreated(String releaseCreated) {
\r
118 this.rCreated = releaseCreated;
\r
121 * @return the releaseLastUpdated
\r
123 public String getRLastUpdated() {
\r
124 return rLastUpdated;
\r
127 * @param releaseLastUpdated the releaseLastUpdated to set
\r
129 public void setRLastUpdated(String releaseLastUpdated) {
\r
130 this.rLastUpdated = releaseLastUpdated;
\r
133 * @return the sequence
\r
135 public EmblSequence getSequence() {
\r
139 * @param sequence the sequence to set
\r
141 public void setSequence(EmblSequence sequence) {
\r
142 this.sequence = sequence;
\r
145 * @return the taxDivision
\r
147 public String getTaxDivision() {
\r
148 return taxDivision;
\r
151 * @param taxDivision the taxDivision to set
\r
153 public void setTaxDivision(String taxDivision) {
\r
154 this.taxDivision = taxDivision;
\r
157 * @return the version
\r
159 public String getVersion() {
\r
163 * @param version the version to set
\r
165 public void setVersion(String version) {
\r
166 this.version = version;
\r
170 * Recover annotated sequences from EMBL file
\r
171 * @param noNa don't return nucleic acid sequences
\r
172 * @param sourceDb TODO
\r
173 * @param noProtein don't return any translated protein sequences marked in features
\r
174 * @return dataset sequences with DBRefs and features - DNA always comes first
\r
176 public jalview.datamodel.SequenceI[] getSequences(boolean noNa, boolean noPeptide, String sourceDb) {
\r
177 Vector seqs=new Vector();
\r
180 dna = new Sequence(sourceDb+"|"+accession, sequence.getSequence());
\r
181 dna.setDescription(desc);
\r
182 dna.addDBRef(new DBRefEntry(sourceDb, version, accession));
\r
183 // TODO: add mapping for parentAccession attribute
\r
184 // TODO: transform EMBL Database refs to canonical form
\r
186 for (Iterator i=dbRefs.iterator(); i.hasNext(); dna.addDBRef((DBRefEntry)i.next()));
\r
188 for (Iterator i=features.iterator(); i.hasNext(); ) {
\r
189 EmblFeature feature = (EmblFeature) i.next();
\r
191 if (feature.dbRefs!=null && feature.dbRefs.size()>0) {
\r
192 for (Iterator dbr=feature.dbRefs.iterator(); dbr.hasNext(); dna.addDBRef((DBRefEntry)dbr.next()) )
\r
196 if (feature.getName().equalsIgnoreCase("CDS")) {
\r
197 // extract coding region(s)
\r
198 jalview.datamodel.Mapping map = null;
\r
200 if (feature.locations!=null && feature.locations.size()>0) {
\r
201 for (Iterator locs=feature.locations.iterator();
\r
202 locs.hasNext(); ) {
\r
203 EmblFeatureLocations loc = (EmblFeatureLocations) locs.next();
\r
204 int[] se = loc.getElementRanges();
\r
208 int[] t=new int[exon.length+se.length];
\r
209 System.arraycopy(exon, 0, t, 0, exon.length);
\r
210 System.arraycopy(se, 0, t, exon.length,se.length);
\r
216 String prname=new String();
\r
220 if (feature.getQualifiers()!=null && feature.getQualifiers().size()>0) {
\r
221 for (Iterator quals=feature.getQualifiers().iterator(); quals.hasNext(); ) {
\r
222 Qualifier q = (Qualifier) quals.next();
\r
223 if (q.getName().equals("translation"))
\r
225 prseq=q.getValue();
\r
228 if (q.getName().equals("protein_id"))
\r
233 if (q.getName().equals("codon_start"))
\r
235 prstart = Integer.parseInt(q.getValue());
\r
238 // throw anything else into the title
\r
239 if (prname.length()==0) {
\r
240 prname = q.getValue();
\r
242 prname = prname + q.getName()+":"+q.getValue();
\r
247 Sequence product=null;
\r
248 if (prseq!=null && prname!=null && prid!=null) {
\r
249 // extract proteins.
\r
251 product = new Sequence(sourceDb+"|"+"EMBLCDS|"+prid+"|"+prname, prseq, prstart, prstart+prseq.length()-1);
\r
252 product.setDescription("Protein Product from "+sourceDb);
\r
255 // we have everything - create the mapping and perhaps the protein sequence
\r
256 map = new jalview.datamodel.Mapping(product, exon, new int[] { prstart, prstart+prseq.length()-1}, 3, 1);
\r
257 // add cds feature to dna seq - this may include the stop codon
\r
258 for (int xint=0;xint<exon.length; xint+=2) {
\r
259 SequenceFeature sf = new SequenceFeature();
\r
260 sf.setBegin(exon[xint]);
\r
261 sf.setEnd(exon[xint+1]);
\r
262 sf.setType(feature.getName());
\r
263 sf.setFeatureGroup(jalview.datamodel.DBRefSource.EMBL);
\r
264 sf.setDescription("Exon "+(1+xint)+" for protein '"+prname+"' EMBLCDS:"+prid);
\r
265 dna.addSequenceFeature(sf);
\r
268 // add dbRefs to sequence
\r
269 if (feature.dbRefs!=null && feature.dbRefs.size()>0)
\r
271 for (Iterator dbr=feature.dbRefs.iterator(); dbr.hasNext(); )
\r
273 DBRefEntry ref = (DBRefEntry)dbr.next();
\r
274 ref.setSource(jalview.util.DBRefUtils.getCanonicalName(ref.getSource()));
\r
275 if (ref.getSource().equals(jalview.datamodel.DBRefSource.UNIPROT))
\r
279 if (product!=null) {
\r
280 DBRefEntry pref = new DBRefEntry(ref.getSource(), ref.getVersion(), ref.getAccessionId());
\r
281 pref.setMap(null); // reference is direct
\r
288 // General feature type.
\r
290 if (feature.dbRefs!=null && feature.dbRefs.size()>0) {
\r
291 for (Iterator dbr=feature.dbRefs.iterator(); dbr.hasNext(); dna.addDBRef((DBRefEntry)dbr.next()) )
\r
301 SequenceI[] sqs = new SequenceI[seqs.size()];
\r
302 for (int i=0,j=seqs.size();i<j; i++) {
\r
303 sqs[i] = (SequenceI) seqs.elementAt(i);
\r