Project

General

Profile

Download (8.13 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.descriptiveDataSet;
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.core.runtime.IProgressMonitor;
21
import org.eclipse.e4.core.di.annotations.Optional;
22
import org.eclipse.e4.ui.di.Focus;
23
import org.eclipse.e4.ui.di.UIEventTopic;
24
import org.eclipse.e4.ui.model.application.MApplication;
25
import org.eclipse.e4.ui.services.EMenuService;
26
import org.eclipse.e4.ui.workbench.modeling.EModelService;
27
import org.eclipse.e4.ui.workbench.modeling.EPartService;
28
import org.eclipse.e4.ui.workbench.modeling.ESelectionService;
29
import org.eclipse.jface.viewers.ArrayContentProvider;
30
import org.eclipse.jface.viewers.DoubleClickEvent;
31
import org.eclipse.jface.viewers.IDoubleClickListener;
32
import org.eclipse.jface.viewers.ISelection;
33
import org.eclipse.jface.viewers.ISelectionChangedListener;
34
import org.eclipse.jface.viewers.IStructuredSelection;
35
import org.eclipse.jface.viewers.LabelProvider;
36
import org.eclipse.jface.viewers.ListViewer;
37
import org.eclipse.swt.widgets.Composite;
38
import org.eclipse.ui.IMemento;
39

    
40
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
41
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
42
import eu.etaxonomy.cdm.api.service.IDescriptiveDataSetService;
43
import eu.etaxonomy.cdm.model.common.CdmBase;
44
import eu.etaxonomy.cdm.model.description.DescriptiveDataSet;
45
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
46
import eu.etaxonomy.taxeditor.editor.EditorUtil;
47
import eu.etaxonomy.taxeditor.event.WorkbenchEventConstants;
48
import eu.etaxonomy.taxeditor.model.IContextListener;
49
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
50
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
51
import eu.etaxonomy.taxeditor.store.CdmStore;
52

    
53
/**
54
 * @author pplitzner
55
 * @date 12.12.2017
56
 *
57
 */
58
public class DescriptiveDataSetNavigator implements IConversationEnabled, ICdmEntitySessionEnabled, IContextListener{
59

    
60
    private ListViewer viewer;
61

    
62
    @Inject
63
    private ESelectionService selService;
64

    
65
    private ISelectionChangedListener selectionChangedListener;
66

    
67
    private ConversationHolder conversation;
68

    
69
    private ICdmEntitySession cdmEntitySession;
70

    
71
    private List<DescriptiveDataSet> descriptiveDataSets;
72

    
73
    public DescriptiveDataSetNavigator() {
74
        CdmStore.getContextManager().addContextListener(this);
75
    }
76

    
77
    @PostConstruct
78
    public void create(Composite parent, EPartService partService, EModelService modelService, MApplication application,
79
            EMenuService menuService){
80
        viewer = new ListViewer(parent);
81
        viewer.setContentProvider(new ArrayContentProvider());
82
        viewer.setLabelProvider(new LabelProvider(){
83
            /**
84
             * {@inheritDoc}
85
             */
86
            @Override
87
            public String getText(Object element) {
88
                if(element instanceof DescriptiveDataSet){
89
                    return ((DescriptiveDataSet) element).getLabel();
90
                }
91
                return super.getText(element);
92
            }
93
        });
94

    
95
        viewer.addDoubleClickListener(new IDoubleClickListener() {
96

    
97
            @Override
98
            public void doubleClick(DoubleClickEvent event) {
99
                ISelection selection = event.getSelection();
100
                if(selection instanceof IStructuredSelection){
101
                	DescriptiveDataSet descriptiveDataSetUuid = (DescriptiveDataSet) ((IStructuredSelection) selection).getFirstElement();
102
                	if(descriptiveDataSetUuid!=null){
103
                	    EditorUtil.openDescriptiveDataSetEditor(descriptiveDataSetUuid.getUuid(), modelService, partService, application);
104
                	}
105
                }
106
            }
107
        });
108

    
109
        //propagate selection
110
       selectionChangedListener = (event -> selService.setSelection(event.getSelection()));
111
       viewer.addSelectionChangedListener(selectionChangedListener);
112

    
113
        //create context menu
114
        menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.editor.popupmenu.descriptiveDataSetNavigator"); //$NON-NLS-1$
115

    
116
        init();
117
    }
118

    
119
    public void init(){
120
        if (CdmStore.isActive()){
121
            if(conversation == null) {
122
                conversation = CdmStore.createConversation();
123
            }
124
            if(cdmEntitySession == null){
125
                cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
126
            }
127
            descriptiveDataSets = CdmStore.getService(IDescriptiveDataSetService.class).list(DescriptiveDataSet.class, null, null, null, null);
128
            viewer.setInput(descriptiveDataSets);
129
        }
130
    }
131

    
132
    public void addDescriptiveDataSet(DescriptiveDataSet descriptiveDataSetSet){
133
        descriptiveDataSets.add(descriptiveDataSetSet);
134
        refresh();
135
    }
136

    
137
    public void removeDescriptiveDataSet(DescriptiveDataSet descriptiveDataSetSet){
138
        descriptiveDataSets.remove(descriptiveDataSetSet);
139
        refresh();
140
    }
141

    
142
    public void refresh(){
143
        refresh(false);
144
    }
145

    
146
    public void refresh(boolean reloadDescriptiveDataSets){
147
        if(reloadDescriptiveDataSets){
148
            cdmEntitySession.dispose();
149
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
150
            IDescriptiveDataSetService service = CdmStore.getService(IDescriptiveDataSetService.class);
151
            descriptiveDataSets = service.list(DescriptiveDataSet.class, null, null, null, null);
152
        }
153
        viewer.setInput(descriptiveDataSets);
154
        viewer.refresh();
155
    }
156

    
157
    @Inject
158
    @Optional
159
    private void updateView(@UIEventTopic(WorkbenchEventConstants.REFRESH_DATASET_NAVIGATOR) DescriptiveDataSet dataSet) {
160
        DescriptiveDataSet load = cdmEntitySession.load(dataSet, true);
161
        viewer.update(load, null);
162
        refresh();
163
    }
164

    
165
    /**
166
     * {@inheritDoc}
167
     */
168
    @Override
169
    public void update(CdmDataChangeMap arg0) {
170
    }
171

    
172
    /**
173
     * {@inheritDoc}
174
     */
175
    @Override
176
    public ICdmEntitySession getCdmEntitySession() {
177
        return cdmEntitySession;
178
    }
179

    
180
    /**
181
     * {@inheritDoc}
182
     */
183
    @Override
184
    public <T extends CdmBase> Collection<T> getRootEntities() {
185
        return null;
186
    }
187

    
188
    /**
189
     * {@inheritDoc}
190
     */
191
    @Override
192
    public Map<Object, List<String>> getPropertyPathsMap() {
193
        return null;
194
    }
195

    
196
    /**
197
     * {@inheritDoc}
198
     */
199
    @Override
200
    public ConversationHolder getConversationHolder() {
201
        return conversation;
202
    }
203

    
204
    public ESelectionService getSelService() {
205
        return selService;
206
    }
207

    
208
    @PreDestroy
209
    public void dispose() {
210
        if (conversation != null) {
211
            conversation.close();
212
            conversation = null;
213
        }
214
        if(cdmEntitySession != null) {
215
            cdmEntitySession.dispose();
216
            cdmEntitySession = null;
217
        }
218
    }
219

    
220
    @Focus
221
    public void setFocus() {
222
        if (getConversationHolder() != null) {
223
            getConversationHolder().bind();
224
        }
225
        if(cdmEntitySession != null) {
226
            cdmEntitySession.bind();
227
        }
228
    }
229

    
230
    /**
231
     * {@inheritDoc}
232
     */
233
    @Override
234
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
235
        // TODO Auto-generated method stub
236

    
237
    }
238

    
239
    /**
240
     * {@inheritDoc}
241
     */
242
    @Override
243
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
244
    }
245

    
246
    /**
247
     * {@inheritDoc}
248
     */
249
    @Override
250
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
251
        if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
252
            init();
253
        }
254
    }
255

    
256
    /**
257
     * {@inheritDoc}
258
     */
259
    @Override
260
    public void contextRefresh(IProgressMonitor monitor) {
261
    }
262

    
263
    /**
264
     * {@inheritDoc}
265
     */
266
    @Override
267
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
268
    }
269

    
270
}
(4-4/5)