Skip to content

Commit 37ba3dd

Browse files
author
zach powers
committed
change qualifier to list in AbstractFeature. Change FeatureInterface. Change FeatureDbReferenceInfo because it also uses the FeatureInterface. Note: this was not intended and may cause unexpected issues.
Fix ProteinSequence and GenericIndxheaderFormat to use Qualifiers in Array instead of as hashmap values fix Abstract Reader for new Qualifier format
1 parent 83a9f87 commit 37ba3dd

File tree

8 files changed

+60
-25
lines changed

8 files changed

+60
-25
lines changed

biojava-core/src/main/java/org/biojava/nbio/core/sequence/ProteinSequence.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ public ProteinSequence(ProxySequenceReader<AminoAcidCompound> proxyLoader, Compo
109109

110110
// cases if a protein has more than 1 parent are not supported yet
111111
if (CDSFeatures.size() == 1) {
112-
Qualifier codedBy = CDSFeatures.get(0).getQualifiers().get("coded_by");
112+
Qualifier codedBy = CDSFeatures.get(0).getQualifiers().get("coded_by").get(0);
113113

114114
if (codedBy != null) {
115115
String codedBySeq = codedBy.getValue();

biojava-core/src/main/java/org/biojava/nbio/core/sequence/features/AbstractFeature.java

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public abstract class AbstractFeature<S extends AbstractSequence<C>, C extends C
4747
private String description = "";
4848
private String shortDescription = "";
4949
private Object userObject = null;
50-
private HashMap<String,Qualifier> Qualifiers = new HashMap<String,Qualifier>();
50+
private HashMap<String, ArrayList<Qualifier>> Qualifiers = new HashMap<String, ArrayList<Qualifier>>();
5151

5252
/**
5353
* A feature has a type and a source
@@ -271,22 +271,31 @@ public void setUserObject(Object userObject) {
271271
}
272272

273273
@Override
274-
public HashMap<String, Qualifier> getQualifiers() {
274+
public HashMap<String, ArrayList<Qualifier>> getQualifiers() {
275275
// TODO Auto-generated method stub
276276
return Qualifiers;
277277
}
278278

279279
@Override
280-
public void setQualifiers(HashMap<String, Qualifier> qualifiers) {
280+
public void setQualifiers(HashMap<String, ArrayList<Qualifier>> qualifiers) {
281281
// TODO Auto-generated method stub
282282
Qualifiers = qualifiers;
283283

284284
}
285285

286286
@Override
287287
public void addQualifier(String key, Qualifier qualifier) {
288-
// TODO Auto-generated method stub
289-
Qualifiers.put(key, qualifier);
288+
// Check for key. Update list of values
289+
if (Qualifiers.containsKey(key)){
290+
ArrayList<Qualifier> vals = Qualifiers.get(key);
291+
vals.add(qualifier);
292+
Qualifiers.put(key, vals);
293+
} else {
294+
ArrayList<Qualifier> vals = new ArrayList<Qualifier>();
295+
vals.add(qualifier);
296+
Qualifiers.put(key, vals);
297+
}
290298

291299
}
300+
292301
}

biojava-core/src/main/java/org/biojava/nbio/core/sequence/features/FeatureDbReferenceInfo.java

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,7 @@ public class FeatureDbReferenceInfo<S extends AbstractSequence<C>, C extends Com
4949
private String description = "";
5050
private String shortDescription = "";
5151
private Object userObject;
52-
private HashMap<String,Qualifier> qualifiers = new HashMap<String,Qualifier>();
52+
private HashMap<String,ArrayList<Qualifier>> qualifiers = new HashMap<String,ArrayList<Qualifier>>();
5353

5454

5555
public FeatureDbReferenceInfo(String database, String id) {
@@ -137,22 +137,30 @@ public void setUserObject(Object userObject) {
137137
}
138138

139139
@Override
140-
public HashMap<String, Qualifier> getQualifiers() {
140+
public HashMap<String, ArrayList<Qualifier>> getQualifiers() {
141141
return qualifiers;
142142
}
143143

144144
@Override
145-
public void setQualifiers(HashMap<String, Qualifier> qualifiers) {
145+
public void setQualifiers(HashMap<String, ArrayList<Qualifier>> qualifiers) {
146146
this.qualifiers = qualifiers;
147147
}
148148

149149
@Override
150150
public void addQualifier(String key, Qualifier qualifier) {
151151
if (qualifiers == null) {
152-
qualifiers = new HashMap<String, Qualifier>();
152+
qualifiers = new HashMap<String, ArrayList<Qualifier>>();
153153
}
154-
155-
qualifiers.put(key, qualifier);
154+
// Check for key. Update list of values
155+
if (qualifiers.containsKey(key)){
156+
ArrayList<Qualifier> vals = qualifiers.get(key);
157+
vals.add(qualifier);
158+
qualifiers.put(key, vals);
159+
} else {
160+
ArrayList<Qualifier> vals = new ArrayList<Qualifier>();
161+
vals.add(qualifier);
162+
qualifiers.put(key, vals);
163+
}
164+
156165
}
157-
158-
}
166+
}

biojava-core/src/main/java/org/biojava/nbio/core/sequence/features/FeatureInterface.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@
2929
import org.biojava.nbio.core.sequence.template.AbstractSequence;
3030
import org.biojava.nbio.core.sequence.template.Compound;
3131

32+
import java.util.ArrayList;
3233
import java.util.HashMap;
3334
import java.util.List;
3435

@@ -175,14 +176,14 @@ public interface FeatureInterface<S extends AbstractSequence<C>, C extends Compo
175176
* @return
176177
*/
177178

178-
public HashMap<String, Qualifier> getQualifiers();
179+
public HashMap<String, ArrayList<Qualifier>> getQualifiers();
179180

180181
/**
181182
* Set the qualifiers
182183
* @param qualifiers
183184
*/
184185

185-
public void setQualifiers(HashMap<String, Qualifier> qualifiers);
186+
public void setQualifiers(HashMap<String, ArrayList<Qualifier>> qualifiers);
186187
/**
187188
* Add a qualifier
188189
* @param qualifier

biojava-core/src/main/java/org/biojava/nbio/core/sequence/io/GenericInsdcHeaderFormat.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,8 +121,10 @@ protected String _write_feature(FeatureInterface<AbstractSequence<C>, C> feature
121121
formatter.close();
122122

123123
//Now the qualifiers...
124-
for(Qualifier q : feature.getQualifiers().values()) {
125-
line += _write_feature_qualifier(q.getName(), q.getValue(), q.needsQuotes());
124+
for(ArrayList<Qualifier> qualifiers : feature.getQualifiers().values()) {
125+
for(Qualifier q : qualifiers){
126+
line += _write_feature_qualifier(q.getName(), q.getValue(), q.needsQuotes());
127+
}
126128
}
127129
return line;
128130
/*

biojava-core/src/main/java/org/biojava/nbio/core/sequence/template/AbstractSequence.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -129,7 +129,10 @@ public void setProxySequenceReader(SequenceReader<C> proxyLoader) {
129129
}
130130
}
131131
// success of next statement guaranteed because source is a compulsory field
132-
DBReferenceInfo dbQualifier = (DBReferenceInfo)ff.get("source").get(0).getQualifiers().get("db_xref");
132+
//DBReferenceInfo dbQualifier = (DBReferenceInfo)ff.get("source").get(0).getQualifiers().get("db_xref");
133+
ArrayList<DBReferenceInfo> dbQualifiers = (ArrayList)ff.get("source").get(0).getQualifiers().get("db_xref");
134+
DBReferenceInfo dbQualifier = dbQualifiers.get(0);
135+
133136
if (dbQualifier != null) this.setTaxonomy(new TaxonomyID(dbQualifier.getDatabase()+":"+dbQualifier.getId(), DataSource.UNKNOWN));
134137
}
135138

biojava-core/src/test/java/org/biojava/nbio/core/sequence/io/GenbankReaderTest.java

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,12 +30,15 @@
3030
import org.biojava.nbio.core.sequence.compound.AminoAcidCompoundSet;
3131
import org.biojava.nbio.core.sequence.compound.DNACompoundSet;
3232
import org.biojava.nbio.core.sequence.compound.NucleotideCompound;
33+
import org.biojava.nbio.core.sequence.features.Qualifier;
3334
import org.junit.*;
3435
import org.slf4j.Logger;
3536
import org.slf4j.LoggerFactory;
3637

3738
import java.io.InputStream;
3839
import java.util.ArrayList;
40+
import java.util.HashMap;
41+
import java.util.List;
3942
import java.util.LinkedHashMap;
4043
import org.biojava.nbio.core.sequence.features.FeatureInterface;
4144
import org.biojava.nbio.core.sequence.template.AbstractSequence;
@@ -105,9 +108,10 @@ public void testProcess() throws Exception {
105108
inStream.close();
106109
}
107110

111+
108112
@Test
109113
public void CDStest() throws Exception {
110-
logger.info("CDS test");
114+
logger.info("CDS Test");
111115

112116
InputStream inStream = this.getClass().getResourceAsStream("/BondFeature.gb");
113117
assertNotNull(inStream);
@@ -121,16 +125,23 @@ public void CDStest() throws Exception {
121125
@SuppressWarnings("unused")
122126
LinkedHashMap<String, ProteinSequence> proteinSequences = GenbankProtein.process();
123127
inStream.close();
124-
128+
129+
125130
Assert.assertTrue(proteinSequences.size() == 1);
126131
logger.info("protein sequences: {}", proteinSequences);
127132

128133
ProteinSequence protein = new ArrayList<ProteinSequence>(proteinSequences.values()).get(0);
129134

130135
FeatureInterface<AbstractSequence<AminoAcidCompound>, AminoAcidCompound> cdsFeature = protein.getFeaturesByType("CDS").get(0);
131-
String codedBy = cdsFeature.getQualifiers().get("coded_by").getValue();
136+
String codedBy = cdsFeature.getQualifiers().get("coded_by").get(0).getValue();
137+
HashMap<String, ArrayList<Qualifier>> quals = cdsFeature.getQualifiers();
138+
ArrayList<Qualifier> dbrefs = quals.get("db_xref");
139+
132140
Assert.assertNotNull(codedBy);
133141
Assert.assertTrue(!codedBy.isEmpty());
142+
Assert.assertEquals(codedBy, "NM_000266.2:503..904");
143+
Assert.assertEquals(5, dbrefs.size());
144+
134145
}
135146

136147
}

biojava-core/src/test/java/org/biojava/nbio/core/sequence/loader/GenbankProxySequenceReaderTest.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,14 +108,14 @@ so it should be done here (manualy).
108108
Assert.assertNotNull(Integer.decode(seq.getTaxonomy().getID().split(":")[1]));
109109

110110
// test taxonomy name
111-
String taxonName = seq.getFeaturesByType("source").get(0).getQualifiers().get("organism").getValue();
111+
String taxonName = seq.getFeaturesByType("source").get(0).getQualifiers().get("organism").get(0).getValue();
112112
logger.info("taxonomy name '{}'", taxonName);
113113
Assert.assertNotNull(taxonName);
114114

115115
if (seq.getFeaturesByType("CDS").size() > 0) {
116116
FeatureInterface<AbstractSequence<AminoAcidCompound>, AminoAcidCompound> CDS = seq.getFeaturesByType("CDS").get(0);
117117
logger.info("CDS: {}", CDS);
118-
String codedBy = CDS.getQualifiers().get("coded_by").getValue();
118+
String codedBy = CDS.getQualifiers().get("coded_by").get(0).getValue();
119119
Assert.assertNotNull(codedBy);
120120
Assert.assertTrue(!codedBy.isEmpty());
121121
logger.info("\t\tcoded_by: {}", codedBy);
@@ -138,7 +138,8 @@ public void testProteinSequenceFactoring() throws Exception {
138138

139139
if (CDSs != null) {
140140
if (CDSs.size() == 1) {
141-
Qualifier codedBy = (Qualifier) CDSs.get(0).getQualifiers().get("coded_by");
141+
ArrayList<Qualifier> qualifiers = (ArrayList)CDSs.get(0).getQualifiers().get("coded_by");
142+
Qualifier codedBy = (Qualifier) qualifiers.get(0);
142143
if (codedBy != null) {
143144

144145
AbstractSequence<?> parentSeq = seq.getParentSequence();

0 commit comments

Comments
 (0)