⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fileconvertor.java

📁 化学图形处理软件
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/* $RCSfile$ * $Author: egonw $ * $Date: 2008-02-17 10:06:51 +0100 (Sun, 17 Feb 2008) $ * $Revision: 10151 $ * * Copyright (C) 2001-2007  The Chemistry Development Kit (CDK) project * * Contact: cdk-devel@lists.sourceforge.net * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License * as published by the Free Software Foundation; either version 2.1 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. */package org.openscience.cdk.applications;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileWriter;import java.io.IOException;import java.io.InputStream;import java.io.Writer;import java.lang.reflect.Constructor;import java.util.List;import java.util.Properties;import java.util.Vector;import javax.vecmath.Vector2d;import org.apache.commons.cli.CommandLine;import org.apache.commons.cli.CommandLineParser;import org.apache.commons.cli.HelpFormatter;import org.apache.commons.cli.OptionBuilder;import org.apache.commons.cli.Options;import org.apache.commons.cli.ParseException;import org.apache.commons.cli.PosixParser;import org.openscience.cdk.DefaultChemObjectBuilder;import org.openscience.cdk.config.AtomTypeFactory;import org.openscience.cdk.exception.CDKException;import org.openscience.cdk.graph.rebond.RebondTool;import org.openscience.cdk.interfaces.IAtom;import org.openscience.cdk.interfaces.IAtomContainer;import org.openscience.cdk.interfaces.IChemFile;import org.openscience.cdk.interfaces.IChemModel;import org.openscience.cdk.interfaces.IChemObjectBuilder;import org.openscience.cdk.interfaces.IChemSequence;import org.openscience.cdk.interfaces.ICrystal;import org.openscience.cdk.interfaces.IMolecule;import org.openscience.cdk.interfaces.IMoleculeSet;import org.openscience.cdk.interfaces.IPseudoAtom;import org.openscience.cdk.io.CDKSourceCodeWriter;import org.openscience.cdk.io.HINWriter;import org.openscience.cdk.io.IChemObjectIO;import org.openscience.cdk.io.IChemObjectReader;import org.openscience.cdk.io.IChemObjectWriter;import org.openscience.cdk.io.MDLWriter;import org.openscience.cdk.io.PDBWriter;import org.openscience.cdk.io.ReaderFactory;import org.openscience.cdk.io.SMILESWriter;import org.openscience.cdk.io.SVGWriter;import org.openscience.cdk.io.ShelXWriter;import org.openscience.cdk.io.XYZWriter;import org.openscience.cdk.io.listener.PropertiesListener;import org.openscience.cdk.io.listener.TextGUIListener;import org.openscience.cdk.io.program.GaussianInputWriter;import org.openscience.cdk.io.setting.IOSetting;import org.openscience.cdk.layout.StructureDiagramGenerator;import org.openscience.cdk.tools.HydrogenAdder;import org.openscience.cdk.tools.LoggingTool;import org.openscience.cdk.tools.SaturationChecker;import org.openscience.cdk.tools.manipulator.ChemFileManipulator;/** * Program that converts a file from one format to a file with another format. * Supported formats are: *   input: CML, MDL MOL/SDF file, PDB, PMP, ShelX, SMILES, XYZ *  output: CML, MDL MOL/SDF file, PDB, ShelX, SMILES, SVG, XYZ,  *          Gaussian Input, CDK source code * * @cdk.module applications * * @author Egon Willighagen <egonw@sci.kun.nl> * * @cdk.require      java1.4+ * @cdk.require      batik * @cdk.keyword      command line util * @cdk.keyword      file format * @cdk.builddepends commons-cli-1.0.jar */public class FileConvertor {/* *  This is a command line application            *  Do not convert System.out/err.println()  *  to logger statements */	    private LoggingTool logger;    private IChemObjectBuilder builder;    private IChemObjectReader cor;    private String oformat;    private IChemObjectWriter cow;    private TextGUIListener settingListener;    private PropertiesListener propsListener;    private int level;    private Vector chemObjectNames = new Vector();	/* The below three processings are applied on the molecular level	 * only, and the implementation can be found in write(Molecule);	 */    private boolean applyHAdding = false;    private boolean applyHRemoval = false;    private boolean apply2DCleanup = false;    private boolean apply3DRebonding = false;    public FileConvertor() {        logger = new LoggingTool();        LoggingTool.configureLog4j();        logger.dumpSystemProperties();                builder = DefaultChemObjectBuilder.getInstance();        settingListener = new TextGUIListener(level);        propsListener = null;        this.level = 0;        this.oformat = "cml";        chemObjectNames.add("org.openscience.cdk.Molecule");        chemObjectNames.add("org.openscience.cdk.MoleculeSet");        chemObjectNames.add("org.openscience.cdk.Crystal");        chemObjectNames.add("org.openscience.cdk.ChemModel");        chemObjectNames.add("org.openscience.cdk.ChemSequence");        chemObjectNames.add("org.openscience.cdk.ChemFile");    }    /**     * Convert the file <code>ifilename</code>.     *     * @param ifilename name of input file     */    public boolean convert(String ifilename) {        if (this.level > 0) System.out.println();        boolean success = false;        try {            File file = new File(ifilename);            if (file.isFile()) {                cor = getChemObjectReader(file);                if (cor == null) {                    logger.warn("The format of the input file is not recognized or not supported.");                    System.err.println("The format of the input file is not recognized or not supported.");                    return false;                }                IChemFile content = (IChemFile)cor.read(builder.newChemFile());                if (content == null) {                    return false;                }                // apply modifications                List containersList = ChemFileManipulator.getAllAtomContainers(content);                AtomTypeFactory factory = AtomTypeFactory.getInstance(                    "org/openscience/cdk/config/data/jmol_atomtypes.txt",                    content.getBuilder()                );                for (int i=0; i<containersList.size(); i++) {                	IAtomContainer container = (IAtomContainer)containersList.get(i);                	java.util.Iterator atoms = container.atoms();                    if (applyHAdding || applyHRemoval || apply2DCleanup || apply3DRebonding) {                        while (atoms.hasNext()) {                        	IAtom atom = (IAtom)atoms.next();                            if (!(atom instanceof IPseudoAtom)) {                                try {                                    factory.configure(atom);                                } catch (CDKException exception) {                                    logger.warn("Could not configure atom: ", exception.getMessage());                                    logger.debug(exception);                                }                            }                        }                    }                    if (applyHAdding) {                        logger.info("Adding Hydrogens...");                        HydrogenAdder adder = new HydrogenAdder("org.openscience.cdk.tools.ValencyChecker");                        adder.addExplicitHydrogensToSatisfyValency(                        	builder.newMolecule(container)                        );                    } else if (applyHRemoval) {                        for (int atomi=0; atomi<container.getAtomCount(); atomi++) {                            if (container.getAtom(atomi).getSymbol().equals("H")) {                                container.removeAtomAndConnectedElectronContainers(container.getAtom(atomi));                            }                        }                    }                    if (apply3DRebonding) {                        logger.info("Creating bonds from 3D coordinates");                        RebondTool rebonder = new RebondTool(2.0, 0.5, 0.5);                        rebonder.rebond(container);                        SaturationChecker satChecker = new SaturationChecker();                        satChecker.saturate(container);                    }                    if (apply2DCleanup) {                        logger.info("Creating 2D coordinates");                        StructureDiagramGenerator sdg = new StructureDiagramGenerator();                        try {                            sdg.setMolecule(builder.newMolecule(container), false); // false -> don't make clone!                            sdg.generateCoordinates(new Vector2d(0, 1));                            container = sdg.getMolecule();                            logger.debug("###########", container);                        } catch (Exception exc) {                            System.out.println("Could not generate coordinates for this molecule.");                            logger.info("Could not generate coordinates for this molecule: ", exc.getMessage());                            logger.debug(exc);                            System.exit(1);                        }                    }                }                                // create output file                String ofilename = getOutputFileName(ifilename, this.oformat);                FileWriter fileWriter = new FileWriter(new File(ofilename));                cow = getChemObjectWriter(this.oformat, fileWriter);                if (cow == null) {                    logger.warn("Format ", oformat, " is an unsupported output format.");                    System.err.println("Unsupported output format!");                    return false;                }                write(content, ofilename);                cow.close();                success = true;            } else {                System.out.println("Skipping non-file.");            }        } catch (FileNotFoundException exception) {            System.out.println("File " + ifilename + " does not exist!");        } catch (Exception exception) {            logger.debug(exception);        }        return success;    }    /**     * actual program     */    public static void main(String[] args) {        FileConvertor convertor = new FileConvertor();        // process options        String[] filesToConvert = convertor.parseCommandLineOptions(args);        // do conversion(s)        for (int i=0; i < filesToConvert.length; i++) {            String inputFilename = filesToConvert[i];            System.out.print("Converting " + inputFilename + " ... ");            boolean success = convertor.convert(inputFilename);            if (success) {                System.out.println("succeeded!");            } else {                System.out.println("failed!");            }        }    }    // PRIVATE INTERNAL STUFF    private IChemObjectReader getChemObjectReader(File file) throws IOException {        InputStream fileReader = new FileInputStream(file);        IChemObjectReader reader = new ReaderFactory().createReader(fileReader);        if (reader != null) {            if (settingListener != null) {                reader.addChemObjectIOListener(settingListener);            }            if (propsListener != null) {                reader.addChemObjectIOListener(propsListener);            }        }        return reader;    }    private IChemObjectWriter getChemObjectWriter(String format, Writer fileWriter) {        IChemObjectWriter writer = null;        try {            if (format.equalsIgnoreCase("MOL")) {                writer = new MDLWriter(fileWriter);            } else if (format.equalsIgnoreCase("SMI")) {                writer = new SMILESWriter(fileWriter);            } else if (format.equalsIgnoreCase("SHELX")) {                writer = new ShelXWriter(fileWriter);            } else if (format.equalsIgnoreCase("SVG")) {                writer = new SVGWriter(fileWriter);            } else if (format.equalsIgnoreCase("XYZ")) {                writer = new XYZWriter(fileWriter);            } else if (format.equalsIgnoreCase("PDB")) {                writer = new PDBWriter(fileWriter);            } else if (format.equalsIgnoreCase("GIN")) {                writer = new GaussianInputWriter(fileWriter);            } else if (format.equalsIgnoreCase("CDK")) {                writer = new CDKSourceCodeWriter(fileWriter);            } else if (format.equalsIgnoreCase("HIN")) {                writer = new HINWriter(fileWriter);            }            if (writer != null) {                logger.debug(format + " -> " + writer.getClass().getName());                if (settingListener != null) {                    writer.addChemObjectIOListener(settingListener);                }                if (propsListener != null) {                    writer.addChemObjectIOListener(propsListener);                }            } else if (format.equalsIgnoreCase("CML")) {            	Class cmlWriterClass = this.getClass().getClassLoader().loadClass("org.opscience.cdk.io.CMLWriter");            	if (cmlWriterClass != null) {                    writer = (IChemObjectWriter)cmlWriterClass.newInstance();            	}            	Constructor constructor = writer.getClass().getConstructor(new Class[]{Writer.class});            	writer = (IChemObjectWriter)constructor.newInstance(new Object[]{fileWriter});            } else {                logger.debug(format + " -> null");            }        } catch (Exception exception) {            logger.error("Could not instantiate writer: ", exception.getMessage());            logger.debug(exception);        }        return writer;    }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -