Project

General

Profile

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

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

    
7
import org.apache.log4j.Logger;
8
import org.eclipse.core.commands.AbstractHandler;
9
import org.eclipse.core.commands.ExecutionEvent;
10
import org.eclipse.core.commands.ExecutionException;
11
import org.eclipse.jface.dialogs.MessageDialog;
12
import org.eclipse.jface.viewers.ISelection;
13
import org.eclipse.jface.viewers.TreeSelection;
14
import org.eclipse.swt.widgets.Display;
15
import org.eclipse.ui.PartInitException;
16
import org.eclipse.ui.handlers.HandlerUtil;
17

    
18
import eu.etaxonomy.cdm.api.service.IDescriptionService;
19
import eu.etaxonomy.cdm.api.service.ITaxonNodeService;
20
import eu.etaxonomy.cdm.api.service.ITaxonService;
21
import eu.etaxonomy.cdm.hibernate.HibernateProxyHelper;
22
import eu.etaxonomy.cdm.model.taxon.Taxon;
23
import eu.etaxonomy.cdm.model.taxon.TaxonNode;
24
import eu.etaxonomy.taxeditor.editor.EditorUtil;
25
import eu.etaxonomy.taxeditor.editor.MultiPageTaxonEditor;
26
import eu.etaxonomy.taxeditor.model.AbstractUtility;
27
import eu.etaxonomy.taxeditor.model.MessagingUtils;
28
import eu.etaxonomy.taxeditor.navigation.NavigationUtil;
29
import eu.etaxonomy.taxeditor.navigation.l10n.Messages;
30
import eu.etaxonomy.taxeditor.navigation.navigator.TaxonNavigator;
31
import eu.etaxonomy.taxeditor.store.CdmStore;
32
import eu.etaxonomy.taxeditor.ui.dialog.selection.TaxonNodeSelectionDialog;
33

    
34
public class MoveFactualDataHandler extends AbstractHandler {
35

    
36
    @SuppressWarnings("unused")
37
    private static final Logger logger = Logger.getLogger(MoveFactualDataHandler.class);
38

    
39
    @Override
40
    public Object execute(ExecutionEvent event) throws ExecutionException {
41
        ISelection currentSelection = HandlerUtil.getCurrentSelection(event);
42
        Object activePart = AbstractUtility.getActiveE4Part();
43
        TaxonNavigator navigator = null;
44
        if(activePart instanceof TaxonNavigator){
45
            navigator = (TaxonNavigator)activePart;
46
        }
47
        if(navigator!=null && currentSelection instanceof TreeSelection){
48
            Object object = ((TreeSelection) currentSelection).getFirstElement();
49
            if(object instanceof TaxonNode){
50
                TaxonNode taxonNode = HibernateProxyHelper.deproxy(object, TaxonNode.class);
51
                final TaxonNode sourceTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(taxonNode.getUuid());
52
                if(NavigationUtil.isDirty(sourceTaxonNode)){
53
                    MessageDialog.openWarning(HandlerUtil.getActiveShell(event), Messages.MoveFactualDataHandler_UNSAVED_SOURCE, Messages.MoveFactualDataHandler_UNSAVED_SOURCE_MESSAGE);
54
                    return null;
55
                }
56
                //reload to avoid session conflicts
57
                Taxon taxon = HibernateProxyHelper.deproxy(CdmStore.getService(ITaxonService.class).load(sourceTaxonNode.getTaxon().getUuid()), Taxon.class);
58
                if(taxon!=null){
59
                 // Choose the target taxon
60
                    List<UUID> excludeTaxa = new ArrayList<UUID>();
61
                    excludeTaxa.add(taxon.getUuid());
62
                    TaxonNode dialogTaxonNode = TaxonNodeSelectionDialog.select(HandlerUtil.getActiveShell(event),
63
                            navigator.getConversationHolder(),
64
                            Messages.MoveFactualDataHandler_CHOOSE_TAXON,
65
                            excludeTaxa,
66
                            sourceTaxonNode,
67
                            sourceTaxonNode.getClassification());
68
                    if (dialogTaxonNode == null) {
69
                        return null;
70
                    }
71
                    //reload to avoid session conflicts
72
                    final TaxonNode targetTaxonNode = CdmStore.getService(ITaxonNodeService.class).load(dialogTaxonNode.getUuid());
73
                    if(NavigationUtil.isDirty(targetTaxonNode)){
74
                        MessageDialog.openWarning(HandlerUtil.getActiveShell(event), Messages.MoveFactualDataHandler_UNSAVED_TARGET, Messages.MoveFactualDataHandler_UNSAVED_TARGET_MESSAGE);
75
                        return null;
76
                    }
77
                    CdmStore.getService(IDescriptionService.class).moveTaxonDescriptions(taxon.getUuid(),targetTaxonNode.getTaxon().getUuid());
78

    
79
                    navigator.getConversationHolder().bind();
80
                    navigator.getConversationHolder().commit();
81

    
82
                    Display.getDefault().asyncExec(new Runnable(){
83

    
84
                        @Override
85
                        public void run() {
86
                            try {
87
                                //close and re-open to refresh factual data view
88
                                MultiPageTaxonEditor sourceEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(sourceTaxonNode.getUuid());
89
                                MultiPageTaxonEditor targetEditor = (MultiPageTaxonEditor) EditorUtil.findEditorByTaxonNodeUuid(targetTaxonNode.getUuid());
90
                                if(targetEditor != null){
91
                                    AbstractUtility.close(sourceEditor);
92
                                    AbstractUtility.close(targetEditor);
93
                                }
94
                                EditorUtil.openTaxonNode(sourceTaxonNode.getUuid());
95
                                EditorUtil.openTaxonNode(targetTaxonNode.getUuid());
96
                            } catch (PartInitException e) {
97
                                MessagingUtils.error(this.getClass(), e);
98
                                throw new RuntimeException(e);
99
                            } catch (Exception e) {
100
                                MessagingUtils.warningDialog(Messages.MoveFactualDataHandler_CREATE_FAILED, this, e.getMessage());
101
                            }
102
                        }
103

    
104
                    });
105
                }
106
            }
107
        }
108
        return null;
109
    }
110

    
111
}
(6-6/17)