Skip to content

Commit b6bb812

Browse files
committed
fixing biojava#280 parser now can dealing with multiple "residueDetail" values.
1 parent 5801b20 commit b6bb812

File tree

2 files changed

+66
-3
lines changed

2 files changed

+66
-3
lines changed

biojava-structure/src/main/java/org/biojava/nbio/structure/io/sifts/SiftsXMLParser.java

Lines changed: 23 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626

2727
import org.w3c.dom.Document;
2828
import org.w3c.dom.Element;
29+
import org.w3c.dom.Node;
2930
import org.w3c.dom.NodeList;
3031
import org.xml.sax.SAXException;
3132

@@ -199,9 +200,9 @@ private SiftsResidue getResidue(Element residue) {
199200

200201
boolean observed = true;
201202

202-
String detail = getTextValue(residue, "residueDetail");
203-
//System.out.println(">"+detail+"<");
204-
if ( detail != null && detail.trim().equalsIgnoreCase("Not_Observed")){
203+
List<String> details = getTextValues(residue, "residueDetail");
204+
205+
if ( details != null && details.contains("Not_Observed")){
205206
observed = false;
206207
}
207208
res.setNotObserved(! observed);
@@ -258,6 +259,25 @@ private String getTextValue(Element ele, String tagName) {
258259
return textVal;
259260
}
260261

262+
private List<String> getTextValues(Element ele, String tagName) {
263+
List<String>values = new ArrayList<String>();
264+
NodeList nl = ele.getElementsByTagName(tagName);
265+
if(nl != null && nl.getLength() > 0) {
266+
for ( int i = 0 ;i < nl.getLength() ; i ++) {
267+
268+
Element n = (Element) nl.item(i);
269+
270+
String k = n.getNodeName();
271+
272+
String val = n.getFirstChild().getNodeValue();
273+
if ( val != null)
274+
values.add(val);
275+
}
276+
}
277+
278+
return values;
279+
}
280+
261281

262282

263283

biojava-structure/src/test/java/org/biojava/nbio/structure/io/TestSiftsParsing.java

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,49 @@
3434

3535
public class TestSiftsParsing extends TestCase {
3636

37+
38+
public void test4DIA(){
39+
try {
40+
List<SiftsEntity> entities = SiftsMappingProvider.getSiftsMapping("4DIA");
41+
42+
assertNotNull(entities);
43+
44+
assertTrue(entities.size() == 1);
45+
46+
for (SiftsEntity e : entities){
47+
//System.out.println(e.getEntityId() + " " +e.getType());
48+
49+
50+
assertTrue(e.getSegments().size() > 0 );
51+
for ( SiftsSegment seg: e.getSegments()) {
52+
assertTrue(seg.getResidues().size() > 0);
53+
54+
for ( SiftsResidue res: seg.getResidues() ) {
55+
56+
if ( res.getUniProtResName() != null ) {
57+
assertNotNull(res.getUniProtAccessionId() );
58+
assertNotNull(res.getUniProtResName());
59+
60+
// test for github ticket #280
61+
if ( res.getUniProtPos() == 129) {
62+
63+
assertTrue(res.getNotObserved());
64+
}
65+
66+
}
67+
}
68+
}
69+
70+
}
71+
72+
} catch (Exception e){
73+
e.printStackTrace();
74+
fail(e.getMessage());
75+
}
76+
77+
78+
}
79+
3780
public void test4jn3(){
3881
try {
3982
List<SiftsEntity> entities = SiftsMappingProvider.getSiftsMapping("4jn3");

0 commit comments

Comments
 (0)