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}