/*
* $RCSfile$
* $Author$
* $Date$
* $Revision$
*
* Copyright (C) 2003-2007 The Chemistry Development Kit (CDK) project
*
* 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; either version 2.1
* of the License, or (at your option) any later version.
* All we ask is that proper credit is given for our work, which includes
* - but is not limited to - adding the above copyright notice to the beginning
* of your source code files, and to any copyright notice that you may distribute
* with programs based on this work.
*
* 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.tools.manipulator;
import org.openscience.cdk.CDKConstants;
import org.openscience.cdk.annotations.TestClass;
import org.openscience.cdk.annotations.TestMethod;
import org.openscience.cdk.interfaces.IAtom;
import org.openscience.cdk.interfaces.IAtomType;
import org.openscience.cdk.interfaces.IPseudoAtom;
/**
* Class with utilities for the <code>AtomType</code> class.
* - changed 21/7/05 by cho: add properties for mmff94 atom type
*
* @author mfe4
* @author egonw
* @cdk.module standard
* @cdk.githash
*/
@TestClass("org.openscience.cdk.tools.manipulator.AtomTypeManipulatorTest")
public class AtomTypeManipulator {
/**
* Method that assign properties to an atom given a particular atomType.
* An <code>IllegalArgumentException</code> is thrown if the given <code>IAtomType</code>
* is null. <b>This method overwrites non-null values.</b>
*
* @param atom Atom to configure
* @param atomType AtomType. Must not be null.
*/
@TestMethod("testConfigure_IAtom_IAtomType")
public static void configure(IAtom atom, IAtomType atomType) {
if (atomType == null) {
throw new IllegalArgumentException("The IAtomType was null.");
}
// we set the atom type name, but nothing else
atom.setAtomTypeName(atomType.getAtomTypeName());
// configuring aotm type information is not really valid
// for pseudo atoms - first because they basically have no
// type information and second because they may have information
// associated with them from another context, which should not be
// overwritten. So we only do the stuff below if we have a non pseudoatom
//
// a side effect of this is that it is probably not valid to get the atom
// type of a peudo atom. I think this is OK, since you can always check
// whether an atom is a pseudo atom without looking at its atom type
if (!(atom instanceof IPseudoAtom)) {
atom.setSymbol(atomType.getSymbol());
atom.setMaxBondOrder(atomType.getMaxBondOrder());
atom.setBondOrderSum(atomType.getBondOrderSum());
atom.setCovalentRadius(atomType.getCovalentRadius());
atom.setValency(atomType.getValency());
atom.setFormalCharge(atomType.getFormalCharge());
atom.setHybridization(atomType.getHybridization());
atom.setFormalNeighbourCount(atomType.getFormalNeighbourCount());
atom.setFlag(CDKConstants.IS_HYDROGENBOND_ACCEPTOR, atomType.getFlag(CDKConstants.IS_HYDROGENBOND_ACCEPTOR));
atom.setFlag(CDKConstants.IS_HYDROGENBOND_DONOR, atomType.getFlag(CDKConstants.IS_HYDROGENBOND_DONOR));
Object constant = atomType.getProperty(CDKConstants.CHEMICAL_GROUP_CONSTANT);
if (constant != null) {
atom.setProperty(CDKConstants.CHEMICAL_GROUP_CONSTANT, constant);
}
atom.setFlag(CDKConstants.ISAROMATIC, atomType.getFlag(CDKConstants.ISAROMATIC));
Object color = atomType.getProperty("org.openscience.cdk.renderer.color");
if (color != null) {
atom.setProperty("org.openscience.cdk.renderer.color", color);
}
if (atomType.getAtomicNumber() != CDKConstants.UNSET) atom.setAtomicNumber(atomType.getAtomicNumber());
if (atomType.getExactMass() != CDKConstants.UNSET) atom.setExactMass(atomType.getExactMass());
}
}
/**
* Method that assign properties to an atom given a particular atomType.
* An {@link IllegalArgumentException} is thrown if the given {@link IAtomType}
* is null. <b>This method only sets null values.</b>
*
* @param atom Atom to configure
* @param atomType AtomType. Must not be null.
*/
@TestMethod("testConfigureUnsetProperties_DontOverwriterSetProperties,testConfigureUnsetProperties")
public static void configureUnsetProperties(IAtom atom, IAtomType atomType) {
if (atomType == null) {
throw new IllegalArgumentException("The IAtomType was null.");
}
if (atom.getSymbol() == CDKConstants.UNSET && atomType.getSymbol() != CDKConstants.UNSET) atom.setSymbol(atomType.getSymbol());
if (atom.getAtomTypeName() == CDKConstants.UNSET && atomType.getAtomTypeName() != CDKConstants.UNSET) atom.setAtomTypeName(atomType.getAtomTypeName());
if (atom.getMaxBondOrder() == CDKConstants.UNSET && atomType.getMaxBondOrder() != CDKConstants.UNSET) atom.setMaxBondOrder(atomType.getMaxBondOrder());
if (atom.getBondOrderSum() == CDKConstants.UNSET && atomType.getBondOrderSum() != CDKConstants.UNSET) atom.setBondOrderSum(atomType.getBondOrderSum());
if (atom.getCovalentRadius() == CDKConstants.UNSET && atomType.getCovalentRadius() != CDKConstants.UNSET) atom.setCovalentRadius(atomType.getCovalentRadius());
if (atom.getValency() == CDKConstants.UNSET && atomType.getValency() != CDKConstants.UNSET) atom.setValency(atomType.getValency());
if (atom.getFormalCharge() == CDKConstants.UNSET && atomType.getFormalCharge() != CDKConstants.UNSET) atom.setFormalCharge(atomType.getFormalCharge());
if (atom.getHybridization() == CDKConstants.UNSET && atomType.getHybridization() != CDKConstants.UNSET) atom.setHybridization(atomType.getHybridization());
if (atom.getFormalNeighbourCount() == CDKConstants.UNSET && atomType.getFormalNeighbourCount() != CDKConstants.UNSET) atom.setFormalNeighbourCount(atomType.getFormalNeighbourCount());
if (atom.getAtomicNumber() == CDKConstants.UNSET && atomType.getAtomicNumber() != CDKConstants.UNSET) atom.setAtomicNumber(atomType.getAtomicNumber());
if (atom.getExactMass() == CDKConstants.UNSET && atomType.getExactMass() != CDKConstants.UNSET) atom.setExactMass(atomType.getExactMass());
}
}