Logo Search packages:      
Sourcecode: cdk version File versions  Download package

AtomTypeMapper.java

/* $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")
00040 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")
00074       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;
      }

}

Generated by  Doxygen 1.6.0   Back to index