3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
7 * The contents of this file are subject to the Mozilla Public License Version 1.1
8 * See LICENSE.TXT at the top of this package for the full license terms.
11 package eu
.etaxonomy
.taxeditor
.view
.datasource
;
13 import info
.bioinfweb
.commons
.bio
.biojava3
.alignment
.SimpleAlignment
;
14 import info
.bioinfweb
.commons
.bio
.biojava3
.alignment
.template
.Alignment
;
15 import info
.bioinfweb
.commons
.bio
.biojava3
.core
.sequence
.compound
.AlignmentAmbiguityNucleotideCompoundSet
;
16 import info
.bioinfweb
.libralign
.AlignmentArea
;
17 import info
.bioinfweb
.libralign
.dataarea
.implementations
.ConsensusSequenceArea
;
18 import info
.bioinfweb
.libralign
.pherogram
.BioJavaPherogramProvider
;
19 import info
.bioinfweb
.libralign
.pherogram
.PherogramFormats
.QualityOutputType
;
20 import info
.bioinfweb
.libralign
.pherogram
.PherogramHeadingView
;
21 import info
.bioinfweb
.libralign
.pherogram
.PherogramTraceCurveView
;
22 import info
.bioinfweb
.libralign
.sequenceprovider
.implementations
.BioJavaSequenceDataProvider
;
23 import info
.bioinfweb
.libralign
.sequenceprovider
.tokenset
.BioJavaTokenSet
;
26 import java
.io
.IOException
;
27 import java
.util
.ArrayList
;
28 import java
.util
.List
;
30 import org
.apache
.log4j
.Logger
;
31 import org
.biojava
.bio
.chromatogram
.ChromatogramFactory
;
32 import org
.biojava
.bio
.chromatogram
.UnsupportedChromatogramFormatException
;
33 import org
.biojava3
.core
.sequence
.DNASequence
;
34 import org
.biojava3
.core
.sequence
.compound
.NucleotideCompound
;
35 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
36 import org
.eclipse
.core
.runtime
.IStatus
;
37 import org
.eclipse
.core
.runtime
.Status
;
38 import org
.eclipse
.core
.runtime
.jobs
.Job
;
39 import org
.eclipse
.jface
.viewers
.StructuredViewer
;
40 import org
.eclipse
.jface
.viewers
.TableViewer
;
41 import org
.eclipse
.jface
.viewers
.TableViewerColumn
;
42 import org
.eclipse
.swt
.SWT
;
43 import org
.eclipse
.swt
.custom
.ScrolledComposite
;
44 import org
.eclipse
.swt
.events
.SelectionAdapter
;
45 import org
.eclipse
.swt
.events
.SelectionEvent
;
46 import org
.eclipse
.swt
.layout
.FillLayout
;
47 import org
.eclipse
.swt
.widgets
.Composite
;
48 import org
.eclipse
.swt
.widgets
.Display
;
49 import org
.eclipse
.swt
.widgets
.Table
;
50 import org
.eclipse
.swt
.widgets
.TableColumn
;
51 import org
.eclipse
.ui
.IMemento
;
52 import org
.eclipse
.ui
.part
.ViewPart
;
53 import org
.eclipse
.ui
.progress
.IWorkbenchSiteProgressService
;
55 import eu
.etaxonomy
.cdm
.config
.ICdmSource
;
56 import eu
.etaxonomy
.taxeditor
.datasource
.CdmDataSourceRepository
;
57 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
58 import eu
.etaxonomy
.taxeditor
.model
.IContextListener
;
59 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
62 * <p>CdmDataSourceViewPart class.</p>
68 public class CdmDataSourceViewPart
extends ViewPart
{
70 private static final Logger logger
= Logger
.getLogger(CdmDataSourceViewPart
.class);
72 private class ContextListener
extends ContextListenerAdapter
{
74 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
77 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
78 monitor
.subTask("Refreshing Datasource View");
83 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
86 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
87 monitor
.subTask("Refreshing Datasource View");
92 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
95 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
96 monitor
.subTask("Refreshing Datasource View");
101 private class DataSourceJob
extends Job
{
103 private final List
<ICdmSource
> cdmSources
;
108 public DataSourceJob(String title
, List
<ICdmSource
> cdmSources
) {
110 this.cdmSources
= cdmSources
;
114 * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor)
117 public IStatus
run(final IProgressMonitor monitor
) {
119 logger
.debug("Begin of eclipse core runtime Job to Retrieve datasources");
120 monitor
.beginTask("Retrieving datasources", cdmSources
.size() + 1);
122 final List
<CdmMetaDataAwareDataSourceContainer
> containers
= new ArrayList
<CdmMetaDataAwareDataSourceContainer
>();
124 for(ICdmSource cdmSource
: cdmSources
){
125 containers
.add(new CdmMetaDataAwareDataSourceContainer(cdmSource
));
128 Display
.getDefault().asyncExec(new Runnable() {
132 viewer
.setInput(containers
);
137 for(final CdmMetaDataAwareDataSourceContainer container
: containers
){
140 if(logger
.isDebugEnabled()) {
141 logger
.debug(" #" + container
.hashCode() + " : next DataSourceContainer");
143 container
.getMetaDataFromDataSource();
144 if(logger
.isDebugEnabled()) {
145 logger
.debug(" #" + container
.hashCode() + " : metadata retrieved, creating new runnable ...");
147 Display
.getDefault().asyncExec(new Runnable() {
151 if(logger
.isDebugEnabled()) {
152 logger
.debug(" #" + container
.hashCode() + " starting sub thread to update ...");
154 viewer
.update(container
, null);
155 if(logger
.isDebugEnabled()) {
156 logger
.debug(" #" + container
.hashCode() + " end of sub thread to update ...");
160 if(logger
.isDebugEnabled()) {
161 logger
.debug(" #" + container
.hashCode() + " done");
169 return Status
.OK_STATUS
;
173 /** Constant <code>ID="eu.etaxonomy.taxeditor.store.datasource"{trunked}</code> */
174 public static String ID
= "eu.etaxonomy.taxeditor.view.datasource";
176 private TableViewer viewer
;
178 private String partNameCache
;
180 private IWorkbenchSiteProgressService service
;
182 private IContextListener contextListener
;
184 private CdmDataSourceViewerComparator comparator
;
187 * <p>Constructor for CdmDataSourceViewPart.</p>
189 public CdmDataSourceViewPart(){
192 private void librAlignInit(Composite parent
){
193 ScrolledComposite scrolledComposite
= new ScrolledComposite(parent
, SWT
.BORDER
| SWT
.H_SCROLL
| SWT
.V_SCROLL
);
194 scrolledComposite
.setExpandHorizontal(true);
195 scrolledComposite
.setExpandVertical(true);
197 Alignment
<DNASequence
, NucleotideCompound
> alignment
=
198 new SimpleAlignment
<DNASequence
, NucleotideCompound
>();
199 alignment
.add("Sequence 1", new DNASequence("ATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAGATCGTAG"));
200 alignment
.add("Sequence 2", new DNASequence("AT-GTTG"));
201 alignment
.add("Sequence 3", new DNASequence("AT-GTAG"));
203 BioJavaSequenceDataProvider
<DNASequence
, NucleotideCompound
> sequenceProvider
=
204 new BioJavaSequenceDataProvider
<DNASequence
, NucleotideCompound
>(
205 new BioJavaTokenSet
<NucleotideCompound
>(
206 AlignmentAmbiguityNucleotideCompoundSet
.getAlignmentAmbiguityNucleotideCompoundSet()),
209 AlignmentArea result
= new AlignmentArea();
210 result
.setSequenceProvider(sequenceProvider
, false);
211 result
.getDataAreas().getBottomAreas().add(new ConsensusSequenceArea(result
));
213 // Composite alignmentWidget = result.createSWTWidget(scrolledComposite, SWT.NONE);
214 // scrolledComposite.setContent(alignmentWidget);
215 // scrolledComposite.setMinSize(alignmentWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
217 //+++ConsensusSequenceArea
218 ConsensusSequenceArea consensusSequenceArea
= new ConsensusSequenceArea(result
);
219 Composite consensusWidget
= consensusSequenceArea
.createSWTWidget(scrolledComposite
, SWT
.NONE
);
220 scrolledComposite
.setContent(consensusWidget
);
223 //+++PherogramTraceCurveView+++
224 PherogramTraceCurveView pherogramView
= new PherogramTraceCurveView();
225 // pherogramView.setProvider(new BioJavaPherogramProvider(ChromatogramFactory.create(
226 // new File("data\\pherograms\\Test_pel1PCR_Pel2Wdhg_PCR-7-A_1.ab1"))));
228 pherogramView
.setProvider(new BioJavaPherogramProvider(ChromatogramFactory
.create(
229 new File("/home/pplitzner/svn/branch/taxeditor-3.4/eu.etaxonomy.taxeditor.store/lib/jfreechart-1.0.17/lib/A10001_GM106-petD_F.scf"))));
230 } catch (UnsupportedChromatogramFormatException e
) {
231 // TODO Auto-generated catch block
233 } catch (IOException e
) {
234 // TODO Auto-generated catch block
237 pherogramView
.setHorizontalScale(1);
238 pherogramView
.setVerticalScale(100);
239 pherogramView
.getFormats().setQualityOutputType(QualityOutputType
.ALL
);
240 pherogramView
.getFormats().setShowProbabilityValues(true);
242 // Composite pherogramWidget = pherogramView.createSWTWidget(scrolledComposite, SWT.NONE);
243 // scrolledComposite.setContent(pherogramWidget);
244 // scrolledComposite.setMinSize(pherogramWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
246 //+++Pherogramm Heading View+++
247 PherogramHeadingView pherogramHeadingView
= new PherogramHeadingView(pherogramView
);
248 // Composite pherogramHeadingWidget = pherogramHeadingView.createSWTWidget(scrolledComposite, SWT.NONE);
249 // scrolledComposite.setContent(pherogramHeadingWidget);
250 // scrolledComposite.setMinSize(pherogramHeadingWidget.computeSize(SWT.DEFAULT, SWT.DEFAULT));
256 public void createPartControl(Composite parent
) {
257 service
= (IWorkbenchSiteProgressService
) getSite().getAdapter(IWorkbenchSiteProgressService
.class);
258 contextListener
= new ContextListener();
259 CdmStore
.getContextManager().addContextListener(contextListener
);
261 // Create top composite
262 FillLayout fillLayout
= new FillLayout();
263 fillLayout
.marginWidth
= 0;
264 fillLayout
.marginHeight
= 0;
265 fillLayout
.type
= SWT
.VERTICAL
;
266 parent
.setLayout(fillLayout
);
268 librAlignInit(parent
);
271 // viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL
272 // | SWT.V_SCROLL | SWT.FULL_SELECTION);
273 // getSite().setSelectionProvider(viewer);
275 // createColumns(viewer);
277 // viewer.setContentProvider(new CdmDataSourceContentProvider());
278 // viewer.setLabelProvider(new CdmDataSourceLabelProvider());
279 // comparator = new CdmDataSourceViewerComparator();
280 // viewer.setComparator(comparator);
283 // // register context menu
284 // MenuManager menuMgr = new MenuManager();
285 // menuMgr.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
286 // getSite().registerContextMenu(menuMgr, viewer);
288 // Control control = viewer.getControl();
289 // Menu menu = menuMgr.createContextMenu(control);
290 // control.setMenu(menu);
292 // // connect on doubleclick
293 // viewer.addDoubleClickListener(new IDoubleClickListener() {
296 // public void doubleClick(DoubleClickEvent event) {
297 // if (event.getSelection() instanceof StructuredSelection) {
299 // Object element = ((StructuredSelection) event
300 // .getSelection()).getFirstElement();
301 // if (element instanceof CdmMetaDataAwareDataSourceContainer) {
302 // String commandId = "eu.etaxonomy.taxeditor.store.datasource.change";
304 // ICommandService commandService = (ICommandService)getSite().getService(ICommandService.class);
306 // Command command = commandService.getCommand(commandId);
307 // if(command.isEnabled()) {
309 // IHandlerService handlerService = (IHandlerService) AbstractUtility.getService(IHandlerService.class);
312 // handlerService.executeCommand(commandId, null);
313 // } catch (ExecutionException e) {
314 // AbstractUtility.error(this.getClass(), e);
315 // } catch (NotDefinedException e) {
316 // AbstractUtility.error(this.getClass(), e);
317 // } catch (NotEnabledException e) {
318 // AbstractUtility.error(this.getClass(), e);
319 // } catch (NotHandledException e) {
320 // AbstractUtility.error(this.getClass(), e);
332 // This will create the columns for the table
333 private void createColumns(TableViewer viewer
) {
334 Table table
= viewer
.getTable();
335 String
[] titles
= {"Connected", "Name", "Server", "Up", "Type", "Database", "Nomenclatural Code", "Created", "CDM Version", "Compatible", "Notes"};
336 int[] bounds
= { 24, 200, 100, 50 , 80, 120, 50, 100, 100, 50, 300};
338 for (int i
= 0; i
< titles
.length
; i
++) {
339 TableViewerColumn column
= new TableViewerColumn(viewer
, SWT
.NONE
);
340 column
.getColumn().setText(titles
[i
]);
341 column
.getColumn().setWidth(bounds
[i
]);
342 column
.getColumn().setResizable(true);
343 column
.getColumn().setMoveable(true);
344 column
.getColumn().addSelectionListener(getSelectionAdapter(column
.getColumn(), i
));
346 table
.setSortColumn(column
.getColumn());
349 table
.setHeaderVisible(true);
350 table
.setLinesVisible(true);
351 table
.setSortDirection(SWT
.UP
);
358 public void refresh(){
359 getService().schedule(new DataSourceJob("Loading datasources", CdmDataSourceRepository
.getAll()), Job
.LONG
);
364 public void dispose() {
365 CdmStore
.getContextManager().removeContextListener(contextListener
);
371 public void setFocus() {
372 // viewer.getControl().setFocus();
377 * @see org.eclipse.ui.part.WorkbenchPart#showBusy(boolean)
381 public void showBusy(boolean busy
) {
382 super.showBusy(busy
);
383 // viewer.getTable().setEnabled(!busy);
385 partNameCache
= getPartName();
386 setPartName("Loading datasources");
388 if(partNameCache
!= null){
389 setPartName(partNameCache
);
395 * <p>Getter for the field <code>viewer</code>.</p>
397 * @return a {@link org.eclipse.jface.viewers.StructuredViewer} object.
399 public StructuredViewer
getViewer() {
404 * <p>Getter for the field <code>service</code>.</p>
406 * @return the service
408 public IWorkbenchSiteProgressService
getService() {
412 private SelectionAdapter
getSelectionAdapter(final TableColumn column
,
414 SelectionAdapter selectionAdapter
= new SelectionAdapter() {
416 public void widgetSelected(SelectionEvent e
) {
417 comparator
.setColumn(index
);
418 int dir
= viewer
.getTable().getSortDirection();
419 if (viewer
.getTable().getSortColumn() == column
) {
420 dir
= dir
== SWT
.UP ? SWT
.DOWN
: SWT
.UP
;
424 viewer
.getTable().setSortDirection(dir
);
425 viewer
.getTable().setSortColumn(column
);
429 return selectionAdapter
;