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

📄 validateframe.java

📁 化学图形处理软件
💻 JAVA
字号:
/* $RCSfile$ * $Author: egonw $ * $Date: 2007-01-04 18:26:00 +0100 (Thu, 04 Jan 2007) $ * $Revision: 7634 $ * * Copyright (C) 2003-2007  The JChemPaint project * * Contact: jchempaint-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. * 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.dialogs;import java.awt.BorderLayout;import java.awt.Color;import java.awt.Dimension;import java.awt.event.ActionEvent;import java.util.Enumeration;import javax.swing.AbstractAction;import javax.swing.JButton;import javax.swing.JFrame;import javax.swing.JPanel;import javax.swing.JScrollPane;import javax.swing.JTabbedPane;import javax.swing.JTextArea;import javax.swing.JTree;import javax.swing.event.TreeSelectionEvent;import javax.swing.event.TreeSelectionListener;import javax.swing.tree.DefaultMutableTreeNode;import javax.swing.tree.TreeSelectionModel;import org.openscience.cdk.Atom;import org.openscience.cdk.Bond;import org.openscience.cdk.ChemModel;import org.openscience.cdk.interfaces.IChemObject;import org.openscience.cdk.Reaction;import org.openscience.cdk.applications.jchempaint.JChemPaintEditorPanel;import org.openscience.cdk.applications.jchempaint.JChemPaintPanel;import org.openscience.cdk.applications.swing.FieldTablePanel;import org.openscience.cdk.renderer.Renderer2DModel;import org.openscience.cdk.validate.ProblemMarker;import org.openscience.cdk.validate.ValidationReport;import org.openscience.cdk.validate.ValidationTest;/** * Frame to allows editing of dictionary references of  * ChemObjects. * * @cdk.module jchempaint */public class ValidateFrame extends JFrame  {    	private static final long serialVersionUID = -8073655554072154298L;		private Renderer2DModel rendererModel;    private JPanel errorTreePanel;    private JPanel warningTreePanel;    private JPanel cdkErrorTreePanel;    private JTextArea detailText;        public ValidateFrame(JChemPaintPanel jcpp) {        super("Validation Results");           rendererModel = jcpp.getJChemPaintModel().getRendererModel();        getContentPane().setLayout(new BorderLayout());                JPanel southPanel = new JPanel();        JButton okButton = new JButton("OK");        okButton.addActionListener(new OKAction());        southPanel.add(okButton);                FieldTablePanel detailPanel = new FieldTablePanel();        detailText = new JTextArea(2,40);        detailText.setBackground(Color.white);        detailText.setWrapStyleWord(true);        detailText.setText("");        detailPanel.addArea("Details", detailText);        detailPanel.validate();        // set up three tabs, one with statistics, one with errors and         // one with warnings (stats omitted for now)        JTabbedPane tabbedPane = new JTabbedPane();        errorTreePanel = new JPanel();        addJTree(new JTree(new DefaultMutableTreeNode("not validated")), errorTreePanel);        warningTreePanel = new JPanel();        addJTree(new JTree(new DefaultMutableTreeNode("not validated")), warningTreePanel);        cdkErrorTreePanel = new JPanel();        addJTree(new JTree(new DefaultMutableTreeNode("not validated")), cdkErrorTreePanel);        tabbedPane.add("Errors", errorTreePanel);        tabbedPane.add("Warnings", warningTreePanel);        tabbedPane.add("CDK Errors", cdkErrorTreePanel);                getContentPane().add(tabbedPane, BorderLayout.NORTH);        getContentPane().add(detailPanel, BorderLayout.CENTER);        getContentPane().add(southPanel, BorderLayout.SOUTH);        validate();    }        private void addJTree(JTree tree, JPanel treePanel) {        tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);        // Listen for when the selection changes.        final JTree copiedFinal = tree;        tree.addTreeSelectionListener(new TreeSelectionListener() {            public void valueChanged(TreeSelectionEvent e) {                DefaultMutableTreeNode node = (DefaultMutableTreeNode)copiedFinal.getLastSelectedPathComponent();                                if (node == null) return;                                Object nodeInfo = node.getUserObject();                if (node.isLeaf() && (nodeInfo instanceof ValidatorErrorNode)) {                    ValidatorErrorNode errorNode = (ValidatorErrorNode)nodeInfo;                    detailText.setText(errorNode.getValidationTest().getDetails());                    if (errorNode instanceof AtomErrorNode) {                        Atom atom = ((AtomErrorNode)errorNode).getAtom();                        // highlight atom in JCPFrame                        rendererModel.setHighlightedAtom(atom);                    } else if (errorNode instanceof BondErrorNode) {                        Bond bond = ((BondErrorNode)errorNode).getBond();                        rendererModel.setHighlightedBond(bond);                    }                }            }        });        treePanel.removeAll();        tree.validate();        JScrollPane scrollPane = new JScrollPane(tree);        scrollPane.setPreferredSize(new Dimension(400, 350));        treePanel.add(scrollPane);    }    public void validate(IChemObject object) {        ValidationReport report  = null;        // logger.debug("Validating class: " + object.getClass().getName());        if (object instanceof ChemModel) {            report = JChemPaintEditorPanel.getValidatorEngine().validateChemModel((ChemModel)object);        } else if (object instanceof Atom) {            report = JChemPaintEditorPanel.getValidatorEngine().validateAtom((Atom)object);        } else if (object instanceof org.openscience.cdk.interfaces.IBond) {            report = JChemPaintEditorPanel.getValidatorEngine().validateBond((Bond)object);        } else if (object instanceof Reaction) {            report = JChemPaintEditorPanel.getValidatorEngine().validateReaction((Reaction)object);        } else {            System.err.println("Cannot validate this object: " + object.getClass().getName());            return;        }        // logger.debug("#errors: " + report.getErrorCount());        // logger.debug("#warnings: " + report.getWarningCount());        // logger.debug("#cdk errors: " + report.getCDKErrorCount());        // logger.debug("#oks: " + report.getOKCount());        DefaultMutableTreeNode errorsNode = new DefaultMutableTreeNode("errors");        putErrorsInJTree(errorsNode, report);        addJTree(new JTree(errorsNode), errorTreePanel);        DefaultMutableTreeNode warningsNode = new DefaultMutableTreeNode("warnings");        putWarningsInJTree(warningsNode, report);        addJTree(new JTree(warningsNode), warningTreePanel);        DefaultMutableTreeNode cdkErrorsNode = new DefaultMutableTreeNode("errors");        putCDKErrorsInJTree(cdkErrorsNode, report);        addJTree(new JTree(cdkErrorsNode), cdkErrorTreePanel);    }        private void putErrorsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) {        // put errors in the tree        Enumeration errorsEnum = report.getErrors().elements();        putTestsInJTree(rootNode, errorsEnum);    }        private void putWarningsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) {        // put errors in the tree        Enumeration errorsEnum = report.getWarnings().elements();        putTestsInJTree(rootNode, errorsEnum);    }        private void putCDKErrorsInJTree(DefaultMutableTreeNode rootNode, ValidationReport report) {        // put CDK errors in the tree        Enumeration cdkErrorsEnum = report.getCDKErrors().elements();        putTestsInJTree(rootNode, cdkErrorsEnum);    }        private void putTestsInJTree(DefaultMutableTreeNode rootNode, Enumeration errors) {        // put errors in the tree        while (errors.hasMoreElements()) {            ValidationTest error = (ValidationTest)errors.nextElement();            DefaultMutableTreeNode node = new DefaultMutableTreeNode();            IChemObject object = error.getChemObject();            if (object instanceof Atom) {                node.setUserObject(new AtomErrorNode(error, (Atom)object));                ProblemMarker.markWithError((Atom)object);            } else if (object instanceof org.openscience.cdk.interfaces.IBond) {                node.setUserObject(new BondErrorNode(error, (Bond)object));            } else {                node.setUserObject(new ValidatorErrorNode(error));            }            rootNode.add(node);        }    }    public void closeFrame() {        dispose();    }        class OKAction extends AbstractAction {    			private static final long serialVersionUID = 8801638051737287899L;		OKAction() {            super("OK");        }                public void actionPerformed(ActionEvent event) {            closeFrame();        }    }        class ValidatorErrorNode {                ValidationTest test;                ValidatorErrorNode(ValidationTest test) {            this.test = test;        }                public String toString() {            return test.getError();        }                ValidationTest getValidationTest() {            return this.test;        }    }    class AtomErrorNode extends ValidatorErrorNode {                Atom atom;                AtomErrorNode(ValidationTest test, Atom atom) {            super(test);            this.atom = atom;        }                Atom getAtom() {            return this.atom;        }    }    class BondErrorNode extends ValidatorErrorNode {                Bond bond;                BondErrorNode(ValidationTest test, Bond bond) {            super(test);            this.bond = bond;        }                Bond getBond() {            return this.bond;        }    }}

⌨️ 快捷键说明

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