3 * Copyright (C) 2015 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
10 package eu
.etaxonomy
.taxeditor
.view
.derivative
;
12 import java
.util
.Collection
;
14 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
15 import org
.eclipse
.core
.runtime
.NullProgressMonitor
;
16 import org
.eclipse
.jface
.action
.MenuManager
;
17 import org
.eclipse
.jface
.viewers
.AbstractTreeViewer
;
18 import org
.eclipse
.jface
.viewers
.ISelection
;
19 import org
.eclipse
.jface
.viewers
.IStructuredSelection
;
20 import org
.eclipse
.jface
.viewers
.TreeViewer
;
21 import org
.eclipse
.jface
.viewers
.Viewer
;
22 import org
.eclipse
.swt
.SWT
;
23 import org
.eclipse
.swt
.layout
.GridData
;
24 import org
.eclipse
.swt
.widgets
.Composite
;
25 import org
.eclipse
.swt
.widgets
.Control
;
26 import org
.eclipse
.swt
.widgets
.Menu
;
27 import org
.eclipse
.swt
.widgets
.Tree
;
28 import org
.eclipse
.ui
.ISaveablePart2
;
29 import org
.eclipse
.ui
.ISelectionService
;
30 import org
.eclipse
.ui
.IWorkbenchPart
;
32 import eu
.etaxonomy
.cdm
.api
.conversation
.ConversationHolder
;
33 import eu
.etaxonomy
.cdm
.api
.service
.IOccurrenceService
;
34 import eu
.etaxonomy
.cdm
.model
.occurrence
.SpecimenOrObservationBase
;
35 import eu
.etaxonomy
.cdm
.model
.taxon
.Taxon
;
36 import eu
.etaxonomy
.taxeditor
.model
.IPartContentHasDetails
;
37 import eu
.etaxonomy
.taxeditor
.store
.CdmStore
;
38 import eu
.etaxonomy
.taxeditor
.view
.AbstractCdmViewPart
;
39 import eu
.etaxonomy
.taxeditor
.view
.derivateSearch
.DerivateContentProvider
;
40 import eu
.etaxonomy
.taxeditor
.view
.derivateSearch
.DerivateLabelProvider
;
47 public class OccurrenceView
extends AbstractCdmViewPart
implements IPartContentHasDetails
, ISaveablePart2
{
49 public static String ID
= "eu.etaxonomy.taxeditor.view.derivative.OccurrenceView";
51 private TreeViewer viewer
;
52 private DerivateContentProvider contentProvider
;
53 private DerivateLabelProvider labelProvider
;
55 private ISelectionService selectionService
;
57 private ConversationHolder conversation
;
59 private boolean dirty
;
62 public OccurrenceView() {
63 if(conversation
==null && CdmStore
.isActive()){
64 conversation
= CdmStore
.createConversation();
72 public void createPartControl(Composite parent
) {
74 //listen to selection changes
75 selectionService
= getSite().getWorkbenchWindow().getSelectionService();
76 selectionService
.addSelectionListener(this);
79 viewer
= new TreeViewer(new Tree(parent
, SWT
.MULTI
| SWT
.H_SCROLL
| SWT
.V_SCROLL
| SWT
.FULL_SELECTION
));
80 GridData gridDataTree
= new GridData();
81 gridDataTree
.horizontalAlignment
= GridData
.FILL
;
82 gridDataTree
.verticalAlignment
= GridData
.FILL
;
83 gridDataTree
.grabExcessVerticalSpace
= true;
84 gridDataTree
.grabExcessHorizontalSpace
= true;
85 viewer
.getTree().setLayoutData(gridDataTree
);
86 contentProvider
= new DerivateContentProvider();
87 viewer
.setContentProvider(contentProvider
);
88 labelProvider
= new DerivateLabelProvider();
89 viewer
.setLabelProvider(labelProvider
);
90 viewer
.setAutoExpandLevel(AbstractTreeViewer
.ALL_LEVELS
);
91 // Propagate selection from viewer
92 getSite().setSelectionProvider(viewer
);
95 MenuManager menuManager
= new MenuManager();
96 getSite().registerContextMenu(menuManager
, viewer
);
97 Control control
= viewer
.getControl();
98 Menu menu
= menuManager
.createContextMenu(control
);
99 control
.setMenu(menu
);
107 public void setFocus() {
108 if(!conversation
.isBound()){
117 public void dispose() {
118 selectionService
.removeSelectionListener(this);
119 if(conversation
!=null){
120 conversation
.close();
128 public void selectionChanged(IWorkbenchPart part
, ISelection selection
) {
129 if(selection
instanceof IStructuredSelection
){
130 Object selectedElement
= ((IStructuredSelection
) selection
).getFirstElement();
131 if(selectedElement
instanceof Taxon
){
132 Collection
<SpecimenOrObservationBase
> fieldUnits
= CdmStore
.getService(IOccurrenceService
.class).listFieldUnitsByAssociatedTaxon((Taxon
) selectedElement
, null, null);
133 viewer
.setInput(fieldUnits
);
139 public boolean onComplete() {
144 public Viewer
getViewer() {
149 public void createViewer(Composite parent
) {
153 public void changed(Object object
) {
155 firePropertyChange(PROP_DIRTY
);
159 public void doSave(IProgressMonitor monitor
) {
160 if(conversation
.isBound()){
161 // input.merge(); TODO remote merging
162 conversation
.commit(true);
165 firePropertyChange(PROP_DIRTY
);
169 public void doSaveAs() {
170 doSave(new NullProgressMonitor());
174 public boolean isDirty() {
179 public boolean isSaveAsAllowed() {
184 public boolean isSaveOnCloseNeeded() {
189 public int promptToSaveOnClose() {
190 return ISaveablePart2
.DEFAULT
;