net.bioclipse.balloon.handlers.BalloonGen3DHandler.java Source code

Java tutorial

Introduction

Here is the source code for net.bioclipse.balloon.handlers.BalloonGen3DHandler.java

Source

/* *****************************************************************************
 * Copyright (c) 2009 Ola Spjuth.
 * 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:
 *     Ola Spjuth - initial API and implementation
 ******************************************************************************/
package net.bioclipse.balloon.handlers;

import java.util.ArrayList;
import java.util.List;

import net.bioclipse.balloon.business.Activator;
import net.bioclipse.balloon.business.IBalloonManager;
import net.bioclipse.cdk.business.ICDKManager;
import net.bioclipse.cdk.domain.ICDKMolecule;
import net.bioclipse.core.business.BioclipseException;
import net.bioclipse.core.util.LogUtils;
import net.bioclipse.jobs.BioclipseUIJob;

import org.apache.log4j.Logger;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.content.IContentDescription;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.handlers.HandlerUtil;

/**
 * Our sample handler extends AbstractHandler, an IHandler base class.
 * @see org.eclipse.core.commands.IHandler
 * @see org.eclipse.core.commands.AbstractHandler
 */
public class BalloonGen3DHandler extends AbstractHandler {

    private static final Logger logger = Logger.getLogger(BalloonGen3DHandler.class);

    /**
     * The constructor.
     */
    public BalloonGen3DHandler() {
    }

    /**
     * the command has been executed, so extract extract the needed information
     * from the application context.
     */
    public Object execute(ExecutionEvent event) throws ExecutionException {

        ISelection sel = HandlerUtil.getCurrentSelection(event);
        if (sel == null)
            return null;
        if (!(sel instanceof StructuredSelection))
            return null;
        IStructuredSelection ssel = (IStructuredSelection) sel;

        //We operate on files and IMolecules
        List<IFile> inputFiles = new ArrayList<IFile>();
        List<IResource> foldersToRefresh = new ArrayList<IResource>();
        //Collect files
        for (Object obj : ssel.toList()) {
            if (obj instanceof IFile) {
                IFile file = (IFile) obj;
                //                filenames.add( file.getRawLocation().toOSString() );
                inputFiles.add(file);
                foldersToRefresh.add(file.getParent());
            }
        }

        logger.debug("Balloon selection contained: " + inputFiles.size() + " files.");

        if (inputFiles.size() <= 0)
            return null;

        final List<String> final_fnames = null;
        final List<IResource> final_foldersToRefresh = foldersToRefresh;

        IContentType cmlType = Platform.getContentTypeManager()
                .getContentType("net.bioclipse.contenttypes.cml.singleMolecule2d");

        IBalloonManager balloon = Activator.getDefault().getJavaBalloonManager();
        for (IFile input : inputFiles) {
            try {
                IContentDescription contentDescirpton = input.getContentDescription();
                if (contentDescirpton != null && contentDescirpton.getContentType().isKindOf(cmlType)) {
                    String output = balloon.generate3Dcoordinates(input.getRawLocation().toOSString());
                    Display.getDefault().syncExec(new Runnable() {
                        public void run() {
                            for (IResource res : final_foldersToRefresh) {
                                try {
                                    res.refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor());
                                } catch (CoreException e) {
                                    logger.error("Could not refresh resource: " + res + " - " + e.getMessage());
                                }
                            }

                        }
                    });
                    ICDKManager cdk = net.bioclipse.cdk.business.Activator.getDefault().getJavaCDKManager();
                    List<ICDKMolecule> molecules = cdk.loadMolecules(output);
                    cdk.saveMolecule(molecules.get(0), output, true);

                    return null;
                }
            } catch (Exception e) {
                LogUtils.handleException(e, logger, "net.bioclipse.balloon.business");
                return null;
            }

            balloon.generate3Dcoordinates(input, new BioclipseUIJob<IFile>() {

                @Override
                public void runInUI() {

                    try {
                        IFile result = this.getReturnValue();
                        result.getParent().refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor());
                    } catch (CoreException e) {
                        LogUtils.handleException(e, logger, "net.bioclipse.balloon.business");
                    }
                }
            });
        }
        //Set up a job
        Job job = new Job("Ballon 3D conformer generation") {
            protected IStatus run(IProgressMonitor monitor) {

                monitor.beginTask("Running Balloon 3D conformer generation", 2);
                monitor.worked(1);

                //Run balloon on the files
                IBalloonManager balloon = Activator.getDefault().getJavaBalloonManager();
                List<String> ret = null;
                try {
                    ret = balloon.generate3Dcoordinates(final_fnames);
                } catch (BioclipseException e) {
                    logger.error("Balloon failed: " + e.getMessage());
                    return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Balloon failed: " + e.getMessage());
                }

                if (ret == null) {
                    logger.error("Balloon failed: " + ret);
                    return new Status(IStatus.ERROR, Activator.PLUGIN_ID, "Balloon failed.");
                }
                for (String r : ret) {
                    logger.debug("Balloon wrote output file: " + r);
                }

                //Refresh folders in UI thread
                Display.getDefault().syncExec(new Runnable() {
                    public void run() {
                        for (IResource res : final_foldersToRefresh) {
                            try {
                                res.refreshLocal(IResource.DEPTH_ONE, new NullProgressMonitor());
                            } catch (CoreException e) {
                                logger.error("Could not refresh resource: " + res + " - " + e.getMessage());
                            }
                        }

                    }
                });

                monitor.done();

                return Status.OK_STATUS;
            }
        };
        // job.setPriority(Job.LONG);
        // job.setUser( true );
        // job.schedule(); // start as soon as possible

        //Bring forth the ProgressView

        /*
        //Collect and serialize smiles to temp file, 
        String smilesfile="";
        String linesep=System.getProperty("line.separator");
        if (linesep==null) linesep="\n";
            
        for (Object obj : ssel.toList()){
        if ( obj instanceof IMolecule ) {
            IMolecule mol = (IMolecule) obj;
            String smilestext;
            try {
                smilestext = mol.getSMILES();
                smilesfile=smilesfile+smilestext+ linesep;
            } catch ( BioclipseException e ) {
                logger.debug("Could not get smiles from Imol: " + mol 
                             + ". Skipped in balloon: " + e.getMessage());
            }
        }
        }
            
            
            
        try {
        File tfile = File.createTempFile( "balloontemp", "smi" );
        FileWriter writer= new FileWriter(tfile);
        writer.write( smilesfile );
        writer.close();
            
        //Run balloon on this file
            
        } catch ( IOException e ) {
        e.printStackTrace();
        }
         */

        return null;

    }
}