Project

General

Profile

Download (6.8 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.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.ListViewer;
34
import org.eclipse.swt.widgets.Composite;
35
import org.eclipse.ui.IMemento;
36

    
37
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
38
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
39
import eu.etaxonomy.cdm.api.service.IWorkingSetService;
40
import eu.etaxonomy.cdm.model.common.CdmBase;
41
import eu.etaxonomy.cdm.model.description.WorkingSet;
42
import eu.etaxonomy.cdm.persistence.dto.UuidAndTitleCache;
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
import eu.etaxonomy.taxeditor.ui.UuidAndTitleCacheLabelProvider;
51

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

    
59
    private ListViewer viewer;
60

    
61
    @Inject
62
    private ESelectionService selService;
63

    
64
    private ISelectionChangedListener selectionChangedListener;
65

    
66
    private ConversationHolder conversation;
67

    
68
    private ICdmEntitySession cdmEntitySession;
69

    
70
    private List<UuidAndTitleCache<WorkingSet>> workingSets;
71

    
72
    public WorkingSetNavigator() {
73
        CdmStore.getContextManager().addContextListener(this);
74
    }
75

    
76
    @PostConstruct
77
    public void create(Composite parent, EPartService partService, EModelService modelService, MApplication application,
78
            EMenuService menuService){
79
        viewer = new ListViewer(parent);
80
        viewer.setContentProvider(new ArrayContentProvider());
81
        viewer.setLabelProvider(new UuidAndTitleCacheLabelProvider());
82

    
83
        viewer.addDoubleClickListener(new IDoubleClickListener() {
84

    
85
            @Override
86
            public void doubleClick(DoubleClickEvent event) {
87
                ISelection selection = event.getSelection();
88
                if(selection instanceof IStructuredSelection){
89
                    UuidAndTitleCache<WorkingSet> workingSetUuid = (UuidAndTitleCache<WorkingSet>) ((IStructuredSelection) selection).getFirstElement();
90
                    EditorUtil.openWorkingSetEditor(workingSetUuid.getUuid(), modelService, partService, application);
91
                }
92
            }
93
        });
94

    
95
        //propagate selection
96
       selectionChangedListener = (event -> selService.setSelection(AbstractUtility.getElementsFromSelectionChangedEvent(event)));
97
       viewer.addSelectionChangedListener(selectionChangedListener);
98

    
99
        //create context menu
100
        menuService.registerContextMenu(viewer.getControl(), "eu.etaxonomy.taxeditor.editor.popupmenu.workingSetNavigator");
101

    
102
        init();
103
    }
104

    
105
    public void init(){
106
        if (CdmStore.isActive()){
107
            if(conversation == null) {
108
                conversation = CdmStore.createConversation();
109
            }
110
            cdmEntitySession = CdmStore.getCurrentSessionManager().newSession(this, true);
111
            workingSets = CdmStore.getService(IWorkingSetService.class).getUuidAndTitleCache(null, null);
112
            viewer.setInput(workingSets);
113
        }
114
    }
115

    
116
    public void addWorkingSet(WorkingSet workingSet){
117
        workingSets.add(new UuidAndTitleCache<>(workingSet.getUuid(), workingSet.getTitleCache()));
118
        refresh();
119
    }
120

    
121
    public void removeWorkingSet(UuidAndTitleCache<WorkingSet> workingSet){
122
        workingSets.remove(workingSet);
123
        refresh();
124
    }
125

    
126
    public void refresh(){
127
        viewer.setInput(workingSets);
128
        viewer.refresh();
129
    }
130

    
131
    /**
132
     * {@inheritDoc}
133
     */
134
    @Override
135
    public void update(CdmDataChangeMap arg0) {
136
    }
137

    
138
    /**
139
     * {@inheritDoc}
140
     */
141
    @Override
142
    public ICdmEntitySession getCdmEntitySession() {
143
        return cdmEntitySession;
144
    }
145

    
146
    /**
147
     * {@inheritDoc}
148
     */
149
    @Override
150
    public <T extends CdmBase> Collection<T> getRootEntities() {
151
        return null;
152
    }
153

    
154
    /**
155
     * {@inheritDoc}
156
     */
157
    @Override
158
    public Map<Object, List<String>> getPropertyPathsMap() {
159
        return null;
160
    }
161

    
162
    /**
163
     * {@inheritDoc}
164
     */
165
    @Override
166
    public ConversationHolder getConversationHolder() {
167
        return conversation;
168
    }
169

    
170
    /** {@inheritDoc} */
171
    @PreDestroy
172
    public void dispose() {
173
        if (conversation != null) {
174
            conversation.close();
175
            conversation = null;
176
        }
177
        if(cdmEntitySession != null) {
178
            cdmEntitySession.dispose();
179
            cdmEntitySession = null;
180
        }
181
    }
182

    
183
    /** {@inheritDoc} */
184
    @Focus
185
    public void setFocus() {
186
        if (getConversationHolder() != null) {
187
            getConversationHolder().bind();
188
        }
189
        if(cdmEntitySession != null) {
190
            cdmEntitySession.bind();
191
        }
192
    }
193

    
194
    /**
195
     * {@inheritDoc}
196
     */
197
    @Override
198
    public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
199
        // TODO Auto-generated method stub
200

    
201
    }
202

    
203
    /**
204
     * {@inheritDoc}
205
     */
206
    @Override
207
    public void contextStop(IMemento memento, IProgressMonitor monitor) {
208
    }
209

    
210
    /**
211
     * {@inheritDoc}
212
     */
213
    @Override
214
    public void contextStart(IMemento memento, IProgressMonitor monitor) {
215
        if(viewer!=null && viewer.getControl()!=null && !viewer.getControl().isDisposed()){
216
            init();
217
        }
218
    }
219

    
220
    /**
221
     * {@inheritDoc}
222
     */
223
    @Override
224
    public void contextRefresh(IProgressMonitor monitor) {
225
    }
226

    
227
    /**
228
     * {@inheritDoc}
229
     */
230
    @Override
231
    public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
232
    }
233

    
234
}
(4-4/4)