Java tutorial
/******************************************************************************* * Copyright (c) 2010 Stefan Kuhn <stefan.kuhn@ebi.ac.uk> * * 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 * www.eclipse.orgepl-v10.html <http://www.eclipse.org/legal/epl-v10.html> * * Contact: http://www.bioclipse.net/ ******************************************************************************/ package net.bioclipse.seneca.actions; import java.io.File; import java.util.Iterator; import net.bioclipse.cdk.domain.ICDKMolecule; import net.bioclipse.core.business.BioclipseException; import net.bioclipse.core.util.LogUtils; import net.bioclipse.seneca.domain.SenecaJobSpecification; import net.bioclipse.seneca.judge.IJudge; import net.bioclipse.seneca.judge.JudgeResult; import net.bioclipse.seneca.judge.MissingInformationException; import net.bioclipse.spectrum.Activator; import net.bioclipse.ui.contentlabelproviders.FolderLabelProvider; 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.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; /** * A handler for evaluatiing a molecule against the judges in a sjs. * */ public class EvaluateHandler extends AbstractHandler { private static final Logger logger = Logger.getLogger(EvaluateHandler.class); protected IStructuredSelection selectedFiles; /* (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ public Object execute(ExecutionEvent event) throws ExecutionException { ISelection sel = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getSelectionService().getSelection(); if (!sel.isEmpty()) { if (sel instanceof IStructuredSelection) { try { final IStructuredSelection ssel = (IStructuredSelection) sel; final Shell dialog = new Shell(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); dialog.setText("Choose Seneca Job Specification"); GridLayout layout = new GridLayout(); dialog.setLayout(layout); dialog.setMinimumSize(300, 400); layout.numColumns = 2; layout.verticalSpacing = 9; TreeViewer treeViewer = new TreeViewer(dialog); treeViewer.setContentProvider(new SjsFileContentProvider()); treeViewer.setLabelProvider(new DecoratingLabelProvider(new FolderLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator())); treeViewer.setUseHashlookup(true); // Layout the tree viewer below the text field GridData layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; layoutData.horizontalAlignment = GridData.FILL; layoutData.verticalAlignment = GridData.FILL; layoutData.horizontalSpan = 3; final Button ok = new Button(dialog, SWT.PUSH); treeViewer.getControl().setLayoutData(layoutData); treeViewer.setInput(ResourcesPlugin.getWorkspace().getRoot().findMember(".")); treeViewer.expandToLevel(2); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection sel = event.getSelection(); if (sel instanceof IStructuredSelection) { selectedFiles = (IStructuredSelection) sel; try { if (selectedFiles.size() == 1 && selectedFiles.getFirstElement() instanceof IFile && ((IFile) selectedFiles.getFirstElement()).getName() .indexOf(".sjs") > -1) ok.setEnabled(true); } catch (Exception e) { LogUtils.handleException(e, logger, Activator.PLUGIN_ID); } } } }); treeViewer.setSelection( new StructuredSelection(ResourcesPlugin.getWorkspace().getRoot().findMember("."))); ok.setText("OK"); ok.setEnabled(false); Button cancel = new Button(dialog, SWT.PUSH); cancel.setText("Cancel"); Listener listener = new Listener() { public void handleEvent(Event event) { if (event.widget == ok) { try { ICDKMolecule mol = net.bioclipse.cdk.business.Activator.getDefault() .getJavaCDKManager().loadMolecule((IFile) ssel.getFirstElement()); mol = (ICDKMolecule) net.bioclipse.cdk.business.Activator.getDefault() .getJavaCDKManager().removeExplicitHydrogens(mol); mol = (ICDKMolecule) net.bioclipse.cdk.business.Activator.getDefault() .getJavaCDKManager().addImplicitHydrogens(mol); SenecaJobSpecification sjs = null; sjs = net.bioclipse.seneca.Activator.getDefault().getJavaSenecaManager() .getJobSpecification(((IFile) selectedFiles.getFirstElement())); JudgeResult result = net.bioclipse.seneca.Activator.getDefault() .getJavaSenecaManager().evaluateStructure(sjs, mol); MessageDialog.openInformation(dialog, "Scoring Result", "Overall: " + (result.score / result.maxScore) + " (" + result.score + "/" + result.maxScore + ").\r\n" + result.scoreDescription); } catch (Exception e) { LogUtils.handleException(e, logger, net.bioclipse.seneca.Activator.PLUGIN_ID); } } dialog.close(); } }; ok.addListener(SWT.Selection, listener); cancel.addListener(SWT.Selection, listener); dialog.pack(); dialog.open(); } catch (Exception ex) { LogUtils.handleException(ex, logger, Activator.PLUGIN_ID); } } } return null; } }