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 */
021package org.biojava.nbio.structure.io.mmcif;
022
023import org.biojava.nbio.structure.io.mmcif.chem.MetalBondDistance;
024import org.slf4j.Logger;
025import org.slf4j.LoggerFactory;
026
027import java.io.InputStream;
028import java.util.*;
029
030import java.util.zip.GZIPInputStream;
031
032/**
033 * Created by andreas on 6/6/16.
034 */
035public class MetalBondParser  {
036
037        private static final Logger logger = LoggerFactory.getLogger(MetalBondParser.class);
038
039        private static final String BONDS_FILE = "org/biojava/nbio/structure/bond_distance_limits.cif.gz";
040
041
042        static Map<String,List<MetalBondDistance>> definitions;
043
044        static {
045                 definitions = init();
046        }
047
048
049        public static Map<String,List<MetalBondDistance>> getMetalBondDefinitions(){
050                return definitions;
051
052        }
053
054
055        private static Map<String,List<MetalBondDistance>> init(){
056
057                InputStream inputStream = MetalBondParser.class.getClassLoader().getResourceAsStream(BONDS_FILE);
058
059                if (inputStream == null) {
060                        throw new RuntimeException("Could not find resource "+BONDS_FILE+".  This probably means that your biojava.jar file is corrupt or incorrectly built.");
061                }
062
063                try {
064                        GZIPInputStream gzIS = new GZIPInputStream(inputStream);
065
066                        SimpleMMcifParser parser = new SimpleMMcifParser();
067
068                        MetalBondConsumer consumer = new MetalBondConsumer();
069                        parser.addMMcifConsumer(consumer);
070
071                        parser.parse(gzIS);
072
073                        Map<String,List<MetalBondDistance>> defs = consumer.getDefinitions();
074
075                        return defs;
076
077                } catch ( Exception e){
078                        logger.error(e.getMessage(),e);
079
080                }
081                return null;
082        }
083
084
085
086}