From: <tho...@us...> - 2006-11-07 12:19:19
|
Revision: 7266 http://svn.sourceforge.net/cdk/?rev=7266&view=rev Author: thomaskuhn Date: 2006-11-07 04:19:05 -0800 (Tue, 07 Nov 2006) Log Message: ----------- Add a structure diagramm generator as local worker Added Paths: ----------- trunk/cdk-taverna/src/org/openscience/cdk/applications/taverna/structgen/StructureDiagramGenerator.java Added: trunk/cdk-taverna/src/org/openscience/cdk/applications/taverna/structgen/StructureDiagramGenerator.java =================================================================== --- trunk/cdk-taverna/src/org/openscience/cdk/applications/taverna/structgen/StructureDiagramGenerator.java (rev 0) +++ trunk/cdk-taverna/src/org/openscience/cdk/applications/taverna/structgen/StructureDiagramGenerator.java 2006-11-07 12:19:05 UTC (rev 7266) @@ -0,0 +1,125 @@ +/* $RCSfile$ + * $Author: thomaskuhn $ + * $Date: 2006-01-20 08:21:14 +0100 (Fr, 20 Jan 2006) $ + * $Revision: 5602 $ + * + * Copyright (C) 2006 by Thomas Kuhn <tho...@us...> + * + * 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.taverna.structgen; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; + +import org.embl.ebi.escience.baclava.DataThing; +import org.openscience.cdk.applications.taverna.CMLChemFile; +import org.openscience.cdk.applications.taverna.LocalWorkerCDK; +import org.openscience.cdk.applications.taverna.basicutilities.CMLChemFileWrapper; +import org.openscience.cdk.applications.taverna.basicutilities.FileNameGenerator; +import org.openscience.cdk.interfaces.IAtomContainer; +import org.openscience.cdk.interfaces.IMolecule; +import org.openscience.cdk.tools.manipulator.ChemFileManipulator; + +import uk.ac.soton.itinnovation.taverna.enactor.entities.TaskExecutionException; + +/** + * This class provides a local worker for the cdk-taverna project. + * This local worker creates a structured diagram for a given list of molecules in form of CMLChemfiles + * @author Thomas Kuhn + * + */ +public class StructureDiagramGenerator implements LocalWorkerCDK { + private String[] inputNames = new String[] { "inputStructures" }; + private String[] outputNames = new String[] { "resultStructures", "ErrorStructures", "Comment" }; + + // Region: input and outpout definition + + public String[] inputNames() { + return inputNames; + } + public String[] inputTypes() { + return new String[] {LocalWorkerCDK.CMLChemFileList}; + } + + public String[] outputNames() { + return outputNames; + } + public String[] outputTypes() { + return new String[] {LocalWorkerCDK.CMLChemFileList, LocalWorkerCDK.CMLChemFileList, + LocalWorkerCDK.STRING_ARRAY}; + } + + // End of region + + // Region: local worker execution + + public Map execute(Map inputs) throws TaskExecutionException { + FileNameGenerator fileNameGenerator = new FileNameGenerator(); + List<CMLChemFile> inputList = null; + List<CMLChemFile> resultList = new ArrayList<CMLChemFile>(); + List<CMLChemFile> errorResultList = new ArrayList<CMLChemFile>(); + List comment = new ArrayList(); + org.openscience.cdk.layout.StructureDiagramGenerator str; + String fileNameResultStructures = "StructureDiagramGenerator"; + String fileNameErrorStructures = "StructureDiagramGenerator_ErrorStructures"; + CMLChemFile resultFile = null; + if (inputs.get(inputNames[0]) != null) { + inputList = (List<CMLChemFile>) ((DataThing) (inputs.get(inputNames[0]))).getDataObject(); + } else { + // FIXME Do not return null!! Could be a problem! + return null; + } + try { + for (Iterator iter = inputList.iterator(); iter.hasNext();) { + CMLChemFile file = (CMLChemFile) iter.next(); + List<IAtomContainer> moleculeList = ChemFileManipulator.getAllAtomContainers(file); + for (Iterator iterator = moleculeList.iterator(); iterator.hasNext();) { + IAtomContainer molecule = (IAtomContainer)iterator.next(); + try { + // Tries to create the structured diagram, if it fails it will put the failed molecule into the errorResultList + str = new org.openscience.cdk.layout.StructureDiagramGenerator(); + str.setMolecule((IMolecule)molecule); + str.generateCoordinates(); + resultFile = CMLChemFileWrapper.wrapAtomContainerInChemModel(str.getMolecule()); + resultFile.setProperty(fileNameGenerator.FILENAME, fileNameGenerator.addFileNameToFileNameList(fileNameResultStructures, (List<String>)file.getProperty(FileNameGenerator.FILENAME))); + resultList.add(resultFile); + } catch (Exception e) { + resultFile = CMLChemFileWrapper.wrapAtomContainerInChemModel(molecule); + resultFile.setProperty(fileNameGenerator.FILENAME, fileNameGenerator.addFileNameToFileNameList(fileNameErrorStructures, (List<String>)file.getProperty(FileNameGenerator.FILENAME))); + errorResultList.add(resultFile); + comment.add("An error occured during the creation of the structured diagram" + e); + } + } + } + } catch (Exception exception) { + throw new TaskExecutionException(exception); + } + Map outputs = new HashMap(); + outputs.put(outputNames[0], new DataThing(resultList)); + outputs.put(outputNames[1], new DataThing(errorResultList)); + outputs.put(outputNames[2], new DataThing(comment)); + + return outputs; + } + // End of region +} This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |