code: @Override
      public <T extends IChemObject> T read(T object) throws CDKException {
          if (object instanceof IReaction) {
              return (T) readReaction(object.getBuilder());
          } else if (object instanceof IReactionSet) {
              IReactionSet reactionSet = object.getBuilder().newInstance(IReactionSet.class);
              reactionSet.addReaction(readReaction(object.getBuilder()));
              return (T) reactionSet;
          } else if (object instanceof IChemModel) {
              IChemModel model = object.getBuilder().newInstance(IChemModel.class);
              IReactionSet reactionSet = object.getBuilder().newInstance(IReactionSet.class);
              reactionSet.addReaction(readReaction(object.getBuilder()));
              model.setReactionSet(reactionSet);
              return (T) model;
          } else if (object instanceof IChemFile) {
              IChemFile chemFile = object.getBuilder().newInstance(IChemFile.class);
              IChemSequence sequence = object.getBuilder().newInstance(IChemSequence.class);
              sequence.addChemModel((IChemModel) read(object.getBuilder().newInstance(IChemModel.class)));
              chemFile.addChemSequence(sequence);
              return (T) chemFile;
          } else {
              throw new CDKException("Only supported are Reaction and ChemModel, and not " + object.getClass().getName()
                      + ".");
          }
      }
docs: Takes an object which subclasses IChemObject, e.g.Molecule, and will read
  this (from file, database, internet etc). If the specific implementation
  does not support a specific IChemObject it will throw an Exception.
  
  @param  object                              The object that subclasses
  IChemObject
  @return                                     The IChemObject read
  @exception  CDKException