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

📄 openaction.java

📁 化学图形处理软件
💻 JAVA
字号:
/* *  $RCSfile$ *  $Author: egonw $ *  $Date: 2007-01-05 15:18:42 +0100 (Fri, 05 Jan 2007) $ *  $Revision: 7640 $ * *  Copyright (C) 1997-2007  The JChemPaint project * *  Contact: jchempaint-devel@lists.sf.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. *  All we ask is that proper credit is given for our work, which includes *  - but is not limited to - adding the above copyright notice to the beginning *  of your source code files, and to any copyright notice that you may distribute *  with programs based on this work. * *  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.jchempaint.action;import java.awt.event.ActionEvent;import java.io.DataInputStream;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import javax.swing.JFileChooser;import javax.swing.JFrame;import javax.swing.JOptionPane;import javax.swing.filechooser.FileFilter;import org.openscience.cdk.ChemModel;import org.openscience.cdk.applications.jchempaint.io.JCPFileFilter;import org.openscience.cdk.applications.jchempaint.io.JCPFileView;import org.openscience.cdk.interfaces.IChemFile;import org.openscience.cdk.interfaces.IChemObject;import org.openscience.cdk.interfaces.IMolecule;import org.openscience.cdk.io.CMLReader;import org.openscience.cdk.io.IChemObjectReader;import org.openscience.cdk.io.INChIReader;import org.openscience.cdk.io.MDLV2000Reader;import org.openscience.cdk.tools.HydrogenAdder;/** * Shows the open dialog * * @author        steinbeck * @cdk.module    jchempaint */public class OpenAction extends JCPAction {	private static final long serialVersionUID = 1030940425527065876L;	private FileFilter currentFilter = null;	/**	 *  Opens an empty JChemPaint frame.	 *	 * @param  e  Description of the Parameter	 */	public void actionPerformed(ActionEvent e) {		JFileChooser chooser = new JFileChooser();		chooser.setCurrentDirectory(jcpPanel.getCurrentWorkDirectory());		JCPFileFilter.addChoosableFileFilters(chooser);		if (jcpPanel.getCurrentOpenFileFilter() != null) {			chooser.setFileFilter(jcpPanel.getCurrentOpenFileFilter());		}		if (jcpPanel.getLastOpenedFile() != null) {			chooser.setSelectedFile(jcpPanel.getLastOpenedFile());		}		if (currentFilter != null) {			chooser.setFileFilter(currentFilter);		}		chooser.setFileView(new JCPFileView());		int returnVal = chooser.showOpenDialog(jcpPanel);		String type = null;		IChemObjectReader cor = null;		currentFilter = chooser.getFileFilter();		if (returnVal == JFileChooser.APPROVE_OPTION) {			jcpPanel.setCurrentWorkDirectory(chooser.getCurrentDirectory());			jcpPanel.setCurrentOpenFileFilter(chooser.getFileFilter());			File inFile = chooser.getSelectedFile();			jcpPanel.setLastOpenedFile(inFile);			/*			 *  Have the ReaderFactory determine the file format			 */			try {				cor = jcpPanel.getChemObjectReader(new FileReader(inFile));			} catch (IOException ioExc) {				logger.warn("IOException while determining file format.");				logger.debug(ioExc);			} catch (Exception exc) {				logger.warn("Exception while determining file format.");				logger.debug(exc);			}			if (cor == null) {				// try to determine from user's guess				try {					FileInputStream reader = new FileInputStream(inFile);					javax.swing.filechooser.FileFilter ff = chooser.getFileFilter();					if (ff instanceof JCPFileFilter) {						type = ((JCPFileFilter) ff).getType();					}					else {						type = "unknown";					}					if (type.equals(JCPFileFilter.cml) || type.equals(JCPFileFilter.xml)) {						cor = new CMLReader(reader);					}					else if (type.equals(JCPFileFilter.sdf)) {						cor = new MDLV2000Reader(reader);					}					else if (type.equals(JCPFileFilter.mol)) {						cor = new MDLV2000Reader(reader);					}					else if (type.equals(JCPFileFilter.inchi)) {						cor = new INChIReader(reader);					}				} catch (FileNotFoundException exception) {					logger.warn("File cannot be found.");					logger.debug(exception);				}			}			if (cor == null) {				JOptionPane.showMessageDialog(jcpPanel, "Could not determine file format.");				return;			}			//this takes care of files called .mol, but having several, sdf-stylish entried			if(cor instanceof MDLV2000Reader){				try{					FileInputStream reader = new FileInputStream(inFile);					DataInputStream in = new DataInputStream(reader);	                while (in.available() !=0)					{	                	if(in.readLine().equals("$$$$")){	                		JOptionPane.showMessageDialog(jcpPanel, "It seems you opened a mol or sdf file containing several molecules. Only the first one will be shown","sdf-like file", JOptionPane.INFORMATION_MESSAGE);	                		break;	                	}					}				}catch(IOException ex){					//we do nothing - firstly if IO does not work, we should not get here, secondly, if only this does not work, don't worry				}			}						String error = null;			ChemModel chemModel = null;			IChemFile chemFile=null;			if (cor.accepts(IChemFile.class)) {				// try to read a ChemFile				try {					chemFile = (IChemFile) cor.read((IChemObject) new org.openscience.cdk.ChemFile());					if (chemFile != null) {																		jcpPanel.processChemFile(chemFile);						if(jcpPanel.getJChemPaintModel().getControllerModel().getAutoUpdateImplicitHydrogens()){							HydrogenAdder hydrogenAdder = new HydrogenAdder("org.openscience.cdk.tools.ValencyChecker");				        	java.util.Iterator mols = chemFile.getChemSequence(0).getChemModel(0).getMoleculeSet().molecules();							while (mols.hasNext())							{								org.openscience.cdk.interfaces.IMolecule molecule = (IMolecule)mols.next();							    if (molecule != null)								{									try{											hydrogenAdder.addImplicitHydrogensToSatisfyValency(molecule);									}catch(Exception ex){										//do nothing									}								}							}						}						//The following do apply either to the existing or the new frame						jcpPanel.lastUsedJCPP.getJChemPaintModel().setTitle(inFile.getName());						jcpPanel.lastUsedJCPP.setIsAlreadyAFile(inFile);						if (jcpPanel.isEmbedded() == false) {							((JFrame)							jcpPanel.lastUsedJCPP.getParent().getParent().getParent().getParent()).setTitle(inFile.getName());						}						return;					}					else {						logger.warn("The object chemFile was empty unexpectedly!");					}				} catch (Exception exception) {					error = "Error while reading file: " + exception.getMessage();					exception.printStackTrace();					logger.warn(error);					logger.debug(exception);				}			}			if (error != null) {				JOptionPane.showMessageDialog(jcpPanel, error);				return;			}			if (cor.accepts(ChemModel.class)) {				// try to read a ChemModel				try {					chemModel = (ChemModel) cor.read((IChemObject) new ChemModel());					if (chemModel != null) {						jcpPanel.processChemModel(chemModel);						if(jcpPanel.getJChemPaintModel().getControllerModel().getAutoUpdateImplicitHydrogens()){							HydrogenAdder hydrogenAdder = new HydrogenAdder("org.openscience.cdk.tools.ValencyChecker");				        	java.util.Iterator mols = chemModel.getMoleculeSet().molecules();							while (mols.hasNext())							{								IMolecule molecule = (IMolecule)mols.next();							    if (molecule != null)								{									try{											hydrogenAdder.addImplicitHydrogensToSatisfyValency(molecule);									}catch(Exception ex){										//do nothing									}								}							}						}						//The following do apply either to the existing or the new frame						jcpPanel.lastUsedJCPP.getJChemPaintModel().setTitle(inFile.getName());						jcpPanel.lastUsedJCPP.setIsAlreadyAFile(inFile);						((JFrame) jcpPanel.lastUsedJCPP.getParent().getParent().getParent().getParent()).setTitle(inFile.getName());						return;					}					else {						logger.warn("The object chemModel was empty unexpectedly!");					}					error = null;					// overwrite previous problems, it worked now				} catch (Exception exception) {					error = "Error while reading file: " + exception.getMessage();					exception.printStackTrace();					logger.error(error);					logger.debug(exception);				}			}			if (error != null) {				JOptionPane.showMessageDialog(jcpPanel, error);			}		}	}}

⌨️ 快捷键说明

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