/******************************************************************************* * Copyright (c) 2008 The Bioclipse Project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Stefan Kuhn * ******************************************************************************/ package net.bioclipse.nmrshiftdb.wizards; import java.net.URL; import java.util.Vector; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import net.bioclipse.cdk.business.Activator; import net.bioclipse.cdk.domain.ICDKMolecule; import net.bioclipse.core.business.BioclipseException; import net.bioclipse.core.domain.IMolecule; import net.bioclipse.core.util.LogUtils; import net.bioclipse.jobs.BioclipseUIJob; import net.bioclipse.nmrshiftdb.util.NmrshiftdbUtils; import net.bioclipse.specmol.domain.JumboSpecmol; import net.bioclipse.spectrum.editor.SpectrumEditor; import nu.xom.converters.DOMConverter; import org.apache.axis.client.Call; import org.apache.axis.client.Service; import org.apache.axis.message.SOAPBodyElement; import org.apache.axis.utils.Options; import org.apache.axis.utils.XMLUtils; import org.apache.log4j.Logger; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.MessageBox; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.openscience.cdk.interfaces.IAtomContainer; import org.openscience.cdk.libio.cml.Convertor; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.xmlcml.cml.base.CMLBuilder; import org.xmlcml.cml.base.CMLElement; import org.xmlcml.cml.element.CMLCml; import org.xmlcml.cml.element.CMLMolecule; /** * This is a sample new wizard. Its role is to create a new file * resource in the provided container. If the container resource * (a folder or a project) is selected in the workspace * when the wizard is opened, it will accept it as the target * container. The wizard creates one file with the extension * "cml". If a sample multi-page editor (also available * as a template) is registered for the same extension, it will * be able to open it. */ public class DownloadSpectraWizard extends Wizard{ protected DownloadSpectraServerWizardPage serverPage; private IWorkbenchPart view=null; private IAtomContainer ac; private static final Logger logger = Logger.getLogger(DownloadSpectraServerWizardPage.class); /** * Constructor for JCPWizard. */ public DownloadSpectraWizard(IWorkbenchPart view) { super(); setNeedsProgressMonitor(true); this.view=view; ISelection sel=PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection(); if (sel.isEmpty()==false){ if (sel instanceof IStructuredSelection) { IStructuredSelection ssel = (IStructuredSelection) sel; try { IFile cdkres = (IFile)ssel.getFirstElement(); Activator.getDefault().getJavaCDKManager().loadMolecule( cdkres, new BioclipseUIJob<ICDKMolecule>() { @Override public void runInUI() { ac=getReturnValue().getAtomContainer(); } }); } catch (Exception e) { throw new RuntimeException(e.getMessage()); } } } } /** * Adding the page to the wizard. */ public void addPages() { serverPage = new DownloadSpectraServerWizardPage(); addPage(serverPage); } /** * This method is called when 'Finish' button is pressed in * the wizard. We will create an operation and run it * using wizard as execution context. */ public boolean performFinish() { try{ Options opts = new Options(new String[0]); opts.setDefaultURL(serverPage.getSelectedServer()+"/services/NMRShiftDB"); Service service = new Service(); Call call = (Call) service.createCall(); call.setOperationName("doSearch"); call.setTargetEndpointAddress( new URL(opts.getURL()) ); DocumentBuilder builder; builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); SOAPBodyElement[] input = new SOAPBodyElement[1]; Document doc = builder.newDocument(); Element cdataElem; cdataElem = doc.createElementNS("http://www.nmrshiftdb.org/ws/NMRShiftDB/", "doSearch"); Element reqElem; reqElem = doc.createElementNS("http://www.nmrshiftdb.org/ws/NMRShiftDB/", "searchstring"); /*DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuilder(); Node node = db.parse(new ByteArrayInputStream(new Convertor(true,"").cdkAtomContainerToCMLMolecule(ac).toXML().getBytes()));*/ Node node=DOMConverter.convert(new nu.xom.Document(new Convertor(true,"").cdkAtomContainerToCMLMolecule(ac)),builder.getDOMImplementation()).getFirstChild(); reqElem.appendChild(doc.importNode(node,true)); Element reqElem2; reqElem2 = doc.createElementNS("http://www.nmrshiftdb.org/ws/NMRShiftDB/", "searchtype"); Node node2; node2 = doc.createTextNode("--"); reqElem2.appendChild(node2); Element reqElem3; reqElem3 = doc.createElementNS("http://www.nmrshiftdb.org/ws/NMRShiftDB/", "searchfield"); Node node3; node3 = doc.createTextNode(NmrshiftdbUtils.replaceSpaces(serverPage.selectedOption())); reqElem3.appendChild(node3); cdataElem.appendChild(reqElem); cdataElem.appendChild(reqElem2); cdataElem.appendChild(reqElem3); input[0] = new SOAPBodyElement(cdataElem); Vector elems = (Vector) call.invoke( input ); SOAPBodyElement elem = (SOAPBodyElement) elems.get(0); Element e = elem.getAsDOM(); CMLBuilder cmlbuilder = new CMLBuilder(); CMLElement cmlElement = (CMLElement) cmlbuilder.parseString(XMLUtils.ElementToString(e)); if(cmlElement.getChildCount()>0){ IFolder folder=NmrshiftdbUtils.createVirtualFolder(); for(int i=0;i<cmlElement.getChildCount();i++){ net.bioclipse.specmol.Activator.getDefault().getJavaSpecmolManager().saveSpecmol(new JumboSpecmol((CMLCml)cmlElement.getChildCMLElements().get(i)),folder.getFile(((CMLMolecule)cmlElement.getChildCMLElements().get(i).getChildCMLElement("molecule",0)).getId() + "." + SpectrumEditor.CML_TYPE)); } }else{ MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "No results", "No spectra in NMRShiftDB for this structure!" ); } }catch(Exception ex){ LogUtils.handleException(ex,logger); } return true; } public IWorkbenchPart getView() { return view; } }