Project

General

Profile

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

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

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

    
57
    private ListViewer viewer;
58

    
59
    @Inject
60
    private ESelectionService selService;
61

    
62
    private ISelectionChangedListener selectionChangedListener;
63

    
64
    private ConversationHolder conversation;
65

    
66
    private ICdmEntitySession cdmEntitySession;
67

    
68
    private List<DescriptiveDataSet> descriptiveDataSets;
69

    
70
    public DescriptiveDataSetNavigator() {
71
        CdmStore.getContextManager().addContextListener(this);
72
    }
73

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

    
92
        viewer.addDoubleClickListener(new IDoubleClickListener() {
93

    
94
            @Override
95
            public void doubleClick(DoubleClickEvent event) {
96
                ISelection selection = event.getSelection();
97
                if(selection instanceof IStructuredSelection){
98
                	DescriptiveDataSet descriptiveDataSetUuid = (DescriptiveDataSet) ((IStructuredSelection) selection).getFirstElement();
99
                    EditorUtil.openDescriptiveDataSetEditor(descriptiveDataSetUuid.getUuid(), modelService, partService, application);
100
                }
101
            }
102
        });
103

    
104
        //propagate selection
105
       selectionChangedListener = (event -> selService.setSelection(event.getSelection()));
106
       viewer.addSelectionChangedListener(selectionChangedListener);
107

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

    
111
        init();
112
    }
113

    
114
    public void init(){
115
        if (CdmStore.isActive()){
116
            if(conversation == null) {
117
                conversation = CdmStore.createConversation();
118
            }
119
            if(cdmEntitySession == null){
120
                cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
121
            }
122
            descriptiveDataSets = CdmStore.getService(IDescriptiveDataSetService.class).list(DescriptiveDataSet.class, null, null, null, null);
123
            viewer.setInput(descriptiveDataSets);
124
        }
125
    }
126

    
127
    public void addDescriptiveDataSet(DescriptiveDataSet descriptiveDataSetSet){
128
        descriptiveDataSets.add(descriptiveDataSetSet);
129
        refresh();
130
    }
131

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

    
137
    public void refresh(){
138
        refresh(false);
139
    }
140

    
141
    public void refresh(boolean reloadDescriptiveDataSets){
142
        if(reloadDescriptiveDataSets){
143
            cdmEntitySession.dispose();
144
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
145
            IDescriptiveDataSetService service = CdmStore.getService(IDescriptiveDataSetService.class);
146
            descriptiveDataSets = service.list(DescriptiveDataSet.class, null, null, null, null);
147
        }
148
        viewer.setInput(descriptiveDataSets);
149
        viewer.refresh();
150
    }
151

    
152
    /**
153
     * {@inheritDoc}
154
     */
155
    @Override
156
    public void update(CdmDataChangeMap arg0) {
157
    }
158

    
159
    /**
160
     * {@inheritDoc}
161
     */
162
    @Override
163
    public ICdmEntitySession getCdmEntitySession() {
164
        return cdmEntitySession;
165
    }
166

    
167
    /**
168
     * {@inheritDoc}
169
     */
170
    @Override
171
    public <T extends CdmBase> Collection<T> getRootEntities() {
172
        return null;
173
    }
174

    
175
    /**
176
     * {@inheritDoc}
177
     */
178
    @Override
179
    public Map<Object, List<String>> getPropertyPathsMap() {
180
        return null;
181
    }
182

    
183
    /**
184
     * {@inheritDoc}
185
     */
186
    @Override
187
    public ConversationHolder getConversationHolder() {
188
        return conversation;
189
    }
190

    
191
    /** {@inheritDoc} */
192
    @PreDestroy
193
    public void dispose() {
194
        if (conversation != null) {
195
            conversation.close();
196
            conversation = null;
197
        }
198
        if(cdmEntitySession != null) {
199
            cdmEntitySession.dispose();
200
            cdmEntitySession = null;
201
        }
202
    }
203

    
204
    /** {@inheritDoc} */
205
    @Focus
206
    public void setFocus() {
207
        if (getConversationHolder() != null) {
208
            getConversationHolder().bind();
209
        }
210
        if(cdmEntitySession != null) {
211
            cdmEntitySession.bind();
212
        }
213
    }
214

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

    
222
    }
223

    
224
    /**
225
     * {@inheritDoc}
226
     */
227
    @Override
228
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
229
    }
230

    
231
    /**
232
     * {@inheritDoc}
233
     */
234
    @Override
235
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
236
        if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
237
            init();
238
        }
239
    }
240

    
241
    /**
242
     * {@inheritDoc}
243
     */
244
    @Override
245
    public void contextRefresh(IProgressMonitor monitor) {
246
    }
247

    
248
    /**
249
     * {@inheritDoc}
250
     */
251
    @Override
252
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
253
    }
254

    
255
}
(3-3/4)