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
.handler
;
13 import info
.bioinfweb
.jphyloio
.JPhyloIOEventWriter
;
14 import info
.bioinfweb
.jphyloio
.ReadWriteParameterMap
;
15 import info
.bioinfweb
.jphyloio
.ReadWriteParameterNames
;
16 import info
.bioinfweb
.jphyloio
.dataadapters
.implementations
.ListBasedDocumentDataAdapter
;
17 import info
.bioinfweb
.jphyloio
.factory
.JPhyloIOReaderWriterFactory
;
18 import info
.bioinfweb
.jphyloio
.objecttranslation
.ObjectTranslatorFactory
;
21 import java
.io
.IOException
;
23 import org
.eclipse
.core
.commands
.AbstractHandler
;
24 import org
.eclipse
.core
.commands
.ExecutionEvent
;
25 import org
.eclipse
.core
.commands
.ExecutionException
;
26 import org
.eclipse
.core
.runtime
.IStatus
;
27 import org
.eclipse
.jface
.viewers
.ISelection
;
28 import org
.eclipse
.jface
.viewers
.TreeNode
;
29 import org
.eclipse
.jface
.wizard
.WizardDialog
;
30 import org
.eclipse
.ui
.handlers
.HandlerUtil
;
32 import eu
.etaxonomy
.cdm
.model
.molecular
.Sequence
;
33 import eu
.etaxonomy
.taxeditor
.editor
.EditorUtil
;
34 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
35 import eu
.etaxonomy
.taxeditor
.molecular
.Messages
;
36 import eu
.etaxonomy
.taxeditor
.molecular
.TaxeditorMolecularPlugin
;
37 import eu
.etaxonomy
.taxeditor
.molecular
.io
.CDMPherogramAlignmentObjectTranslator
;
38 import eu
.etaxonomy
.taxeditor
.molecular
.io
.CDMSequenceMatrixAdapter
;
39 import eu
.etaxonomy
.taxeditor
.molecular
.io
.SingleReadAlignmentRDFXMLConstants
;
40 import eu
.etaxonomy
.taxeditor
.molecular
.io
.wizard
.ExportSingleReadAlignmentWizard
;
41 import eu
.etaxonomy
.taxeditor
.util
.ApplicationUtil
;
46 * Allows to export a single read alignment to various alignment formats using
47 * <a href="http://bioinfweb.info/JPhyloIO/"><i>JPhyloIO</i></a>.
52 public class ExportSequenceToFileHandler
extends AbstractHandler
{
53 private static final JPhyloIOReaderWriterFactory factory
= new JPhyloIOReaderWriterFactory();
57 public Object
execute(ExecutionEvent event
) throws ExecutionException
{
58 ISelection currentSelection
= HandlerUtil
.getCurrentSelection(event
);
59 TreeNode treeNodeOfSelection
= EditorUtil
.getTreeNodeOfSelection(currentSelection
);
60 if (treeNodeOfSelection
!= null && treeNodeOfSelection
.getValue() instanceof Sequence
) {
61 Sequence sequence
= (Sequence
)treeNodeOfSelection
.getValue();
63 final ExportSingleReadAlignmentWizard wizard
= new ExportSingleReadAlignmentWizard();
64 final WizardDialog dialog
= new WizardDialog(HandlerUtil
.getActiveShell(event
), 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
, "http://cybertaxonomy.eu/taxeditor/"); //TODO Specify URL obtained from a central class?
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);