From 32cdc48811dd96a11d264921a654b23f694fb39f Mon Sep 17 00:00:00 2001 From: Egon Willighagen Date: Fri, 13 Aug 2010 14:38:35 +0200 Subject: [PATCH] Throw a CDKException when a QUADRUPLE bond order is in the input, which is not supported by the MDL/Symyx molfile format (fixes #3029352) Signed-off-by: Rajarshi Guha --- src/main/org/openscience/cdk/io/MDLWriter.java | 6 +++--- .../org/openscience/cdk/io/MDLWriterTest.java | 18 ++++++++++++++++++ 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/org/openscience/cdk/io/MDLWriter.java b/src/main/org/openscience/cdk/io/MDLWriter.java index 0dffa57f3bf..7d184f6a876 100644 --- a/src/main/org/openscience/cdk/io/MDLWriter.java +++ b/src/main/org/openscience/cdk/io/MDLWriter.java @@ -35,12 +35,9 @@ import java.text.NumberFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; -import java.util.Calendar; import java.util.Iterator; import java.util.List; import java.util.Locale; -import java.util.StringTokenizer; -import java.util.TimeZone; import org.openscience.cdk.CDKConstants; import org.openscience.cdk.annotations.TestClass; @@ -50,6 +47,7 @@ import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IBond.Order; import org.openscience.cdk.interfaces.IChemFile; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObject; @@ -345,6 +343,8 @@ else if(atom.getValency()==0) int bondType; if (writeAromaticBondTypes.isSet() && bond.getFlag(CDKConstants.ISAROMATIC)) bondType=4; + else if (Order.QUADRUPLE == bond.getOrder()) + throw new CDKException("MDL molfiles do not support quadruple bonds."); else bondType=(int)bond.getOrder().ordinal()+1; line += formatMDLInt(bondType,3); diff --git a/src/test/org/openscience/cdk/io/MDLWriterTest.java b/src/test/org/openscience/cdk/io/MDLWriterTest.java index 2cc0cad7efa..5ad42503181 100644 --- a/src/test/org/openscience/cdk/io/MDLWriterTest.java +++ b/src/test/org/openscience/cdk/io/MDLWriterTest.java @@ -36,6 +36,7 @@ import org.openscience.cdk.Atom; import org.openscience.cdk.AtomContainer; +import org.openscience.cdk.Bond; import org.openscience.cdk.CDKConstants; import org.openscience.cdk.ChemFile; import org.openscience.cdk.ChemModel; @@ -45,6 +46,7 @@ import org.openscience.cdk.exception.CDKException; import org.openscience.cdk.interfaces.IAtom; import org.openscience.cdk.interfaces.IBond; +import org.openscience.cdk.interfaces.IBond.Order; import org.openscience.cdk.interfaces.IChemModel; import org.openscience.cdk.interfaces.IChemObjectBuilder; import org.openscience.cdk.interfaces.IMolecule; @@ -235,6 +237,22 @@ public class MDLWriterTest extends ChemObjectIOTest { Assert.assertTrue(output.indexOf("2 3 1 3 0 0 0")>-1); } + @Test(expected=CDKException.class) + public void testUnsupportedBondOrder() throws Exception { + Molecule molecule = new Molecule(); + molecule.addAtom(new Atom("C")); + molecule.addAtom(new Atom("C")); + molecule.addBond( + new Bond( + molecule.getAtom(0), + molecule.getAtom(1), + Order.QUADRUPLE + ) + ); + MDLWriter mdlWriter = new MDLWriter(new StringWriter()); + mdlWriter.write(molecule); + } + @Test public void testTwoFragmentsWithTitle() throws CDKException{ IMolecule mol1 = MoleculeFactory.makeAlphaPinene(); mol1.setProperty(CDKConstants.TITLE,"title1");