Project

General

Profile

Download (5.79 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
* Copyright (C) 2017 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.editor.workingSet;
11

    
12
import java.util.Collection;
13
import java.util.List;
14
import java.util.Map;
15

    
16
import javax.annotation.PostConstruct;
17
import javax.annotation.PreDestroy;
18
import javax.inject.Inject;
19

    
20
import org.eclipse.e4.ui.di.Focus;
21
import org.eclipse.e4.ui.model.application.MApplication;
22
import org.eclipse.e4.ui.services.EMenuService;
23
import org.eclipse.e4.ui.workbench.modeling.EModelService;
24
import org.eclipse.e4.ui.workbench.modeling.EPartService;
25
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
26
import org.eclipse.jface.viewers.ArrayContentProvider;
27
import org.eclipse.jface.viewers.DoubleClickEvent;
28
import org.eclipse.jface.viewers.IDoubleClickListener;
29
import org.eclipse.jface.viewers.ISelection;
30
import org.eclipse.jface.viewers.ISelectionChangedListener;
31
import org.eclipse.jface.viewers.IStructuredSelection;
32
import org.eclipse.jface.viewers.ListViewer;
33
import org.eclipse.swt.widgets.Composite;
34

    
35
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
36
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
37
import eu.etaxonomy.cdm.api.service.IWorkingSetService;
38
import eu.etaxonomy.cdm.model.common.CdmBase;
39
import eu.etaxonomy.cdm.model.description.WorkingSet;
40
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
41
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
42
import eu.etaxonomy.taxeditor.editor.EditorUtil;
43
import eu.etaxonomy.taxeditor.model.AbstractUtility;
44
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
45
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
46
import eu.etaxonomy.taxeditor.store.CdmStore;
47
import eu.etaxonomy.taxeditor.ui.UuidAndTitleCacheLabelProvider;
48

    
49
/**
50
 * @author pplitzner
51
 * @date 12.12.2017
52
 *
53
 */
54
public class WorkingSetNavigator implements IConversationEnabled, ICdmEntitySessionEnabled{
55

    
56
    private ListViewer viewer;
57

    
58
    @Inject
59
    private ESelectionService selService;
60

    
61
    private ISelectionChangedListener selectionChangedListener;
62

    
63
    private ConversationHolder conversation;
64

    
65
    private ICdmEntitySession cdmEntitySession;
66

    
67
    private List<UuidAndTitleCache<WorkingSet>> workingSets;
68

    
69
    @PostConstruct
70
    public void create(Composite parent, EPartService partService, EModelService modelService, MApplication application,
71
            EMenuService menuService){
72
        if (CdmStore.isActive()){
73
            if(conversation == null){
74
                conversation = CdmStore.createConversation();
75
            }
76
            if(cdmEntitySession == null){
77
                cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
78
            }
79
        }
80
        else{
81
            return;
82
        }
83
        viewer = new ListViewer(parent);
84
        viewer.setContentProvider(new ArrayContentProvider());
85
        viewer.setLabelProvider(new UuidAndTitleCacheLabelProvider());
86
        workingSets = CdmStore.getService(IWorkingSetService.class).getUuidAndTitleCache(null, null);
87
        viewer.setInput(workingSets);
88

    
89
        viewer.addDoubleClickListener(new IDoubleClickListener() {
90

    
91
            @Override
92
            public void doubleClick(DoubleClickEvent event) {
93
                ISelection selection = event.getSelection();
94
                if(selection instanceof IStructuredSelection){
95
                    UuidAndTitleCache<WorkingSet> workingSetUuid = (UuidAndTitleCache<WorkingSet>) ((IStructuredSelection) selection).getFirstElement();
96
                    EditorUtil.openWorkingSetEditor(workingSetUuid.getUuid(), modelService, partService, application);
97
                }
98
            }
99
        });
100

    
101
        //propagate selection
102
       selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
103
       viewer.addSelectionChangedListener(selectionChangedListener);
104

    
105
        //create context menu
106
        menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.editor.popupmenu.workingSetNavigator");
107
    }
108

    
109
    public void addWorkingSet(WorkingSet workingSet){
110
        workingSets.add(new UuidAndTitleCache<>(workingSet.getUuid(), workingSet.getTitleCache()));
111
        refresh();
112
    }
113

    
114
    public void removeWorkingSet(UuidAndTitleCache<WorkingSet> workingSet){
115
        workingSets.remove(workingSet);
116
        refresh();
117
    }
118

    
119
    public void refresh(){
120
        viewer.setInput(workingSets);
121
        viewer.refresh();
122
    }
123

    
124
    /**
125
     * {@inheritDoc}
126
     */
127
    @Override
128
    public void update(CdmDataChangeMap arg0) {
129
    }
130

    
131
    /**
132
     * {@inheritDoc}
133
     */
134
    @Override
135
    public ICdmEntitySession getCdmEntitySession() {
136
        return cdmEntitySession;
137
    }
138

    
139
    /**
140
     * {@inheritDoc}
141
     */
142
    @Override
143
    public <T extends CdmBase> Collection<T> getRootEntities() {
144
        return null;
145
    }
146

    
147
    /**
148
     * {@inheritDoc}
149
     */
150
    @Override
151
    public Map<Object, List<String>> getPropertyPathsMap() {
152
        return null;
153
    }
154

    
155
    /**
156
     * {@inheritDoc}
157
     */
158
    @Override
159
    public ConversationHolder getConversationHolder() {
160
        return conversation;
161
    }
162

    
163
    /** {@inheritDoc} */
164
    @PreDestroy
165
    public void dispose() {
166
        if (conversation != null) {
167
            conversation.close();
168
            conversation = null;
169
        }
170
        if(cdmEntitySession != null) {
171
            cdmEntitySession.dispose();
172
            cdmEntitySession = null;
173
        }
174
    }
175

    
176
    /** {@inheritDoc} */
177
    @Focus
178
    public void setFocus() {
179
        if (getConversationHolder() != null) {
180
            getConversationHolder().bind();
181
        }
182
        if(cdmEntitySession != null) {
183
            cdmEntitySession.bind();
184
        }
185
    }
186

    
187
}
(4-4/4)