Project

General

Profile

Download (7.89 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.jface.viewers.ViewerComparator;
38
import org.eclipse.swt.widgets.Composite;
39
import org.eclipse.ui.IMemento;
40

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

    
54
/**
55
 * @author pplitzner
56
 * @date 12.12.2017
57
 *
58
 */
59
public class DescriptiveDataSetNavigator 
60
		implements IConversationEnabled, ICdmEntitySessionEnabled<DescriptiveDataSet>, IContextListener{
61

    
62
    private ListViewer viewer;
63

    
64
    @Inject
65
    private ESelectionService selService;
66

    
67
    private ISelectionChangedListener selectionChangedListener;
68

    
69
    private ConversationHolder conversation;
70

    
71
    private ICdmEntitySession cdmEntitySession;
72

    
73
    private List<DescriptiveDataSet> descriptiveDataSets;
74

    
75
    public DescriptiveDataSetNavigator() {
76
        CdmStore.getContextManager().addContextListener(this);
77
    }
78

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

    
98
        viewer.addDoubleClickListener(new IDoubleClickListener() {
99

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

    
112
        //propagate selection
113
       selectionChangedListener = (event -> selService.setSelection(event.getSelection()));
114
       viewer.addSelectionChangedListener(selectionChangedListener);
115

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

    
119
        init();
120
    }
121

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

    
135
    public void addDescriptiveDataSet(DescriptiveDataSet descriptiveDataSetSet){
136
        descriptiveDataSets.add(descriptiveDataSetSet);
137
        refresh();
138
    }
139

    
140
    public void removeDescriptiveDataSet(DescriptiveDataSet descriptiveDataSetSet){
141
        descriptiveDataSets.remove(descriptiveDataSetSet);
142
        refresh();
143
    }
144

    
145
    public void refresh(){
146
        refresh(false);
147
    }
148

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

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

    
168
    @Override
169
    public void update(CdmDataChangeMap arg0) {
170
    }
171

    
172
    @Override
173
    public ICdmEntitySession getCdmEntitySession() {
174
        return cdmEntitySession;
175
    }
176

    
177
    @Override
178
    public Collection<DescriptiveDataSet> getRootEntities() {
179
        return null;
180
    }
181

    
182
    @Override
183
    public Map<Object, List<String>> getPropertyPathsMap() {
184
        return null;
185
    }
186

    
187
    @Override
188
    public ConversationHolder getConversationHolder() {
189
        return conversation;
190
    }
191

    
192
    public ESelectionService getSelService() {
193
        return selService;
194
    }
195

    
196
    @PreDestroy
197
    public void dispose() {
198
        if (conversation != null) {
199
            conversation.close();
200
            conversation = null;
201
        }
202
        if(cdmEntitySession != null) {
203
            cdmEntitySession.dispose();
204
            cdmEntitySession = null;
205
        }
206
    }
207

    
208
    @Focus
209
    public void setFocus() {
210
        if (getConversationHolder() != null) {
211
            getConversationHolder().bind();
212
        }
213
        if(cdmEntitySession != null) {
214
            cdmEntitySession.bind();
215
        }
216
    }
217

    
218
    @Override
219
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
220
        // TODO Auto-generated method stub
221

    
222
    }
223

    
224
    @Override
225
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
226
    }
227

    
228
    @Override
229
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
230
        if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
231
            init();
232
        }
233
    }
234

    
235
    @Override
236
    public void contextRefresh(IProgressMonitor monitor) {
237
    }
238

    
239
    @Override
240
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
241
    }
242
}
(4-4/5)