Project

General

Profile

Download (7.64 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.AbstractUtility;
46
import eu.etaxonomy.taxeditor.model.IContextListener;
47
import eu.etaxonomy.taxeditor.session.ICdmEntitySession;
48
import eu.etaxonomy.taxeditor.session.ICdmEntitySessionEnabled;
49
import eu.etaxonomy.taxeditor.store.CdmStore;
50

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

    
58
    private ListViewer viewer;
59

    
60
    @Inject
61
    private ESelectionService selService;
62

    
63
    private ISelectionChangedListener selectionChangedListener;
64

    
65
    private ConversationHolder conversation;
66

    
67
    private ICdmEntitySession cdmEntitySession;
68

    
69
    private List<DescriptiveDataSet> descriptiveDataSets;
70

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

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

    
93
        viewer.addDoubleClickListener(new IDoubleClickListener() {
94

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

    
105
        //propagate selection
106
       selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
107
       viewer.addSelectionChangedListener(selectionChangedListener);
108

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

    
112
        init();
113
    }
114

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

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

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

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

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

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

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

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

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

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

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

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

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

    
221
    }
222

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

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

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

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

    
254
}
(3-3/4)