Project

General

Profile

Download (6.12 KB) Statistics
| Branch: | Tag: | Revision:
1
package eu.etaxonomy.taxeditor.editor.view.derivate;
2

    
3
import org.eclipse.core.runtime.IProgressMonitor;
4
import org.eclipse.jface.action.MenuManager;
5
import org.eclipse.jface.viewers.AbstractTreeViewer;
6
import org.eclipse.jface.viewers.StructuredSelection;
7
import org.eclipse.jface.viewers.TreeViewer;
8
import org.eclipse.swt.SWT;
9
import org.eclipse.swt.widgets.Composite;
10
import org.eclipse.swt.widgets.Control;
11
import org.eclipse.swt.widgets.Menu;
12
import org.eclipse.swt.widgets.Tree;
13
import org.eclipse.ui.IEditorInput;
14
import org.eclipse.ui.IEditorPart;
15
import org.eclipse.ui.IEditorSite;
16
import org.eclipse.ui.PartInitException;
17
import org.eclipse.ui.part.EditorPart;
18

    
19
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
20
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
21
import eu.etaxonomy.cdm.model.occurrence.SpecimenOrObservationBase;
22
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
23
import eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider;
24
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
25
import eu.etaxonomy.taxeditor.model.IPartContentHasFactualData;
26
import eu.etaxonomy.taxeditor.model.IPartContentHasSupplementalData;
27
import eu.etaxonomy.taxeditor.view.derivateSearch.DerivateLabelProvider;
28

    
29
/**
30
 * Displays the derivate hierarchy of all derivates belonging to a taxon.
31
 *
32
 */
33
public class DerivateView extends EditorPart implements IPartContentHasFactualData, IDirtyMarkableSelectionProvider, IConversationEnabled, IPartContentHasDetails, IPartContentHasSupplementalData {
34

    
35
	/** Constant <code>ID="eu.etaxonomy.taxeditor.editor.view.desc"{trunked}</code> */
36
	public static final String ID = "eu.etaxonomy.taxeditor.editor.view.derivate.DerivateView";
37

    
38
	private ConversationHolder conversation;
39

    
40
	protected TreeViewer viewer;
41

    
42
    private boolean isDirty;
43

    
44
    /* (non-Javadoc)
45
     * @see org.eclipse.ui.part.WorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite)
46
     */
47
    @Override
48
    public void createPartControl(Composite parent) {
49
        viewer = new TreeViewer(new Tree(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION));
50
        viewer.setContentProvider(new DerivateContentProvider());
51
        viewer.setLabelProvider(new DerivateLabelProvider());
52
        viewer.setAutoExpandLevel(AbstractTreeViewer.ALL_LEVELS);
53
        // Propagate selection from viewer
54
        getSite().setSelectionProvider(viewer);
55

    
56
        //create context menu
57
        MenuManager menuManager = new MenuManager();
58

    
59
        getSite().registerContextMenu(menuManager, viewer);
60

    
61
        Control control = viewer.getControl();
62
        Menu menu = menuManager.createContextMenu(control);
63

    
64
        control.setMenu(menu);
65

    
66
        IEditorInput editorInput = getEditorInput();
67
        viewer.setInput(editorInput);
68
        if(editorInput instanceof DerivateViewEditorInput){
69
            SpecimenOrObservationBase<?> specimen = ((DerivateViewEditorInput) editorInput).getDerivate();
70
            SpecimenOrObservationBase rootElement = ((DerivateViewEditorInput) editorInput).getRootElement();
71
            setPartName(rootElement.toString());
72
            viewer.setSelection(new StructuredSelection(specimen));
73
        }
74
    }
75

    
76
    /* (non-Javadoc)
77
     * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.IProgressMonitor)
78
     */
79
    @Override
80
    public void doSave(IProgressMonitor monitor) {
81
        monitor.beginTask("Saving Derivates", 3);
82
        if (!conversation.isBound()) {
83
            conversation.bind();
84
        }
85
        monitor.worked(1);
86

    
87
        // commit the conversation and start a new transaction immediately
88
        conversation.commit(true);
89
        monitor.worked(1);
90

    
91
        this.setDirty(false);
92
        monitor.worked(1);
93
        monitor.done();
94
        firePropertyChange(PROP_DIRTY);
95
    }
96

    
97
    /* (non-Javadoc)
98
     * @see org.eclipse.ui.part.EditorPart#doSaveAs()
99
     */
100
    @Override
101
    public void doSaveAs() {
102
        // TODO Auto-generated method stub
103

    
104
    }
105

    
106
    /* (non-Javadoc)
107
     * @see org.eclipse.ui.part.EditorPart#getTitleToolTip()
108
     */
109
    @Override
110
    public String getTitleToolTip() {
111
        return "Derivate View";
112
    }
113

    
114
    /* (non-Javadoc)
115
     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite, org.eclipse.ui.IEditorInput)
116
     */
117
    @Override
118
    public void init(IEditorSite site, IEditorInput input) throws PartInitException {
119
        setSite(site);
120
        setInput(input);
121
        if(input instanceof DerivateViewEditorInput){
122
            conversation = ((DerivateViewEditorInput) input).getConversationHolder();
123
        }
124
    }
125

    
126
    /* (non-Javadoc)
127
     * @see org.eclipse.ui.part.EditorPart#isDirty()
128
     */
129
    @Override
130
    public boolean isDirty() {
131
        return isDirty;
132
    }
133

    
134
    /**
135
     * @param isDirty the isDirty to set
136
     */
137
    public void setDirty(boolean isDirty) {
138
        this.isDirty = isDirty;
139
    }
140

    
141
    /* (non-Javadoc)
142
     * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
143
     */
144
    @Override
145
    public boolean isSaveAsAllowed() {
146
        // TODO Auto-generated method stub
147
        return false;
148
    }
149

    
150

    
151
    /* (non-Javadoc)
152
     * @see org.eclipse.ui.part.WorkbenchPart#setFocus()
153
     */
154
    @Override
155
    public void setFocus() {
156
        //make sure to bind again if maybe in another view the conversation was unbound
157
        if(!conversation.isBound()){
158
            conversation.bind();
159
        }
160
    }
161

    
162
    /* (non-Javadoc)
163
     * @see eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update(eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
164
     */
165
    @Override
166
    public void update(CdmDataChangeMap changeEvents) {
167
        // TODO Auto-generated method stub
168

    
169
    }
170

    
171
    /* (non-Javadoc)
172
     * @see eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder()
173
     */
174
    @Override
175
    public ConversationHolder getConversationHolder() {
176
        return conversation;
177
    }
178

    
179
    /* (non-Javadoc)
180
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(java.lang.Object)
181
     */
182
    @Override
183
    public void changed(Object element) {
184
        viewer.setInput(getEditorInput());
185
        setDirty(true);
186
        firePropertyChange(IEditorPart.PROP_DIRTY);
187
    }
188

    
189
}
(4-4/5)