From: <mar...@us...> - 2010-04-07 14:04:26
|
Revision: 15503 http://cdk.svn.sourceforge.net/cdk/?rev=15503&view=rev Author: mark_rynbeek Date: 2010-04-07 14:04:20 +0000 (Wed, 07 Apr 2010) Log Message: ----------- Fixed some tests. Updated getMol/setMol and copy paste to work with RG file format Modified Paths: -------------- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java jchempaint/trunk/src/main/org/openscience/jchempaint/controller/AddBondDragModule.java jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletBugsTest.java jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletMenuTest.java Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2010-04-07 11:58:46 UTC (rev 15502) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/action/CopyPasteAction.java 2010-04-07 14:04:20 UTC (rev 15503) @@ -35,7 +35,7 @@ import java.awt.datatransfer.UnsupportedFlavorException; import java.awt.event.ActionEvent; import java.io.ByteArrayInputStream; -import java.io.StringBufferInputStream; +import java.io.IOException; import java.io.StringReader; import java.io.StringWriter; import java.io.Writer; @@ -45,6 +45,7 @@ import javax.vecmath.Point2d; import org.openscience.cdk.ChemFile; +import org.openscience.cdk.ChemModel; import org.openscience.cdk.DefaultChemObjectBuilder; import org.openscience.cdk.Molecule; import org.openscience.cdk.exception.CDKException; @@ -64,7 +65,10 @@ import org.openscience.cdk.io.ISimpleChemObjectReader; import org.openscience.cdk.io.MDLReader; import org.openscience.cdk.io.MDLWriter; +import org.openscience.cdk.io.RGroupQueryReader; import org.openscience.cdk.io.ReaderFactory; +import org.openscience.cdk.isomorphism.matchers.IRGroupQuery; +import org.openscience.cdk.isomorphism.matchers.RGroupQuery; import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.cdk.layout.TemplateHandler; import org.openscience.cdk.smiles.SmilesGenerator; @@ -90,11 +94,10 @@ import org.openscience.jchempaint.renderer.selection.RectangleSelection; import org.openscience.jchempaint.renderer.selection.ShapeSelection; import org.openscience.jchempaint.renderer.selection.SingleSelection; +import org.openscience.jchempaint.rgroups.RGroupHandler; /** * Action to copy/paste structures. - * - * @cdk.bug 1288449 */ public class CopyPasteAction extends JCPAction{ @@ -182,7 +185,6 @@ sysClip.setContents(new SmilesSelection(CreateSmilesAction.getSmiles(chemModel)),null); } } catch (Exception e1) { - // TODO Auto-generated catch block e1.printStackTrace(); } } else if ("eraser".equals(type)) { @@ -235,21 +237,33 @@ String content=null; if (supported(transfer, molFlavor) ) { - try { - StringBufferInputStream sbis = (StringBufferInputStream) transfer.getTransferData(molFlavor); - int x; - StringBuffer sb = new StringBuffer(); + StringBuffer sb = new StringBuffer(); + try { + //StringBufferInputStream sbis=null; + //sbis = (StringBufferInputStream) transfer.getTransferData(molFlavor); + + StringReader sbis=null; + sbis = (StringReader) transfer.getTransferData(molFlavor); + + + int x; while((x=sbis.read())!=-1){ sb.append((char)x); } reader = new MDLReader(new StringReader(sb.toString())); - } catch (Exception e1) { - e1.printStackTrace(); + } catch (UnsupportedFlavorException e1) { + e1.printStackTrace(); + } catch (IOException e1) { + e1.printStackTrace(); + } catch (Exception e1) { + reader = new RGroupQueryReader(new StringReader(sb.toString())); } + } else if (supported(transfer, DataFlavor.stringFlavor) ) { try { content = (String) transfer.getTransferData(DataFlavor.stringFlavor); reader = new ReaderFactory().createReader(new StringReader(content)); + System.out.println(reader.getClass()); } catch (Exception e1) { e1.printStackTrace(); } @@ -261,6 +275,7 @@ } IMolecule toPaste = null; + boolean rgrpQuery=false; if (reader != null) { IMolecule readMolecule = chemModel.getBuilder().newMolecule(); @@ -275,14 +290,24 @@ toPaste.add(ac); } - } + } else if (reader.accepts(RGroupQuery.class)) { + rgrpQuery=true; + IRGroupQuery rgroupQuery = (RGroupQuery) reader.read(new RGroupQuery()); + chemModel = new ChemModel(); + RGroupHandler rgHandler = new RGroupHandler(rgroupQuery); + this.jcpPanel.get2DHub().setRGroupHandler(rgHandler); + chemModel.setMoleculeSet(rgHandler.getMoleculeSet(chemModel)); + rgHandler.layoutRgroup(); + + } + } catch (CDKException e1) { e1.printStackTrace(); } } //Attempt SMILES or InChI if no reader is found for content. - if (toPaste == null && + if(rgrpQuery!=true && toPaste == null && supported(transfer, DataFlavor.stringFlavor)) { try{ if (content.toLowerCase().indexOf("inchi")>-1 ) { @@ -316,16 +341,22 @@ ex.printStackTrace(); } } - if (toPaste != null) { + + if (toPaste != null || rgrpQuery==true) { jcpPanel.getRenderPanel().setZoomWide(true); jcpPanel.get2DHub().getRenderer().getRenderer2DModel().setZoomFactor(1); - - scaleStructure(toPaste); - insertStructure(toPaste, renderModel); - - }else{ + if ( rgrpQuery==true) { + this.jcpPanel.setChemModel(chemModel); + } + else { + scaleStructure(toPaste); + insertStructure(toPaste, renderModel); + } + } + else{ JOptionPane.showMessageDialog(jcpPanel, GT._("The content you tried to copy could not be read to any known format"), GT._("Could not process content"), JOptionPane.WARNING_MESSAGE); } + } else if (type.equals("cut")) { handleSystemClipboard(sysClip); IAtom atomInRange = null; @@ -373,9 +404,11 @@ MoveModule newActiveModule = new MoveModule(hub, succusorModule); newActiveModule.setID("move"); hub.setActiveDrawModule(newActiveModule); + } else if (type.equals("selectFromChemObject")) { - // FIXME: implement for others than Reaction, Atom, Bond - IChemObject object = getSource(e); + + // FIXME: implement for others than Reaction, Atom, Bond + IChemObject object = getSource(e); if (object instanceof IAtom) { SingleSelection<IAtom> container = new SingleSelection<IAtom>((IAtom)object); renderModel.setSelection(container); @@ -585,15 +618,15 @@ public synchronized Object getTransferData (DataFlavor parFlavor) throws UnsupportedFlavorException { if (parFlavor.equals (molFlavor)) { - return new StringBufferInputStream(mol); + return new StringReader(mol); } else if (parFlavor.equals (smilesFlavor)) { - return new StringBufferInputStream(smiles); + return new StringReader(smiles); } else if(parFlavor.equals(DataFlavor.stringFlavor)) { return mol; } else if(parFlavor.equals(cmlFlavor)) { - return new StringBufferInputStream(cml); + return new StringReader(cml); } else if(parFlavor.equals(svgFlavor)) { - return new StringBufferInputStream(svg); + return new StringReader(svg); } else { throw new UnsupportedFlavorException (parFlavor); } Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2010-04-07 11:58:46 UTC (rev 15502) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/applet/JChemPaintAbstractApplet.java 2010-04-07 14:04:20 UTC (rev 15503) @@ -37,6 +37,7 @@ import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.IOException; +import java.io.InputStream; import java.io.StringReader; import java.io.StringWriter; import java.net.URL; @@ -62,7 +63,10 @@ import org.openscience.cdk.io.ISimpleChemObjectReader; import org.openscience.cdk.io.MDLV2000Reader; import org.openscience.cdk.io.MDLWriter; +import org.openscience.cdk.io.RGroupQueryReader; +import org.openscience.cdk.io.RGroupQueryWriter; import org.openscience.cdk.io.IChemObjectReader.Mode; +import org.openscience.cdk.isomorphism.matchers.RGroupQuery; import org.openscience.cdk.layout.StructureDiagramGenerator; import org.openscience.cdk.layout.TemplateHandler; import org.openscience.cdk.smiles.SmilesParser; @@ -355,21 +359,29 @@ } /** - * Gives a mol file of the current molecules in the editor (not reactions) + * Gives a mol file of the current molecules in the editor (not reactions). + * RGroup queries are also saved as .mol files by convention. * * @return The mol file * @throws CDKException */ public String getMolFile() throws CDKException { + StringWriter sw = new StringWriter(); - MDLWriter mdlwriter = new MDLWriter(sw); - // mdlwriter.dontWriteAromatic(); - org.openscience.cdk.interfaces.IChemModel som = theJcpp - .getChemModel(); - mdlwriter.write(som); + org.openscience.cdk.interfaces.IChemModel som = theJcpp.getChemModel(); + + if (theJcpp.get2DHub().getRGroupHandler()!=null) { + RGroupQueryWriter rgw = new RGroupQueryWriter (sw); + rgw.write(theJcpp.get2DHub().getRGroupHandler().getrGroupQuery()); + } + else { + MDLWriter mdlwriter = new MDLWriter(sw); + mdlwriter.write(som); + } return (sw.toString()); } + /** * Gives a smiles of the current editor content * @@ -461,18 +473,29 @@ * @throws Exception */ public void setMolFile(String mol) throws CDKException { - - ISimpleChemObjectReader cor = new MDLV2000Reader(new StringReader(mol), Mode.RELAXED); //TODO assess R-group? - IChemModel chemModel = JChemPaint.getChemModelFromReader(cor, theJcpp); - JChemPaint.cleanUpChemModel(chemModel,true); - theJcpp.setChemModel(chemModel); + + ISimpleChemObjectReader cor=null; + IChemModel chemModel = null; + + if (mol.contains("$RGP")) { + cor= new RGroupQueryReader(new StringReader(mol)); + chemModel=JChemPaint.getChemModelFromReader(cor, theJcpp); + } + else { + cor= new MDLV2000Reader(new StringReader(mol), Mode.RELAXED); + chemModel=JChemPaint.getChemModelFromReader(cor, theJcpp); + JChemPaint.cleanUpChemModel(chemModel,true); + } + + theJcpp.setChemModel(chemModel); theJcpp.get2DHub().updateView(); + // the newly opened file should nicely fit the screen theJcpp.getRenderPanel().setFitToScreen(true); - theJcpp.getRenderPanel().update( - theJcpp.getRenderPanel().getGraphics()); - // enable zooming by removing constraint + theJcpp.getRenderPanel().update(theJcpp.getRenderPanel().getGraphics()); + // ..enable zooming by removing constraint again theJcpp.getRenderPanel().setFitToScreen(false); + } /** Modified: jchempaint/trunk/src/main/org/openscience/jchempaint/controller/AddBondDragModule.java =================================================================== --- jchempaint/trunk/src/main/org/openscience/jchempaint/controller/AddBondDragModule.java 2010-04-07 11:58:46 UTC (rev 15502) +++ jchempaint/trunk/src/main/org/openscience/jchempaint/controller/AddBondDragModule.java 2010-04-07 14:04:20 UTC (rev 15503) @@ -196,7 +196,6 @@ @Override public void mouseClickedUp( Point2d worldCoord ) { - System.out.println("mouseClickedUp addbonddragmod"); chemModelRelay.clearPhantoms(); if(isBond) return; Modified: jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletBugsTest.java =================================================================== --- jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletBugsTest.java 2010-04-07 11:58:46 UTC (rev 15502) +++ jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletBugsTest.java 2010-04-07 14:04:20 UTC (rev 15503) @@ -30,6 +30,8 @@ public class JCPEditorAppletBugsTest extends AbstractAppletTest { + private static int SAVE_AS_MOL_COMBOBOX_POS=6; + @Test public void testSquareSelectSingleAtom() { JPanelFixture jcppanel = applet.panel("appletframe"); @@ -433,7 +435,7 @@ Assert.assertEquals(12, panel.getChemModel().getMoleculeSet().getAtomContainer(0).getAtomCount() ); } - + @Test public void testBug70() throws FileNotFoundException, CDKException{ JPanelFixture jcppanel=applet.panel("appletframe"); JChemPaintPanel panel = (JChemPaintPanel)jcppanel.target; @@ -441,7 +443,7 @@ applet.click(); Point2d point = getAtomPoint(panel,0); applet.panel("renderpanel").robot.click(applet.panel("renderpanel").component(), new Point((int)point.x, (int)point.y), MouseButton.RIGHT_BUTTON,1); - applet.menuItem("showACProperties2").click(); + applet.menuItem("showACProperties").click(); DialogFixture dialog = applet.dialog(); JTextComponent textfield = dialog.robot.finder().find(JTextComponentMatcher.withName("Title")); textfield.setText("aaa"); @@ -450,7 +452,7 @@ applet.menuItem("save").click(); dialog = applet.dialog(); JComboBox combobox = dialog.robot.finder().find(new ComboBoxTextComponentMatcher("org.openscience.jchempaint.io.JCPFileFilter")); - combobox.setSelectedItem(combobox.getItemAt(5)); + combobox.setSelectedItem(combobox.getItemAt(SAVE_AS_MOL_COMBOBOX_POS)); JTextComponentFixture text = dialog.textBox(); File file=new File(System.getProperty("java.io.tmpdir")+File.separator+"test.mol"); if(file.exists()) @@ -472,7 +474,7 @@ applet.menuItem("saveAs").click(); DialogFixture dialog = applet.dialog(); JComboBox combobox = dialog.robot.finder().find(new ComboBoxTextComponentMatcher("org.openscience.jchempaint.io.JCPFileFilter")); - combobox.setSelectedItem(combobox.getItemAt(5)); + combobox.setSelectedItem(combobox.getItemAt(SAVE_AS_MOL_COMBOBOX_POS)); JTextComponentFixture text = dialog.textBox(); File file=new File(System.getProperty("java.io.tmpdir")+File.separator+"test1.mol"); if(file.exists()) @@ -488,13 +490,13 @@ applet.menuItem("new").click(); applet.button("hexagon").click(); applet.click(); - applet.button("bond").click(); + applet.button("bondTool").click(); Point2d moveto=getAtomPoint(panel,0); applet.panel("renderpanel").robot.click(applet.panel("renderpanel").component(), new Point((int)moveto.x,(int)moveto.y), MouseButton.LEFT_BUTTON,1); applet.menuItem("saveAs").click(); dialog = applet.dialog(); combobox = dialog.robot.finder().find(new ComboBoxTextComponentMatcher("org.openscience.jchempaint.io.JCPFileFilter")); - combobox.setSelectedItem(combobox.getItemAt(5)); + combobox.setSelectedItem(combobox.getItemAt(SAVE_AS_MOL_COMBOBOX_POS)); text = dialog.textBox(); file=new File(System.getProperty("java.io.tmpdir")+File.separator+"test2.mol"); if(file.exists()) @@ -520,7 +522,7 @@ applet.menuItem("saveAs").click(); dialog = applet.dialog(); combobox = dialog.robot.finder().find(new ComboBoxTextComponentMatcher("org.openscience.jchempaint.io.JCPFileFilter")); - combobox.setSelectedItem(combobox.getItemAt(5)); + combobox.setSelectedItem(combobox.getItemAt(SAVE_AS_MOL_COMBOBOX_POS)); text = dialog.textBox(); text.setText(file.toString()); okbutton = new JButtonFixture(dialog.robot, dialog.robot.finder().find(new ButtonTextComponentMatcher("Save"))); @@ -556,8 +558,14 @@ applet.panel("renderpanel").robot.click(applet.panel("renderpanel").component(), new Point((int)point.x, (int)point.y), MouseButton.LEFT_BUTTON,1); point = getBondPoint(panel,2); applet.panel("renderpanel").robot.click(applet.panel("renderpanel").component(), new Point((int)point.x, (int)point.y), MouseButton.LEFT_BUTTON,1); - Assert.assertEquals(6, panel.getChemModel().getMoleculeSet().getMolecule(0).getAtomCount()); - Assert.assertEquals(4, panel.getChemModel().getMoleculeSet().getMolecule(0).getBondCount()); + + int atomCount=0, bondCount=0; + for(IAtomContainer atc : panel.getChemModel().getMoleculeSet().atomContainers()) { + atomCount+=atc.getAtomCount(); + bondCount+=atc.getBondCount(); + } + Assert.assertEquals(6, atomCount); + Assert.assertEquals(4, bondCount); restoreModelToEmpty(); } Modified: jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletMenuTest.java =================================================================== --- jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletMenuTest.java 2010-04-07 11:58:46 UTC (rev 15502) +++ jchempaint/trunk/src/test/org/openscience/jchempaint/JCPEditorAppletMenuTest.java 2010-04-07 14:04:20 UTC (rev 15503) @@ -547,20 +547,10 @@ Assert.assertEquals(1,panel.getChemModel().getMoleculeSet().getAtomContainer(1).getAtomCount()); Point2d moveto=panel.getRenderPanel().getRenderer().toScreenCoordinates(panel.getChemModel().getMoleculeSet().getAtomContainer(0).getAtom(4).getPoint2d().x,panel.getChemModel().getMoleculeSet().getAtomContainer(0).getAtom(4).getPoint2d().y); JPopupMenuFixture popup = applet.panel("renderpanel").showPopupMenuAt(new Point((int)moveto.x,(int)moveto.y)); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - popup.menuItem("cut2").click(); + //try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} + popup.menuItem("cut").click(); Assert.assertEquals(3,panel.getChemModel().getMoleculeSet().getAtomContainerCount()); - try { - Thread.sleep(5000); - } catch (InterruptedException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } + //try {Thread.sleep(5000);} catch (InterruptedException e) {e.printStackTrace();} Assert.assertEquals(1,panel.getChemModel().getMoleculeSet().getAtomContainer(0).getAtomCount()); Assert.assertEquals(4,panel.getChemModel().getMoleculeSet().getAtomContainer(1).getAtomCount()); Assert.assertEquals(2,panel.getChemModel().getMoleculeSet().getAtomContainer(2).getAtomCount()); @@ -576,22 +566,6 @@ Assert.assertEquals(22,panel.getChemModel().getMoleculeSet().getAtomContainer(1).getAtomCount()); } - @Test public void testMenuTemplatesAlkaloids() throws CDKException, ClassNotFoundException, IOException, CloneNotSupportedException { - restoreModelWithBasicmol(); - applet.menuItem("alkaloids").click(); - DialogFixture dialog = applet.dialog("templates"); - JButtonFixture morphinebutton = new JButtonFixture(dialog.robot, dialog.robot.finder().find(new ButtonTextComponentMatcher("Morphine"))); - morphinebutton.click(); - Assert.assertEquals(2,panel.getChemModel().getMoleculeSet().getAtomContainerCount()); - Assert.assertEquals(22,panel.getChemModel().getMoleculeSet().getAtomContainer(1).getAtomCount()); - applet.menuItem("alkaloids").click(); - dialog = applet.dialog("templates"); - morphinebutton = new JButtonFixture(dialog.robot, dialog.robot.finder().find(new ButtonTextComponentMatcher("Morphine"))); - morphinebutton.click(); - Assert.assertEquals(3,panel.getChemModel().getMoleculeSet().getAtomContainerCount()); - Assert.assertEquals(22,panel.getChemModel().getMoleculeSet().getAtomContainer(2).getAtomCount()); - } - @Test public void testSwitchLanguage(){ applet.menuItem("options").click(); DialogFixture dialog = applet.dialog(); @@ -600,22 +574,29 @@ JComboBox combobox = (JComboBox)dialog.robot.finder().find(new NameMatcher("language")); for(int i=0;i<combobox.getItemCount();i++){ if(((String)combobox.getItemAt(i)).equals("German")){ - combobox.setSelectedItem(combobox.getItemAt(i)); + combobox.setSelectedIndex(i); break; } } JButtonFixture applybutton = new JButtonFixture(dialog.robot, (JButton)dialog.robot.finder().find(new NameMatcher("apply",true))); applybutton.click(); Assert.assertEquals("Neu", applet.menuItem("new").component().getText()); + for(int i=0;i<combobox.getItemCount();i++){ if(((String)combobox.getItemAt(i)).equals("American English")){ - combobox.setSelectedItem(combobox.getItemAt(i)); + combobox.setSelectedIndex(i); + System.out.println("set USA"); break; } } - JButtonFixture okbutton = new JButtonFixture(dialog.robot, (JButton)dialog.robot.finder().find(new NameMatcher("ok",true))); + + JButtonFixture okbutton = new JButtonFixture(dialog.robot, (JButton)dialog.robot.finder().find(new NameMatcher("apply",true))); okbutton.click(); + Assert.assertFalse(dialog.component().isShowing()); - Assert.assertEquals("New", applet.menuItem("new").component().getText()); + Assert.assertEquals("New", applet.menuItem("new").component().getText()); // fails in test only? } + + + } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |