Clover coverage report - baseCode - 0.2.5
Coverage timestamp: Tue Apr 12 2005 11:31:58 EDT
file stats: LOC: 208   Methods: 8
NCLOC: 155   Classes: 2
30 day Evaluation Version distributed via the Maven Jar Repository. Clover is not free. You have 30 days to evaluate it. Please visit http://www.thecortex.net/clover to obtain a licensed version of Clover
 
 Source file Conditionals Statements Methods TOTAL
GOParser.java 91.3% 89.4% 87.5% 89.9%
coverage coverage
 1   
 package baseCode.xml;
 2   
 
 3   
 import java.io.IOException;
 4   
 import java.io.InputStream;
 5   
 import java.util.HashMap;
 6   
 import java.util.Iterator;
 7   
 import java.util.Map;
 8   
 
 9   
 import org.xml.sax.Attributes;
 10   
 import org.xml.sax.InputSource;
 11   
 import org.xml.sax.SAXException;
 12   
 import org.xml.sax.XMLReader;
 13   
 import org.xml.sax.helpers.DefaultHandler;
 14   
 import org.xml.sax.helpers.XMLReaderFactory;
 15   
 
 16   
 import baseCode.bio.GOEntry;
 17   
 import baseCode.dataStructure.graph.DirectedGraph;
 18   
 import baseCode.dataStructure.graph.DirectedGraphNode;
 19   
 
 20   
 /**
 21   
  * Read in the GO XML file provided by the Gene Ontology Consortium.
 22   
  * <p>
 23   
  * Copyright (c) Columbia University
 24   
  * 
 25   
  * @author Paul Pavlidis
 26   
  * @version $Id: GOParser.java,v 1.14 2004/08/04 09:47:44 pavlidis Exp $
 27   
  */
 28   
 public class GOParser {
 29   
 
 30   
    private DirectedGraph m;
 31   
 
 32   
    /**
 33   
     * Get the graph that was created.
 34   
     * 
 35   
     * @return a DirectedGraph. Nodes contain OntologyEntry instances.
 36   
     */
 37  1
    public DirectedGraph getGraph() {
 38  1
       return m;
 39   
    }
 40   
 
 41   
    /**
 42   
     * Get a simple Map that contains keys that are the GO ids, values are the names. This can replace the functionality
 43   
     * of the GONameReader in classScore.
 44   
     * 
 45   
     * @return Map
 46   
     */
 47  0
    public Map getGONameMap() {
 48  0
       Map nodes = m.getItems();
 49  0
       Map result = new HashMap();
 50  0
       for ( Iterator it = nodes.keySet().iterator(); it.hasNext(); ) {
 51  0
          DirectedGraphNode node = ( DirectedGraphNode ) nodes.get( it.next() );
 52  0
          GOEntry e = ( GOEntry ) node.getItem();
 53  0
          result.put( e.getId().intern(), e.getName().intern() );
 54   
       }
 55  0
       return result;
 56   
    }
 57   
 
 58  1
    public GOParser( InputStream i ) throws IOException, SAXException {
 59   
 
 60  1
       if ( i.available() == 0 ) {
 61  0
          throw new IOException( "XML stream contains no data." );
 62   
       }
 63   
 
 64  1
       System.setProperty( "org.xml.sax.driver",
 65   
             "org.apache.xerces.parsers.SAXParser" );
 66   
 
 67  1
       XMLReader xr = XMLReaderFactory.createXMLReader();
 68  1
       GOHandler handler = new GOHandler();
 69  1
       xr.setFeature( "http://xml.org/sax/features/validation", false );
 70  1
       xr.setFeature( "http://xml.org/sax/features/external-general-entities",
 71   
             false );
 72  1
       xr.setFeature(
 73   
             "http://apache.org/xml/features/nonvalidating/load-external-dtd",
 74   
             false );
 75  1
       xr.setContentHandler( handler );
 76  1
       xr.setErrorHandler( handler );
 77  1
       xr.setEntityResolver( handler );
 78  1
       xr.setDTDHandler( handler );
 79  1
       xr.parse( new InputSource( i ) );
 80   
 
 81  1
       m = handler.getResults();
 82   
    }
 83   
 
 84   
 }
 85   
 
 86   
 class GOHandler extends DefaultHandler {
 87   
 
 88   
    private DirectedGraph m;
 89   
 
 90  1
    public DirectedGraph getResults() {
 91  1
       return m;
 92   
    }
 93   
 
 94  1
    public GOHandler() {
 95  1
       super();
 96  1
       m = new DirectedGraph();
 97   
    }
 98   
 
 99   
    private boolean inTerm = false;
 100   
    private boolean inDef = false;
 101   
    private boolean inAcc = false;
 102   
    private boolean inName = false;
 103   
    private boolean inPartOf = false;
 104   
    private boolean inIsa = false;
 105   
    private boolean inSyn = false;
 106   
 
 107   
    private String currentAspect;
 108   
    private StringBuffer nameBuf;
 109   
    private StringBuffer accBuf;
 110   
    private StringBuffer defBuf;
 111   
 
 112  917
    public void startElement( String uri, String name, String qName,
 113   
          Attributes atts ) {
 114   
 
 115  917
       if ( name.equals( "term" ) ) {
 116  68
          inTerm = true;
 117  849
       } else if ( name.equals( "accession" ) ) {
 118  68
          accBuf = new StringBuffer();
 119  68
          inAcc = true;
 120  781
       } else if ( name.equals( "definition" ) ) {
 121  65
          defBuf = new StringBuffer();
 122  65
          inDef = true;
 123  716
       } else if ( name.equals( "is_a" ) ) {
 124  77
          inIsa = true;
 125  77
          String res = atts.getValue( "rdf:resource" );
 126  77
          String parent = res.substring( res.lastIndexOf( '#' ) + 1, res
 127   
                .length() );
 128   
 
 129  77
          if ( !m.containsKey( parent ) ) {
 130  9
             m.addNode( parent, new GOEntry( parent, "no name yet",
 131   
                   "no definition yet", "no aspect yet" ) );
 132   
          }
 133  77
          String currentTerm = accBuf.toString();
 134  77
          m.addParentTo( currentTerm, parent );
 135   
 
 136  639
       } else if ( name.equals( "part_of" ) ) {
 137  1
          inPartOf = true;
 138  1
          String res = atts.getValue( "rdf:resource" );
 139  1
          String parent = res.substring( res.lastIndexOf( '#' ) + 1, res
 140   
                .length() );
 141   
 
 142  1
          if ( !m.containsKey( parent ) ) {
 143  0
             m.addNode( parent, new GOEntry( parent, "no name yet",
 144   
                   "no definition yet", "no aspect yet" ) );
 145   
          }
 146  1
          String currentTerm = accBuf.toString();
 147  1
          m.addParentTo( currentTerm, parent );
 148  638
       } else if ( name.equals( "synonym" ) ) {
 149  29
          inSyn = true;
 150  609
       } else if ( name.equals( "name" ) ) {
 151  68
          nameBuf = new StringBuffer();
 152  68
          inName = true;
 153   
       }
 154   
    }
 155   
 
 156  917
    public void endElement( String uri, String name, String qName ) {
 157  917
       if ( name.equals( "term" ) ) {
 158  68
          inTerm = false;
 159  849
       } else if ( name.equals( "accession" ) ) {
 160  68
          inAcc = false;
 161  68
          String currentTerm = accBuf.toString();
 162  68
          m.addNode( currentTerm, new GOEntry( currentTerm, "no name yet",
 163   
                "no definition yet", "no aspect yet" ) );
 164  781
       } else if ( name.equals( "definition" ) ) {
 165  65
          String currentTerm = accBuf.toString();
 166  65
          ( ( GOEntry ) m.getNodeContents( currentTerm ) ).setDefinition( defBuf
 167   
                .toString().intern() );
 168  65
          inDef = false;
 169  716
       } else if ( name.equals( "is_a" ) ) {
 170  77
          inIsa = false;
 171  639
       } else if ( name.equals( "part_of" ) ) {
 172  1
          inPartOf = false;
 173  638
       } else if ( name.equals( "synonym" ) ) {
 174  29
          inSyn = false;
 175  609
       } else if ( name.equals( "name" ) ) {
 176  68
          inName = false;
 177  68
          String currentTerm = accBuf.toString();
 178   
 
 179  68
          String currentName = nameBuf.toString().intern();
 180   
 
 181  68
          ( ( GOEntry ) m.getNodeContents( currentTerm ) ).setName( currentName );
 182   
 
 183  68
          if ( currentName.equals( "molecular_function" )
 184   
                || currentName.equals( "biological_process" )
 185   
                || currentName.equals( "cellular_component" ) ) {
 186  1
             currentAspect = currentName;
 187   
          }
 188   
 
 189  68
          ( ( GOEntry ) m.getNodeContents( currentTerm ) )
 190   
                .setAspect( currentAspect );
 191   
 
 192   
       }
 193   
    }
 194   
 
 195  1770
    public void characters( char ch[], int start, int length ) {
 196   
 
 197  1770
       if ( inTerm ) {
 198  1698
          if ( inAcc ) {
 199  68
             accBuf.append( ch, start, length );
 200  1630
          } else if ( inDef ) {
 201  70
             defBuf.append( ch, start, length );
 202  1560
          } else if ( inName ) {
 203  69
             nameBuf.append( ch, start, length );
 204   
          }
 205   
       }
 206   
    }
 207   
 
 208   
 }