3 * Copyright (C) 2016 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.
10 package eu
.etaxonomy
.taxeditor
.molecular
.editor
.e4
.handler
;
14 import java
.io
.IOException
;
16 import javax
.inject
.Named
;
18 import org
.eclipse
.core
.runtime
.IStatus
;
19 import org
.eclipse
.e4
.core
.di
.annotations
.CanExecute
;
20 import org
.eclipse
.e4
.core
.di
.annotations
.Execute
;
21 import org
.eclipse
.e4
.core
.di
.annotations
.Optional
;
22 import org
.eclipse
.e4
.ui
.model
.application
.ui
.menu
.MHandledMenuItem
;
23 import org
.eclipse
.e4
.ui
.services
.IServiceConstants
;
24 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
25 import org
.eclipse
.jface
.viewers
.TreeNode
;
26 import org
.eclipse
.jface
.wizard
.WizardDialog
;
27 import org
.eclipse
.swt
.widgets
.Shell
;
29 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
30 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
31 import eu
.etaxonomy
.taxeditor
.molecular
.TaxeditorMolecularPlugin
;
32 import eu
.etaxonomy
.taxeditor
.molecular
.io
.CDMPherogramAlignmentObjectTranslator
;
33 import eu
.etaxonomy
.taxeditor
.molecular
.io
.CDMSequenceMatrixAdapter
;
34 import eu
.etaxonomy
.taxeditor
.molecular
.io
.SingleReadAlignmentRDFXMLConstants
;
35 import eu
.etaxonomy
.taxeditor
.molecular
.io
.wizard
.ExportSingleReadAlignmentWizard
;
36 import eu
.etaxonomy
.taxeditor
.molecular
.l10n
.Messages
;
37 import eu
.etaxonomy
.taxeditor
.util
.ApplicationUtil
;
38 import info
.bioinfweb
.jphyloio
.JPhyloIOEventWriter
;
39 import info
.bioinfweb
.jphyloio
.ReadWriteParameterMap
;
40 import info
.bioinfweb
.jphyloio
.ReadWriteParameterNames
;
41 import info
.bioinfweb
.jphyloio
.dataadapters
.implementations
.ListBasedDocumentDataAdapter
;
42 import info
.bioinfweb
.jphyloio
.factory
.JPhyloIOReaderWriterFactory
;
43 import info
.bioinfweb
.jphyloio
.objecttranslation
.ObjectTranslatorFactory
;
48 * Allows to export a single read alignment to various alignment formats using
49 * <a href="http://bioinfweb.info/JPhyloIO/"><i>JPhyloIO</i></a>.
54 public class ExportSequenceToFileHandlerE4
{
55 private static final JPhyloIOReaderWriterFactory factory
= new JPhyloIOReaderWriterFactory();
59 public void execute(@Optional@Named(IServiceConstants
.ACTIVE_SELECTION
)IStructuredSelection selection
,
60 @Named(IServiceConstants
.ACTIVE_SHELL
)Shell shell
) {
61 Sequence sequence
= (Sequence
) ((TreeNode
) selection
.getFirstElement()).getValue();
63 final ExportSingleReadAlignmentWizard wizard
= new ExportSingleReadAlignmentWizard();
64 final WizardDialog dialog
= new WizardDialog(shell
, wizard
);
65 if (dialog
.open() == IStatus
.OK
) {
66 // Prepare writer parameters:
67 ReadWriteParameterMap parameters
= new ReadWriteParameterMap();
68 parameters
.put(ReadWriteParameterNames
.KEY_APPLICATION_NAME
, ApplicationUtil
.getTitle());
69 //parameters.put(ReadWriteParameterNames.KEY_APPLICATION_VERSION, ApplicationUtil.getVersion()); // Setting the version unnecessary, since its already contained in the title.
70 parameters
.put(ReadWriteParameterNames
.KEY_APPLICATION_URL
, "https://cybertaxonomy.org/taxeditor/"); //TODO Specify URL obtained from a central class? //$NON-NLS-1$
71 parameters
.put(ReadWriteParameterNames
.KEY_SEQUENCE_EXTENSION_TOKEN
, wizard
.getModel().getElongationToken());
73 // Create and register object translator for writing pherogram alignment shifts:
74 ObjectTranslatorFactory translatorFactory
= new ObjectTranslatorFactory();
75 translatorFactory
.addXSDTranslators(true);
76 translatorFactory
.addTranslator(new CDMPherogramAlignmentObjectTranslator(), true, SingleReadAlignmentRDFXMLConstants
.DATA_TYPE_PHERORAGM_ALIGNMENT
);
77 parameters
.put(ReadWriteParameterNames
.KEY_OBJECT_TRANSLATOR_FACTORY
, translatorFactory
);
79 // Create writer and document adapters:
80 JPhyloIOEventWriter writer
= factory
.getWriter(wizard
.getModel().getFormatInfo().getFormatID());
81 ListBasedDocumentDataAdapter document
= new ListBasedDocumentDataAdapter();
82 document
.getMatrices().add(new CDMSequenceMatrixAdapter(sequence
, wizard
.getModel().getConsensusSequenceLabel(),
83 wizard
.getModel().isExportConsensusSequence(), wizard
.getModel().isExportSingleReads()));
86 File file
= new File(wizard
.getModel().getFileName());
87 if (!file
.exists() || MessagingUtils
.confirmDialog(Messages
.exportSequenceToFileHandlerOverwriteTitle
, String
.format(
88 Messages
.exportSequenceToFileHandlerOverwriteText
, file
.getAbsolutePath()))) {
91 writer
.writeDocument(document
, file
, parameters
);
93 catch (IOException e
) {
95 MessagingUtils
.errorDialog(Messages
.exportSequenceToFileHandlerIOErrorTitle
, this,
96 String
.format(Messages
.exportSequenceToFileHandlerIOErrorMessage
,
97 file
.getAbsolutePath()), TaxeditorMolecularPlugin
.PLUGIN_ID
, e
, false);
105 public boolean canExecute(@Optional @Named(IServiceConstants
.ACTIVE_SELECTION
) IStructuredSelection selection
, MHandledMenuItem menuItem
) {
106 boolean canExecute
= false;
107 canExecute
= selection
.size()==1
108 && selection
.getFirstElement() instanceof TreeNode
109 && ((TreeNode
) selection
.getFirstElement()).getValue() instanceof Sequence
;
110 menuItem
.setVisible(canExecute
);