code: @Override
      public <T extends IChemObject> T read(T object) throws CDKException {
          if (object instanceof IChemFile) {
              return (T) readChemFile((IChemFile) object);
          } else if (object instanceof IChemModel) {
              return (T) readChemModel((IChemModel) object);
          } else if (object instanceof IReactionSet) {
              return (T) readReactionSet((IReactionSet) object);
          } else if (object instanceof IReaction) {
              return (T) readReaction(object.getBuilder());
          } else {
              throw new CDKException("Only supported are Reaction, ReactionSet, ChemModel and ChemFile, 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