001/* 002 * BioJava development code 003 * 004 * This code may be freely distributed and modified under the 005 * terms of the GNU Lesser General Public Licence. This should 006 * be distributed with the code. If you do not have a copy, 007 * see: 008 * 009 * http://www.gnu.org/copyleft/lesser.html 010 * 011 * Copyright for this code is held jointly by the individual 012 * authors. These should be listed in @author doc comments. 013 * 014 * For more information on the BioJava project and its aims, 015 * or to join the biojava-l mailing list, visit the home page 016 * at: 017 * 018 * http://www.biojava.org/ 019 * 020 * 021 */ 022 023package org.biojava.nbio.structure.io.mmcif; 024 025import org.biojava.nbio.structure.io.mmcif.model.ChemComp; 026 027import java.util.HashMap; 028import java.util.Map; 029 030/** A representation of the Chemical Component Dictionary. 031 * 032 * @author Andreas Prlic 033 * @since 1.7 034 * @see <a href="http://mmcif.rcsb.org/dictionaries/">link into mmCIF dictionary</a> 035 * 036 */ 037public class ChemicalComponentDictionary { 038 039 private Map<String, ChemComp> dictionary; 040 private Map<String,String> replaces; 041 private Map<String,String> isreplacedby; 042 043 public ChemicalComponentDictionary(){ 044 dictionary = new HashMap<String, ChemComp>(); 045 replaces = new HashMap<String, String>(); 046 isreplacedby = new HashMap<String, String>(); 047 } 048 049 public boolean isReplaced(ChemComp c){ 050 return isReplaced(c.getId()); 051 052 } 053 public boolean isReplaced(String id){ 054 if ( isreplacedby.containsKey(id)) 055 return true; 056 return false; 057 } 058 public boolean isReplacer(ChemComp c){ 059 return isReplacer(c.getId()); 060 } 061 public boolean isReplacer(String id){ 062 if ( replaces.containsKey(id) ) 063 return true; 064 return false; 065 } 066 067 /** if ChemComp is replaced by another one, get the newer version 068 * otherwise return the same ChemComp again. 069 * @param c 070 * @return get the component that replaced ChemComp. 071 */ 072 public ChemComp getReplacer(ChemComp c){ 073 return getReplacer(c.getId()); 074 } 075 public ChemComp getReplacer(String id){ 076 if (isReplaced(id)){ 077 return dictionary.get(isreplacedby.get(id)); 078 } 079 return dictionary.get(id); 080 } 081 082 /** if ChemComp is replacing another one, get the old version 083 * otherwise return the same ChemComp again. 084 * @param c the ChemComp for which older versions should be looked up. 085 */ 086 087 public ChemComp getReplaced(ChemComp c){ 088 return getReplaced(c.getId()); 089 } 090 public ChemComp getReplaced(String id){ 091 if (isReplacer(id)){ 092 return dictionary.get(replaces.get(id)); 093 } 094 return dictionary.get(id); 095 } 096 097 /** Get the parent of a component. If component has no parent, return null 098 * 099 * @param c 100 * @return get the parent component or null if ChemComp has no parent. 101 */ 102 public ChemComp getParent(ChemComp c){ 103 104 if (c.hasParent()){ 105 return dictionary.get(c.getMon_nstd_parent_comp_id()); 106 } 107 return null; 108 } 109 110 111 112 /** add a new component to the dictionary 113 * 114 * @param comp 115 */ 116 public void addChemComp(ChemComp comp){ 117 118 dictionary.put(comp.getId(),comp); 119 String rep = comp.getPdbx_replaces(); 120 if ( (rep != null) && ( ! rep.equals("?"))){ 121 replaces.put(comp.getId(),rep); 122 } 123 124 String isrep = comp.getPdbx_replaced_by(); 125 if ( (isrep != null) && ( ! isrep.equals("?"))){ 126 isreplacedby.put(comp.getId(),isrep); 127 } 128 } 129 130 /** Returns the number of ChemComps in this dictionary 131 * 132 * @return nr. of ChemComps 133 */ 134 public int size(){ 135 136 return dictionary.size(); 137 138 } 139 140 public ChemComp getChemComp(String id){ 141 return dictionary.get(id); 142 } 143}