View Javadoc

    1   package baseCode.bio.geneset;
    2
    3   import java.io.FileInputStream;
    4   import java.io.IOException;
    5   import java.io.InputStream;
    6   import java.util.HashSet;
    7   import java.util.Iterator;
    8   import java.util.Map;
    9   import java.util.Set;
    10
    11  import org.xml.sax.SAXException;
    12
    13  import baseCode.bio.GOEntry;
    14  import baseCode.dataStructure.graph.DirectedGraph;
    15  import baseCode.dataStructure.graph.DirectedGraphNode;
    16  import baseCode.xml.GOParser;
    17
    18  /***
    19   * Rea data from GO XML file, store in easy-to-use data structure.
    20   * <p>
    21   * Copyright (c) 2004 Columbia University
    22   *
    23   * @author Paul Pavlidis
    24   * @author Homin Lee
    25   * @version $Id: GONames.java,v 1.3 2004/12/28 22:07:27 pavlidis Exp $
    26   */
    27  public class GONames {
    28
    29     private static Map goNameMap;
    30     private Set newGeneSets = new HashSet();
    31     private GOParser parser;
    32
    33     /***
    34      * @param filename <code>String</code> The XML file containing class to name mappings. First column is the class
    35      *        id, second is a description that will be used int program output.
    36      * @throws IOException
    37      * @throws SAXException
    38      */
    39     public GONames( String filename ) throws SAXException, IOException {
    40        if ( filename == null || filename.length() == 0 ) {
    41           throw new IllegalArgumentException(
    42                 "Invalid filename " + filename + " or no filename was given" );
    43        }
    44
    45        InputStream i = new FileInputStream( filename );
    46        parser = new GOParser( i );
    47        goNameMap = parser.getGONameMap();
    48     }
    49
    50     /***
    51      * @param inputStream
    52      * @throws IOException
    53      * @throws SAXException
    54      */
    55     public GONames( InputStream inputStream ) throws IOException, SAXException {
    56        if ( inputStream == null ) {
    57           throw new IOException( "Input stream was null" );
    58        }
    59
    60        parser = new GOParser( inputStream );
    61        goNameMap = parser.getGONameMap();
    62     }
    63
    64     /***
    65      * Get the graph representation of the GO hierarchy. This can be used to support JTree representations.
    66      *
    67      * @return
    68      */
    69     public DirectedGraph getGraph() {
    70        return parser.getGraph();
    71     }
    72
    73     /***
    74      * @param id
    75      * @return a Set containing the ids of geneSets which are immediately below the selected one in the hierarchy.
    76      */
    77     public Set getChildren( String id ) {
    78        Set returnVal = new HashSet();
    79        Set children = ( ( DirectedGraphNode ) getGraph().get( id ) )
    80              .getChildNodes();
    81        for ( Iterator it = children.iterator(); it.hasNext(); ) {
    82           DirectedGraphNode child = ( DirectedGraphNode ) it.next();
    83           String childKey = ( ( GOEntry ) child.getItem() ).getId()
    84                 .intern();
    85           returnVal.add( childKey.intern() );
    86        }
    87        return returnVal;
    88     }
    89
    90     /***
    91      * @param id
    92      * @return a Set containing the ids of geneSets which are immediately above the selected one in the hierarchy.
    93      */
    94     public Set getParents( String id ) {
    95        Set returnVal = new HashSet();
    96        Set parents = ( ( DirectedGraphNode ) getGraph().get( id ) )
    97              .getParentNodes();
    98        for ( Iterator it = parents.iterator(); it.hasNext(); ) {
    99           DirectedGraphNode parent = ( DirectedGraphNode ) it.next();
    100          String parentKey = ( ( GOEntry ) parent.getItem() ).getId()
    101                .intern();
    102          returnVal.add( parentKey.intern() );
    103       }
    104       return returnVal;
    105    }
    106
    107    /***
    108     * Get the Map representation of the GO id - name associations.
    109     *
    110     * @return Map
    111     */
    112    public Map getMap() {
    113       return goNameMap;
    114    }
    115
    116    /***
    117     * @param go_ID String
    118     * @return String
    119     */
    120    public String getNameForId( String go_ID ) {
    121
    122       if ( !goNameMap.containsKey( go_ID ) ) {
    123          return "<no description available>";
    124       }
    125
    126       return ( ( String ) ( goNameMap.get( go_ID ) ) ).intern();
    127    }
    128
    129
    130    /***
    131     * Get the aspect (molecular_function etc) for an id.
    132     * @param go_ID
    133     * @return
    134     */
    135    public String getAspectForId( String go_ID ) {
    136       if ( !goNameMap.containsKey( go_ID ) ) {
    137          return "<no aspect available>";
    138       }
    139       return ((GOEntry)getGraph().getNodeContents(go_ID)).getAspect();
    140    }
    141
    142
    143    /***
    144     * @param id String
    145     * @param name String
    146     * @todo this should modify the tree representation too.
    147     */
    148    public void addClass( String id, String name ) {
    149       goNameMap.put( id, name );
    150       newGeneSets.add( id );
    151    }
    152
    153    /***
    154     * @param id String
    155     * @param name String
    156     * @todo this should modify the tree representation too.
    157     */
    158    public void modifyClass( String id, String name ) {
    159       goNameMap.put( id, name );
    160       newGeneSets.add( id );
    161    }
    162
    163    /***
    164     * Check if a gene set is already defined.
    165     *
    166     * @param id
    167     * @return
    168     */
    169    public boolean newSet( String id ) {
    170       return newGeneSets.contains( id );
    171    }
    172
    173    /***
    174     * Return the Set of all new gene sets (ones which were added after loading the file)
    175     *
    176     * @return
    177     */
    178    public Set getNewGeneSets() {
    179       return newGeneSets;
    180    }
    181
    182 }