merge-update from trunk
[taxeditor.git] / eu.etaxonomy.taxeditor.store / src / main / java / eu / etaxonomy / taxeditor / view / datasource / CdmDataSourceViewPart.java
index 3cbafb3844980b5d28ff30c1c4e23ffcb66d0208..34afe6bb9e57404ac6dd27f3337460ebbef0e809 100644 (file)
@@ -1,61 +1,62 @@
 // $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>
@@ -65,9 +66,9 @@ import eu.etaxonomy.taxeditor.store.StoreUtil;
  * @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)
@@ -75,7 +76,7 @@ public class CdmDataSourceViewPart extends ViewPart{
                @Override
                public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
                        monitor.subTask("Refreshing Datasource View");
-                       viewer.refresh();       
+                       viewer.refresh();
                }
 
                /* (non-Javadoc)
@@ -84,7 +85,7 @@ public class CdmDataSourceViewPart extends ViewPart{
                @Override
                public void contextStop(IMemento memento, IProgressMonitor monitor) {
                        monitor.subTask("Refreshing Datasource View");
-                       viewer.refresh();       
+                       viewer.refresh();
                }
 
                /* (non-Javadoc)
@@ -96,10 +97,10 @@ public class CdmDataSourceViewPart extends ViewPart{
                        viewer.refresh();
                }
        }
-       
+
        private class DataSourceJob extends Job{
 
-               private List<ICdmSource> cdmSources;
+               private final List<ICdmSource> cdmSources;
 
                /**
                 * @param name
@@ -116,142 +117,218 @@ public class CdmDataSourceViewPart extends ViewPart{
                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();
@@ -272,13 +349,13 @@ public class CdmDataSourceViewPart extends ViewPart{
                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);
        }
 
@@ -292,10 +369,10 @@ public class CdmDataSourceViewPart extends ViewPart{
        /** {@inheritDoc} */
        @Override
        public void setFocus() {
-               viewer.getControl().setFocus();
+//             viewer.getControl().setFocus();
        }
 
-       
+
        /* (non-Javadoc)
         * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
         */
@@ -331,7 +408,7 @@ public class CdmDataSourceViewPart extends ViewPart{
        public IWorkbenchSiteProgressService getService() {
                return service;
        }
-       
+
        private SelectionAdapter getSelectionAdapter(final TableColumn column,
                        final int index) {
                SelectionAdapter selectionAdapter = new SelectionAdapter() {