Project

General

Profile

Download (5.78 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.navigation.navigator.e4.handler;
2

    
3
import java.util.ArrayList;
4
import java.util.List;
5
import java.util.UUID;
6

    
7
import javax.inject.Named;
8

    
9
import org.eclipse.e4.core.di.annotations.CanExecute;
10
import org.eclipse.e4.core.di.annotations.Execute;
11
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
12
import org.eclipse.e4.ui.model.application.ui.menu.MHandledMenuItem;
13
import org.eclipse.e4.ui.services.IServiceConstants;
14
import org.eclipse.e4.ui.workbench.modeling.EPartService;
15
import org.eclipse.jface.dialogs.MessageDialog;
16
import org.eclipse.jface.viewers.TreeSelection;
17
import org.eclipse.swt.widgets.Display;
18
import org.eclipse.swt.widgets.Shell;
19

    
20
import eu.etaxonomy.cdm.api.service.IDescriptionService;
21
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
22
import eu.etaxonomy.cdm.api.service.ITaxonService;
23
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
24
import eu.etaxonomy.cdm.model.taxon.Taxon;
25
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
26
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
27
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
28
import eu.etaxonomy.taxeditor.navigation.navigator.e4.TaxonNavigatorE4;
29
import eu.etaxonomy.taxeditor.store.CdmStore;
30
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
31

    
32
public class MoveFactualDataHandlerE4 {
33

    
34
    @Execute
35
    public void execute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection,
36
            @Named(IServiceConstants.ACTIVE_SHELL)Shell shell,
37
            @Named(IServiceConstants.ACTIVE_PART)MPart activePart, EPartService partService) {
38

    
39
        TaxonNavigatorE4 taxonNavigator = (TaxonNavigatorE4) activePart.getObject();
40

    
41
        if(taxonNavigator!=null){
42
            Object object = selection.getFirstElement();
43
            if(object instanceof TaxonNode){
44
                TaxonNode taxonNode = HibernateProxyHelper.deproxy(object, TaxonNode.class);
45
                final TaxonNode sourceTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNode.getUuid());
46
                if(NavigationUtil.isDirty(sourceTaxonNode, partService)){
47
                    MessageDialog.openWarning(shell, Messages.MoveFactualDataHandler_UNSAVED_SOURCE, Messages.MoveFactualDataHandler_UNSAVED_SOURCE_MESSAGE);
48
                    return;
49
                }
50
                //reload to avoid session conflicts
51
                Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(sourceTaxonNode.getTaxon().getUuid()), Taxon.class);
52
                if(taxon!=null){
53
                 // Choose the target taxon
54
                    List<UUID> excludeTaxa = new ArrayList<UUID>();
55
                    excludeTaxa.add(taxon.getUuid());
56
                    TaxonNode dialogTaxonNode = TaxonNodeSelectionDialog.select(shell,
57
                            taxonNavigator.getConversationHolder(),
58
                            Messages.MoveFactualDataHandler_CHOOSE_TAXON,
59
                            excludeTaxa,
60
                            sourceTaxonNode,
61
                            sourceTaxonNode.getClassification());
62
                    if (dialogTaxonNode == null) {
63
                        return;
64
                    }
65
                    //reload to avoid session conflicts
66
                    final TaxonNode targetTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(dialogTaxonNode.getUuid());
67
                    if(NavigationUtil.isDirty(targetTaxonNode, partService)){
68
                        MessageDialog.openWarning(shell, Messages.MoveFactualDataHandler_UNSAVED_TARGET, Messages.MoveFactualDataHandler_UNSAVED_TARGET_MESSAGE);
69
                        return;
70
                    }
71
                    CdmStore.getService(IDescriptionService.class).moveTaxonDescriptions(taxon.getUuid(),targetTaxonNode.getTaxon().getUuid());
72

    
73
                    taxonNavigator.getConversationHolder().bind();
74
                    taxonNavigator.getConversationHolder().commit();
75

    
76
                    Display.getDefault().asyncExec(new Runnable(){
77

    
78
                        @Override
79
                        public void run() {
80
                            //FIXME E4 refresh factual view via events or similar
81
//                            try {
82
//                                //close and re-open to refresh factual data view
83
//                                MultiPageTaxonEditor sourceEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(sourceTaxonNode.getUuid());
84
//                                MultiPageTaxonEditor targetEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(targetTaxonNode.getUuid());
85
//                                if(targetEditor != null){
86
//                                    AbstractUtility.close(sourceEditor);
87
//                                    AbstractUtility.close(targetEditor);
88
//                                }
89
//                                EditorUtil.openTaxonNodeE4(sourceTaxonNode.getUuid());
90
//                                EditorUtil.openTaxonNodeE4(targetTaxonNode.getUuid());
91
//                            } catch (PartInitException e) {
92
//                                MessagingUtils.error(this.getClass(), e);
93
//                                throw new RuntimeException(e);
94
//                            } catch (Exception e) {
95
//                                MessagingUtils.warningDialog(Messages.MoveFactualDataHandler_CREATE_FAILED, this, e.getMessage());
96
//                            }
97
                        }
98

    
99
                    });
100
                }
101
            }
102
        }
103
    }
104

    
105
    @CanExecute
106
    private boolean canExecute(@Named(IServiceConstants.ACTIVE_SELECTION)TreeSelection selection, MHandledMenuItem menuItem){
107
        boolean canExecute = false;
108
        canExecute = selection.getFirstElement() instanceof TaxonNode;
109
        menuItem.setVisible(canExecute);
110
        return canExecute;
111
    }
112

    
113
}
(7-7/17)