diff --git a/src/main/org/openscience/cdk/io/SMILESWriter.java b/src/main/org/openscience/cdk/io/SMILESWriter.java index 83ab9d87922..1e1fc7e6a1e 100644 --- a/src/main/org/openscience/cdk/io/SMILESWriter.java +++ b/src/main/org/openscience/cdk/io/SMILESWriter.java @@ -44,6 +44,8 @@ import org.openscience.cdk.interfaces.IMoleculeSet; import org.openscience.cdk.io.formats.IResourceFormat; import org.openscience.cdk.io.formats.SMILESFormat; +import org.openscience.cdk.io.setting.BooleanIOSetting; +import org.openscience.cdk.io.setting.IOSetting; import org.openscience.cdk.smiles.SmilesGenerator; import org.openscience.cdk.tools.ILoggingTool; import org.openscience.cdk.tools.LoggingToolFactory; @@ -63,6 +65,8 @@ public class SMILESWriter extends DefaultChemObjectWriter { LoggingToolFactory.createLoggingTool(SMILESWriter.class); private BufferedWriter writer; + private BooleanIOSetting useAromaticityFlag; + /** * Contructs a new SMILESWriter that can write a list of SMILES to a Writer * @@ -77,6 +81,7 @@ public SMILESWriter(Writer out) { } } catch (Exception exc) { } + initIOSettings(); } public SMILESWriter(OutputStream output) { @@ -170,6 +175,7 @@ public void writeMoleculeSet(IMoleculeSet som) */ public void writeMolecule(IMolecule molecule) { SmilesGenerator sg = new SmilesGenerator(); + sg.setUseAromaticityFlag(useAromaticityFlag.isSet()); String smiles = ""; try { smiles = sg.createSMILES(molecule); @@ -183,4 +189,23 @@ public void writeMolecule(IMolecule molecule) { logger.debug(exc); } } + + private void initIOSettings() { + useAromaticityFlag = new BooleanIOSetting( + "UseAromaticity", + IOSetting.LOW, + "Should aromaticity information be stored in the SMILES?", + "false" + ); + } + + public void customizeJob() { + fireIOSettingQuestion(useAromaticityFlag); + } + + public IOSetting[] getIOSettings() { + IOSetting[] settings = new IOSetting[1]; + settings[0] = useAromaticityFlag; + return settings; + } } diff --git a/src/test/org/openscience/cdk/io/SMILESWriterTest.java b/src/test/org/openscience/cdk/io/SMILESWriterTest.java index 050183fee85..4b2fec33585 100644 --- a/src/test/org/openscience/cdk/io/SMILESWriterTest.java +++ b/src/test/org/openscience/cdk/io/SMILESWriterTest.java @@ -23,6 +23,7 @@ package org.openscience.cdk.io; import java.io.StringWriter; +import java.util.Properties; import org.junit.Assert; import org.junit.BeforeClass; @@ -30,6 +31,7 @@ import org.openscience.cdk.Molecule; import org.openscience.cdk.MoleculeSet; import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.io.listener.PropertiesListener; import org.openscience.cdk.templates.MoleculeFactory; /** @@ -60,4 +62,19 @@ public class SMILESWriterTest extends ChemObjectIOTest { Assert.assertTrue(stringWriter.toString().contains("C=C")); } + @Test public void testWriteAromatic() throws Exception { + StringWriter stringWriter = new StringWriter(); + IMolecule benzene = MoleculeFactory.makeBenzene(); + SMILESWriter smilesWriter = new SMILESWriter(stringWriter); + + Properties prop = new Properties(); + prop.setProperty("UseAromaticity","true"); + PropertiesListener listener = new PropertiesListener(prop); + smilesWriter.addChemObjectIOListener(listener); + smilesWriter.customizeJob(); + smilesWriter.write(benzene); + smilesWriter.close(); + Assert.assertFalse(stringWriter.toString().contains("C=C")); + Assert.assertTrue(stringWriter.toString().contains("ccc")); + } }