/*
* BioJava development code
*
* This code may be freely distributed and modified under the
* terms of the GNU Lesser General Public Licence. This should
* be distributed with the code. If you do not have a copy,
* see:
*
* http://www.gnu.org/copyleft/lesser.html
*
* Copyright for this code is held jointly by the individual
* authors. These should be listed in @author doc comments.
*
* For more information on the BioJava project and its aims,
* or to join the biojava-l mailing list, visit the home page
* at:
*
* http://www.biojava.org/
*
*
*/
package org.biojava.bio.structure.io.mmcif;
import java.util.HashMap;
import java.util.Map;
import org.biojava.bio.structure.io.mmcif.model.ChemComp;
/** A representation of the Chemical Component Dictionary.
*
* @author Andreas Prlic
* @since 1.7
* @see link into mmCIF dictionary
*
*/
public class ChemicalComponentDictionary {
private Map dictionary;
private Map replaces;
private Map isreplacedby;
public ChemicalComponentDictionary(){
dictionary = new HashMap();
replaces = new HashMap();
isreplacedby = new HashMap();
}
public boolean isReplaced(ChemComp c){
return isReplaced(c.getId());
}
public boolean isReplaced(String id){
if ( isreplacedby.containsKey(id))
return true;
return false;
}
public boolean isReplacer(ChemComp c){
return isReplacer(c.getId());
}
public boolean isReplacer(String id){
if ( replaces.containsKey(id) )
return true;
return false;
}
/** if ChemComp is replaced by another one, get the newer version
* otherwise return the same ChemComp again.
* @param c
* @return get the component that replaced ChemComp.
*/
public ChemComp getReplacer(ChemComp c){
return getReplacer(c.getId());
}
public ChemComp getReplacer(String id){
if (isReplaced(id)){
return dictionary.get(isreplacedby.get(id));
}
return dictionary.get(id);
}
/** if ChemComp is replacing another one, get the old version
* otherwise return the same ChemComp again.
* @param c the ChemComp for which older versions should be looked up.
*/
public ChemComp getReplaced(ChemComp c){
return getReplaced(c.getId());
}
public ChemComp getReplaced(String id){
if (isReplacer(id)){
return dictionary.get(replaces.get(id));
}
return dictionary.get(id);
}
/** Get the parent of a component. If component has no parent, return null
*
* @param c
* @return get the parent component or null if ChemComp has no parent.
*/
public ChemComp getParent(ChemComp c){
if (c.hasParent()){
return dictionary.get(c.getMon_nstd_parent_comp_id());
}
return null;
}
/** add a new component to the dictionary
*
* @param comp
*/
public void addChemComp(ChemComp comp){
dictionary.put(comp.getId(),comp);
String rep = comp.getPdbx_replaces();
if ( (rep != null) && ( ! rep.equals("?"))){
replaces.put(comp.getId(),rep);
}
String isrep = comp.getPdbx_replaced_by();
if ( (isrep != null) && ( ! isrep.equals("?"))){
isreplacedby.put(comp.getId(),isrep);
}
}
}