/* $Revision$ $Author$ $Date$ * * Copyright (C) 2008 Egon Willighagen <egonw@users.sf.net> * * Contact: cdk-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation, version 2.1. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */ package org.openscience.cdk.atomtype.mapper; import org.openscience.cdk.annotations.TestClass; import org.openscience.cdk.annotations.TestMethod; import org.openscience.cdk.config.atomtypes.OWLAtomTypeMappingReader; import java.io.InputStream; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; /** * An <code>AtomTypeMapper</code> allows the mapping of atom types between atom type * schemes. For example, it allows to convert atom types from the CDK scheme to the * Sybyl scheme; using this approach it is possible to use the CDK atom type perception * algorithm and write the resulting atom types using the Sybyl atom type scheme. * * @cdk.module atomtype */ @TestClass("org.openscience.cdk.atomtype.mapper.AtomTypeMapperTest") public class AtomTypeMapper { private static Map<String,AtomTypeMapper> mappers = new HashMap<String,AtomTypeMapper>(); private String mappingFile; private Map<String,String> mappings; private AtomTypeMapper(String mappingFile) { this.mappingFile = mappingFile; InputStream stream = this.getClass().getClassLoader().getResourceAsStream(mappingFile); OWLAtomTypeMappingReader reader = new OWLAtomTypeMappingReader( new InputStreamReader(stream) ); mappings = reader.readAtomTypeMappings(); } private AtomTypeMapper(String mappingFile, InputStream stream) { this.mappingFile = mappingFile; OWLAtomTypeMappingReader reader = new OWLAtomTypeMappingReader( new InputStreamReader(stream) ); mappings = reader.readAtomTypeMappings(); } /** * Instantiates an atom type to atom type mapping, based on the given mapping file. * For example, the mapping file <code>org.openscience.cdk.config.data.cdk-sybyl-mappings.owl</code> * which defines how CDK atom types are mapped to Sybyl atom types. * * @param mappingFile File name of the OWL file defining the atom type to atom type mappings. * @return An instance of AtomTypeMapper for the given mapping file. */ @TestMethod("testGetInstance_String") public static AtomTypeMapper getInstance(String mappingFile) { if (!mappers.containsKey(mappingFile)) { mappers.put(mappingFile, new AtomTypeMapper(mappingFile)); } return mappers.get(mappingFile); } @TestMethod("testGetInstance_String_InputStream") public static AtomTypeMapper getInstance(String mappingFile, InputStream stream) { if (!mappers.containsKey(mappingFile)) { mappers.put(mappingFile, new AtomTypeMapper(mappingFile, stream)); } return mappers.get(mappingFile); } @TestMethod("testMapAtomType_String") public String mapAtomType(String type) { return mappings.get(type); } @TestMethod("testGetMapping") public String getMapping() { return mappingFile; } }