Project

General

Profile

Download (5.5 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2016 EDIT
4
* European Distributed Institute of Taxonomy
5
* http://www.e-taxonomy.eu
6
*
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.
9
*/
10
package eu.etaxonomy.taxeditor.molecular.handler;
11

    
12

    
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;
19

    
20
import java.io.File;
21
import java.io.IOException;
22

    
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;
31

    
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;
42

    
43

    
44

    
45
/**
46
 * Allows to export a single read alignment to various alignment formats using
47
 * <a href="http://bioinfweb.info/JPhyloIO/"><i>JPhyloIO</i></a>.
48
 *
49
 * @author Ben Stöver
50
 * @date 24.04.2016
51
 */
52
public class ExportSequenceToFileHandler extends AbstractHandler {
53
    private static final JPhyloIOReaderWriterFactory factory = new JPhyloIOReaderWriterFactory();
54

    
55

    
56
    @Override
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();
62

    
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());
72

    
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);
78

    
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()));
84

    
85
                // Write document:
86
                File file = new File(wizard.getModel().getFileName());
87
                if (!file.exists() || MessagingUtils.confirmDialog(Messages.exportSequenceToFileHandlerOverwriteTitle, String.format(
88
                        Messages.exportSequenceToFileHandlerOverwriteText, file.getAbsolutePath()))) {
89

    
90
                    try {
91
                        writer.writeDocument(document, file, parameters);
92
                    }
93
                    catch (IOException e) {
94
                        e.printStackTrace();
95
                        MessagingUtils.errorDialog(Messages.exportSequenceToFileHandlerIOErrorTitle, this,
96
                                String.format(Messages.exportSequenceToFileHandlerIOErrorMessage,
97
                                        file.getAbsolutePath()), TaxeditorMolecularPlugin.PLUGIN_ID, e, false);
98
                    }
99
                }
100

    
101
            }
102
        }
103
        return null;
104
    }
105
}
(12-12/22)