001package org.biojava.nbio.structure.io.mmcif; 002 003import org.biojava.nbio.structure.io.mmcif.chem.MetalBondDistance; 004import org.slf4j.Logger; 005import org.slf4j.LoggerFactory; 006 007import java.io.InputStream; 008import java.util.*; 009 010import java.util.zip.GZIPInputStream; 011 012/** 013 * Created by andreas on 6/6/16. 014 */ 015public class MetalBondParser { 016 017 private static final Logger logger = LoggerFactory.getLogger(MetalBondParser.class); 018 019 private static final String BONDS_FILE = "org/biojava/nbio/structure/bond_distance_limits.cif.gz"; 020 021 022 static Map<String,List<MetalBondDistance>> definitions; 023 024 static { 025 definitions = init(); 026 } 027 028 029 public static Map<String,List<MetalBondDistance>> getMetalBondDefinitions(){ 030 return definitions; 031 032 } 033 034 035 private static Map<String,List<MetalBondDistance>> init(){ 036 037 InputStream inputStream = MetalBondParser.class.getClassLoader().getResourceAsStream(BONDS_FILE); 038 039 if (inputStream == null) { 040 throw new RuntimeException("Could not find resource "+BONDS_FILE+". This probably means that your biojava.jar file is corrupt or incorrectly built."); 041 } 042 043 try { 044 GZIPInputStream gzIS = new GZIPInputStream(inputStream); 045 046 SimpleMMcifParser parser = new SimpleMMcifParser(); 047 048 MetalBondConsumer consumer = new MetalBondConsumer(); 049 parser.addMMcifConsumer(consumer); 050 051 parser.parse(gzIS); 052 053 Map<String,List<MetalBondDistance>> defs = consumer.getDefinitions(); 054 055 return defs; 056 057 } catch ( Exception e){ 058 logger.error(e.getMessage(),e); 059 060 } 061 return null; 062 } 063 064 065 066}