Skip to content

Commit 3d5fdeb

Browse files
committed
fix for MDLV2000Writer when SGroup Parent Atoms (SPA) is a List instead of a Set
1 parent 2ff14f7 commit 3d5fdeb

File tree

5 files changed

+35
-12
lines changed

5 files changed

+35
-12
lines changed

display/renderbasic/src/main/java/org/openscience/cdk/renderer/generators/standard/StandardSgroupGenerator.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ private static void hideMultipleParts(IAtomContainer container, Sgroup sgroup) {
206206

207207
final Set<IBond> crossing = sgroup.getBonds();
208208
final Set<IAtom> atoms = sgroup.getAtoms();
209-
final Set<IAtom> parentAtoms = sgroup.getValue(SgroupKey.CtabParentAtomList);
209+
final Collection<IAtom> parentAtoms = sgroup.getValue(SgroupKey.CtabParentAtomList);
210210

211211
for (IBond bond : container.bonds()) {
212212
if (parentAtoms.contains(bond.getBegin()) && parentAtoms.contains(bond.getEnd()))

storage/ctab/src/main/java/org/openscience/cdk/io/MDLV2000Reader.java

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -73,15 +73,7 @@
7373
import java.io.InputStreamReader;
7474
import java.io.Reader;
7575
import java.io.StringReader;
76-
import java.util.ArrayList;
77-
import java.util.Collections;
78-
import java.util.HashMap;
79-
import java.util.HashSet;
80-
import java.util.LinkedHashMap;
81-
import java.util.List;
82-
import java.util.Map;
83-
import java.util.Set;
84-
import java.util.StringTokenizer;
76+
import java.util.*;
8577
import java.util.regex.Matcher;
8678
import java.util.regex.Pattern;
8779

@@ -1256,7 +1248,7 @@ void readPropertiesFast(final BufferedReader input, final IAtomContainer contain
12561248
case M_SPA:
12571249
sgroup = ensureSgroup(sgroups, readMolfileInt(line, 7));
12581250
count = readMolfileInt(line, 10);
1259-
Set<IAtom> parentAtomList = sgroup.getValue(SgroupKey.CtabParentAtomList);
1251+
Collection<IAtom> parentAtomList = sgroup.getValue(SgroupKey.CtabParentAtomList);
12601252
if (parentAtomList == null) {
12611253
sgroup.putValue(SgroupKey.CtabParentAtomList, parentAtomList = new HashSet<IAtom>());
12621254
}

storage/ctab/src/main/java/org/openscience/cdk/io/MDLV2000Writer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1030,7 +1030,7 @@ private void writeSgroups(IAtomContainer container, BufferedWriter writer, Map<I
10301030
writer.write('\n');
10311031
break;
10321032
case CtabParentAtomList:
1033-
Set<IAtom> parentAtomList = sgroup.getValue(key);
1033+
Collection<IAtom> parentAtomList = sgroup.getValue(key);
10341034
for (List<IAtom> atoms : wrap(parentAtomList, 15)) {
10351035
writer.write("M SPA ");
10361036
writer.write(formatMDLInt(id, 3));

storage/ctab/src/main/java/org/openscience/cdk/io/iterator/IteratingSDFReader.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,7 @@ public boolean hasNext() {
259259
reader.setReader(new StringReader(buffer.toString()));
260260
molecule = reader.read(builder.newAtomContainer());
261261
} catch (Exception exception) {
262+
exception.printStackTrace();
262263
logger.error("Error while reading next molecule: " + exception.getMessage());
263264
logger.debug(exception);
264265
}

storage/ctab/src/test/java/org/openscience/cdk/io/MDLV2000WriterTest.java

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,14 +47,19 @@
4747
import org.openscience.cdk.interfaces.ITetrahedralChirality;
4848
import org.openscience.cdk.io.listener.PropertiesListener;
4949
import org.openscience.cdk.sgroup.Sgroup;
50+
import org.openscience.cdk.sgroup.SgroupKey;
51+
import org.openscience.cdk.sgroup.SgroupType;
52+
import org.openscience.cdk.silent.SilentChemObjectBuilder;
5053
import org.openscience.cdk.templates.TestMoleculeFactory;
5154

5255
import javax.vecmath.Point2d;
5356
import javax.vecmath.Point3d;
5457
import java.io.IOException;
5558
import java.io.InputStream;
5659
import java.io.StringWriter;
60+
import java.util.ArrayList;
5761
import java.util.Collections;
62+
import java.util.List;
5863
import java.util.Properties;
5964
import java.util.regex.Matcher;
6065
import java.util.regex.Pattern;
@@ -971,4 +976,29 @@ public void skipDefaultProps() throws Exception {
971976
+ "M END"));
972977
}
973978
}
979+
980+
@Test
981+
public void writeParentAtomSgroupAsList() throws Exception{
982+
IAtomContainer mol = builder.newAtomContainer();
983+
IAtom atom = builder.newAtom();
984+
atom.setSymbol("C");
985+
mol.addAtom(atom);
986+
// build multiple group Sgroup
987+
Sgroup sgroup = new Sgroup();
988+
sgroup.setType(SgroupType.CtabMultipleGroup);
989+
sgroup.addAtom(atom);
990+
List<IAtom> patoms = new ArrayList<>();
991+
992+
patoms.add(atom);
993+
994+
sgroup.putValue(SgroupKey.CtabParentAtomList, patoms);
995+
mol.setProperty(CDKConstants.CTAB_SGROUPS,
996+
Collections.singletonList(sgroup));
997+
StringWriter sw = new StringWriter();
998+
try (MDLV2000Writer mdlw = new MDLV2000Writer(sw)) {
999+
mdlw.write(mol);
1000+
}
1001+
assertThat(sw.toString(), containsString("SPA 1 1"));
1002+
1003+
}
9741004
}

0 commit comments

Comments
 (0)