// $Id$
/**
* Copyright (C) 2007 EDIT
--* European Distributed Institute of Taxonomy
++* European Distributed Institute of Taxonomy
* http://www.e-taxonomy.eu
--*
++*
* The contents of this file are subject to the Mozilla Public License Version 1.1
* See LICENSE.TXT at the top of this package for the full license terms.
*/
package eu.etaxonomy.taxeditor.view.datasource;
++import info.bioinfweb.commons.bio.biojava3.alignment.SimpleAlignment;
++import info.bioinfweb.commons.bio.biojava3.alignment.template.Alignment;
++import info.bioinfweb.commons.bio.biojava3.core.sequence.compound.AlignmentAmbiguityNucleotideCompoundSet;
++import info.bioinfweb.libralign.AlignmentArea;
++import info.bioinfweb.libralign.dataarea.implementations.ConsensusSequenceArea;
++import info.bioinfweb.libralign.pherogram.BioJavaPherogramProvider;
++import info.bioinfweb.libralign.pherogram.PherogramFormats.QualityOutputType;
++import info.bioinfweb.libralign.pherogram.PherogramHeadingView;
++import info.bioinfweb.libralign.pherogram.PherogramTraceCurveView;
++import info.bioinfweb.libralign.sequenceprovider.implementations.BioJavaSequenceDataProvider;
++import info.bioinfweb.libralign.sequenceprovider.tokenset.BioJavaTokenSet;
++
++import java.io.File;
++import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import org.apache.log4j.Logger;
--import org.eclipse.core.commands.Command;
--import org.eclipse.core.commands.ExecutionException;
--import org.eclipse.core.commands.NotEnabledException;
--import org.eclipse.core.commands.NotHandledException;
--import org.eclipse.core.commands.common.NotDefinedException;
++import org.biojava.bio.chromatogram.ChromatogramFactory;
++import org.biojava.bio.chromatogram.UnsupportedChromatogramFormatException;
++import org.biojava3.core.sequence.DNASequence;
++import org.biojava3.core.sequence.compound.NucleotideCompound;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.core.runtime.jobs.Job;
--import org.eclipse.jface.action.GroupMarker;
--import org.eclipse.jface.action.MenuManager;
--import org.eclipse.jface.viewers.DoubleClickEvent;
--import org.eclipse.jface.viewers.IDoubleClickListener;
--import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.jface.viewers.TableViewerColumn;
import org.eclipse.swt.SWT;
++import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.widgets.Composite;
--import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Display;
--import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.Table;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.ui.IMemento;
--import org.eclipse.ui.IWorkbenchActionConstants;
--import org.eclipse.ui.commands.ICommandService;
--import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.progress.IWorkbenchSiteProgressService;
--import org.springframework.security.core.GrantedAuthority;
import eu.etaxonomy.cdm.config.ICdmSource;
--import eu.etaxonomy.cdm.database.ICdmDataSource;
import eu.etaxonomy.taxeditor.datasource.CdmDataSourceRepository;
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
import eu.etaxonomy.taxeditor.model.IContextListener;
import eu.etaxonomy.taxeditor.store.CdmStore;
--import eu.etaxonomy.taxeditor.store.StoreUtil;
/**
* <p>CdmDataSourceViewPart class.</p>
* @version 1.0
*/
public class CdmDataSourceViewPart extends ViewPart{
--
++
private static final Logger logger = Logger.getLogger(CdmDataSourceViewPart.class);
--
++
private class ContextListener extends ContextListenerAdapter{
/* (non-Javadoc)
* @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
@Override
public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
monitor.subTask("Refreshing Datasource View");
-- viewer.refresh();
++ viewer.refresh();
}
/* (non-Javadoc)
@Override
public void contextStop(IMemento memento, IProgressMonitor monitor) {
monitor.subTask("Refreshing Datasource View");
-- viewer.refresh();
++ viewer.refresh();
}
/* (non-Javadoc)
viewer.refresh();
}
}
--
++
private class DataSourceJob extends Job{
-- private List<ICdmSource> cdmSources;
++ private final List<ICdmSource> cdmSources;
/**
* @param name
public IStatus run(final IProgressMonitor monitor) {
try{
logger.debug("Begin of eclipse core runtime Job to Retrieve datasources");
-- monitor.beginTask("Retrieving datasources", cdmSources.size() + 1);
--
++ monitor.beginTask("Retrieving datasources", cdmSources.size() + 1);
++
final List<CdmMetaDataAwareDataSourceContainer> containers = new ArrayList<CdmMetaDataAwareDataSourceContainer>();
--
++
for(ICdmSource cdmSource : cdmSources){
containers.add(new CdmMetaDataAwareDataSourceContainer(cdmSource));
}
--
++
Display.getDefault().asyncExec(new Runnable() {
--
++
@Override
public void run() {
viewer.setInput(containers);
}
});
monitor.worked(1);
--
++
for(final CdmMetaDataAwareDataSourceContainer container : containers){
--
--
-- if(logger.isDebugEnabled()) logger.debug(" #" + container.hashCode() + " : next DataSourceContainer");
++
++
++ if(logger.isDebugEnabled()) {
++ logger.debug(" #" + container.hashCode() + " : next DataSourceContainer");
++ }
container.getMetaDataFromDataSource();
-- if(logger.isDebugEnabled()) logger.debug(" #" + container.hashCode() + " : metadata retrieved, creating new runnable ...");
++ if(logger.isDebugEnabled()) {
++ logger.debug(" #" + container.hashCode() + " : metadata retrieved, creating new runnable ...");
++ }
Display.getDefault().asyncExec(new Runnable() {
--
++
@Override
public void run() {
-- if(logger.isDebugEnabled()) logger.debug(" #" + container.hashCode() + " starting sub thread to update ...");
++ if(logger.isDebugEnabled()) {
++ logger.debug(" #" + container.hashCode() + " starting sub thread to update ...");
++ }
viewer.update(container, null);
-- if(logger.isDebugEnabled()) logger.debug(" #" + container.hashCode() + " end of sub thread to update ...");
++ if(logger.isDebugEnabled()) {
++ logger.debug(" #" + container.hashCode() + " end of sub thread to update ...");
++ }
}
});
-- if(logger.isDebugEnabled()) logger.debug(" #" + container.hashCode() + " done");
++ if(logger.isDebugEnabled()) {
++ logger.debug(" #" + container.hashCode() + " done");
++ }
monitor.worked(1);
}
--
++
}finally{
monitor.done();
}
return Status.OK_STATUS;
}
}
--
++
/** Constant <code>ID="eu.etaxonomy.taxeditor.store.datasource"{trunked}</code> */
public static String ID = "eu.etaxonomy.taxeditor.view.datasource";
--
++
private TableViewer viewer;
private String partNameCache;
private IWorkbenchSiteProgressService service;
--
++
private IContextListener contextListener;
private CdmDataSourceViewerComparator comparator;
--
++
/**
* <p>Constructor for CdmDataSourceViewPart.</p>
*/
public CdmDataSourceViewPart(){
}
--
++
++ private void librAlignInit(Composite parent){
++ ScrolledComposite scrolledComposite = new ScrolledComposite(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
++ scrolledComposite.setExpandHorizontal(true);
++ scrolledComposite.setExpandVertical(true);
++
++ Alignment<DNASequence, NucleotideCompound> alignment =
++ new SimpleAlignment<DNASequence, NucleotideCompound>();
++ alignment.add("Sequence 1", new DNASequence("ATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAG"));
++ alignment.add("Sequence 2", new DNASequence("AT-GTTG"));
++ alignment.add("Sequence 3", new DNASequence("AT-GTAG"));
++
++ BioJavaSequenceDataProvider<DNASequence, NucleotideCompound> sequenceProvider =
++ new BioJavaSequenceDataProvider<DNASequence, NucleotideCompound>(
++ new BioJavaTokenSet<NucleotideCompound>(
++ AlignmentAmbiguityNucleotideCompoundSet.getAlignmentAmbiguityNucleotideCompoundSet()),
++ alignment);
++
++ AlignmentArea result = new AlignmentArea();
++ result.setSequenceProvider(sequenceProvider, false);
++ result.getDataAreas().getBottomAreas().add(new ConsensusSequenceArea(result));
++
++// Composite alignmentWidget = result.createSWTWidget(scrolledComposite, SWT.NONE);
++// scrolledComposite.setContent(alignmentWidget);
++// scrolledComposite.setMinSize(alignmentWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
++
++ //+++ConsensusSequenceArea
++ ConsensusSequenceArea consensusSequenceArea = new ConsensusSequenceArea(result);
++ Composite consensusWidget = consensusSequenceArea.createSWTWidget(scrolledComposite, SWT.NONE);
++ scrolledComposite.setContent(consensusWidget);
++
++
++ //+++PherogramTraceCurveView+++
++ PherogramTraceCurveView pherogramView = new PherogramTraceCurveView();
++ // pherogramView.setProvider(new BioJavaPherogramProvider(ChromatogramFactory.create(
++ // new File("data\\pherograms\\Test_pel1PCR_Pel2Wdhg_PCR-7-A_1.ab1"))));
++ try {
++ pherogramView.setProvider(new BioJavaPherogramProvider(ChromatogramFactory.create(
++ new File("/home/pplitzner/svn/branch/taxeditor-3.4/eu.etaxonomy.taxeditor.store/lib/jfreechart-1.0.17/lib/A10001_GM106-petD_F.scf"))));
++ } catch (UnsupportedChromatogramFormatException e) {
++ // TODO Auto-generated catch block
++ e.printStackTrace();
++ } catch (IOException e) {
++ // TODO Auto-generated catch block
++ e.printStackTrace();
++ }
++ pherogramView.setHorizontalScale(1);
++ pherogramView.setVerticalScale(100);
++ pherogramView.getFormats().setQualityOutputType(QualityOutputType.ALL);
++ pherogramView.getFormats().setShowProbabilityValues(true);
++
++// Composite pherogramWidget = pherogramView.createSWTWidget(scrolledComposite, SWT.NONE);
++// scrolledComposite.setContent(pherogramWidget);
++// scrolledComposite.setMinSize(pherogramWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
++
++ //+++Pherogramm Heading View+++
++ PherogramHeadingView pherogramHeadingView = new PherogramHeadingView(pherogramView);
++// Composite pherogramHeadingWidget = pherogramHeadingView.createSWTWidget(scrolledComposite, SWT.NONE);
++// scrolledComposite.setContent(pherogramHeadingWidget);
++// scrolledComposite.setMinSize(pherogramHeadingWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
++
++ }
++
/** {@inheritDoc} */
@Override
public void createPartControl(Composite parent) {
service = (IWorkbenchSiteProgressService) getSite().getAdapter(IWorkbenchSiteProgressService.class);
contextListener = new ContextListener();
CdmStore.getContextManager().addContextListener(contextListener);
--
++
// Create top composite
FillLayout fillLayout = new FillLayout();
fillLayout.marginWidth = 0;
fillLayout.marginHeight = 0;
-- fillLayout.type = SWT.VERTICAL;
++ fillLayout.type = SWT.VERTICAL;
parent.setLayout(fillLayout);
--
-- viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
-- | SWT.V_SCROLL | SWT.FULL_SELECTION);
-- getSite().setSelectionProvider(viewer);
--
-- createColumns(viewer);
--
-- viewer.setContentProvider(new CdmDataSourceContentProvider());
-- viewer.setLabelProvider(new CdmDataSourceLabelProvider());
-- comparator = new CdmDataSourceViewerComparator();
-- viewer.setComparator(comparator);
--
--
-- // register context menu
-- MenuManager menuMgr = new MenuManager();
-- menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
-- getSite().registerContextMenu(menuMgr, viewer);
--
-- Control control = viewer.getControl();
-- Menu menu = menuMgr.createContextMenu(control);
-- control.setMenu(menu);
--
-- // connect on doubleclick
-- viewer.addDoubleClickListener(new IDoubleClickListener() {
--
-- public void doubleClick(DoubleClickEvent event) {
-- if (event.getSelection() instanceof StructuredSelection) {
--
-- Object element = ((StructuredSelection) event
-- .getSelection()).getFirstElement();
-- if (element instanceof CdmMetaDataAwareDataSourceContainer) {
-- String commandId = "eu.etaxonomy.taxeditor.store.datasource.change";
--
-- ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);
--
-- Command command = commandService.getCommand(commandId);
-- if(command.isEnabled()) {
--
-- IHandlerService handlerService = (IHandlerService) StoreUtil.getService(IHandlerService.class);
--
-- try {
-- handlerService.executeCommand(commandId, null);
-- } catch (ExecutionException e) {
-- StoreUtil.error(this.getClass(), e);
-- } catch (NotDefinedException e) {
-- StoreUtil.error(this.getClass(), e);
-- } catch (NotEnabledException e) {
-- StoreUtil.error(this.getClass(), e);
-- } catch (NotHandledException e) {
-- StoreUtil.error(this.getClass(), e);
-- }
-- }
-- }
-- }
-- }
-- });
--
-- refresh();
++
++ librAlignInit(parent);
++
++
++// viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
++// | SWT.V_SCROLL | SWT.FULL_SELECTION);
++// getSite().setSelectionProvider(viewer);
++//
++// createColumns(viewer);
++//
++// viewer.setContentProvider(new CdmDataSourceContentProvider());
++// viewer.setLabelProvider(new CdmDataSourceLabelProvider());
++// comparator = new CdmDataSourceViewerComparator();
++// viewer.setComparator(comparator);
++//
++//
++// // register context menu
++// MenuManager menuMgr = new MenuManager();
++// menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
++// getSite().registerContextMenu(menuMgr, viewer);
++//
++// Control control = viewer.getControl();
++// Menu menu = menuMgr.createContextMenu(control);
++// control.setMenu(menu);
++//
++// // connect on doubleclick
++// viewer.addDoubleClickListener(new IDoubleClickListener() {
++//
++// @Override
++// public void doubleClick(DoubleClickEvent event) {
++// if (event.getSelection() instanceof StructuredSelection) {
++//
++// Object element = ((StructuredSelection) event
++// .getSelection()).getFirstElement();
++// if (element instanceof CdmMetaDataAwareDataSourceContainer) {
++// String commandId = "eu.etaxonomy.taxeditor.store.datasource.change";
++//
++// ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);
++//
++// Command command = commandService.getCommand(commandId);
++// if(command.isEnabled()) {
++//
++// IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
++//
++// try {
++// handlerService.executeCommand(commandId, null);
++// } catch (ExecutionException e) {
++// AbstractUtility.error(this.getClass(), e);
++// } catch (NotDefinedException e) {
++// AbstractUtility.error(this.getClass(), e);
++// } catch (NotEnabledException e) {
++// AbstractUtility.error(this.getClass(), e);
++// } catch (NotHandledException e) {
++// AbstractUtility.error(this.getClass(), e);
++// }
++// }
++// }
++// }
++// }
++// });
++//
++// refresh();
}
--
++
// This will create the columns for the table
private void createColumns(TableViewer viewer) {
Table table = viewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
table.setSortDirection(SWT.UP);
--
++
}
--
++
/**
* <p>refresh</p>
*/
-- public void refresh(){
++ public void refresh(){
getService().schedule(new DataSourceJob("Loading datasources", CdmDataSourceRepository.getAll()), Job.LONG);
}
/** {@inheritDoc} */
@Override
public void setFocus() {
-- viewer.getControl().setFocus();
++// viewer.getControl().setFocus();
}
--
++
/* (non-Javadoc)
* @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
*/
public IWorkbenchSiteProgressService getService() {
return service;
}
--
++
private SelectionAdapter getSelectionAdapter(final TableColumn column,
final int index) {
SelectionAdapter selectionAdapter = new SelectionAdapter() {