$darkmode
DENOPTIM
IteratingAtomContainerReader.java
Go to the documentation of this file.
1package denoptim.io;
2
3import java.io.BufferedReader;
4import java.io.File;
5import java.io.FileInputStream;
6import java.io.FileNotFoundException;
7import java.io.FileReader;
8import java.io.IOException;
9import java.util.Iterator;
10import java.util.List;
11
12import org.openscience.cdk.DefaultChemObjectBuilder;
13import org.openscience.cdk.exception.CDKException;
14import org.openscience.cdk.interfaces.IAtomContainer;
15import org.openscience.cdk.io.FormatFactory;
16import org.openscience.cdk.io.formats.IChemFormat;
17import org.openscience.cdk.io.formats.MDLV2000Format;
18import org.openscience.cdk.io.formats.MDLV3000Format;
19import org.openscience.cdk.io.iterator.DefaultIteratingChemObjectReader;
20import org.openscience.cdk.io.iterator.IteratingSDFReader;
21import org.openscience.cdk.io.iterator.IteratingSMILESReader;
22
23import denoptim.exception.DENOPTIMException;
24
36public class IteratingAtomContainerReader implements Iterator<IAtomContainer>
37{
38
42 private List<IAtomContainer> results;
43
48 private Iterator<IAtomContainer> listIterator;
49
54 private DefaultIteratingChemObjectReader<IAtomContainer> fileIterator;
55
60 private boolean usingIteratingReader = false;
61
62//------------------------------------------------------------------------------
63
72 public IteratingAtomContainerReader(File input)
73 throws FileNotFoundException, IOException, CDKException,
75 {
76 FormatFactory factory = new FormatFactory();
77 factory.registerFormat(new SMILESListFormat());
78
79 BufferedReader headReader = new BufferedReader(new FileReader(input));
80 IChemFormat chemFormat = factory.guessFormat(headReader);
81 headReader.close();
82
83 if (chemFormat instanceof MDLV2000Format
84 || chemFormat instanceof MDLV3000Format)
85 {
86 FileInputStream fis = new FileInputStream(input);
87 fileIterator = new IteratingSDFReader(fis,
88 DefaultChemObjectBuilder.getInstance());
90 } else if (chemFormat instanceof SMILESListFormat) {
91
92 FileInputStream fis = new FileInputStream(input);
93 fileIterator = new IteratingSMILESReader(fis,
94 DefaultChemObjectBuilder.getInstance());
96 } else {
98 listIterator = results.iterator();
99 }
100 }
101
102//------------------------------------------------------------------------------
103
104 @Override
105 public boolean hasNext()
106 {
108 return fileIterator.hasNext();
109 else
110 return listIterator.hasNext();
111 }
112
113//------------------------------------------------------------------------------
114
115 @Override
116 public IAtomContainer next()
117 {
119 return fileIterator.next();
120 else
121 return listIterator.next();
122 }
123
124//------------------------------------------------------------------------------
125
131 public void close() throws IOException
132 {
133 if (fileIterator!=null)
134 fileIterator.close();
135 }
136
137//------------------------------------------------------------------------------
138
142 public Class<?> getIteratorType()
143 {
145 return fileIterator.getClass();
146 else
147 return listIterator.getClass();
148 }
149
150//------------------------------------------------------------------------------
151}
Utility methods for input/output.
static List< IAtomContainer > readAllAtomContainers(File file)
Returns a single collection with all atom containers found in a file of any format.
An iterator that take IAtomContainers from a file, possibly using an available iterating reader,...
DefaultIteratingChemObjectReader< IAtomContainer > fileIterator
Reference to the memory-efficient iterator, or null if we have had to pre-load all containers.
Iterator< IAtomContainer > listIterator
Reference to the iterator over pre-loaded containers or null if we use the memory-efficient iterator ...
IteratingAtomContainerReader(File input)
Constructs an iterator over the containers that can be found in the given file.
List< IAtomContainer > results
The containers loaded in memory, or null if we use an Iterator.
void close()
Close the memory-efficient iterator if any is open.
boolean usingIteratingReader
Flag indicating whether we are using a memory-efficient iterator (true of id we have had to pre-load ...
Class for recognizing file containing a list of SMILES .