Project

General

Profile

Download (6.51 KB) Statistics
| Branch: | Tag: | Revision:
1
// $Id$
2
/**
3
 * Copyright (C) 2007 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

    
11
package eu.etaxonomy.taxeditor.editor.key;
12

    
13
import org.eclipse.core.runtime.IProgressMonitor;
14
import org.eclipse.ui.IEditorInput;
15
import org.eclipse.ui.IEditorPart;
16
import org.eclipse.ui.IEditorSite;
17
import org.eclipse.ui.PartInitException;
18
import org.eclipse.ui.forms.editor.FormEditor;
19

    
20
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
21
import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
22
import eu.etaxonomy.cdm.api.application.ICdmChangeListener;
23
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
24
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
25
import eu.etaxonomy.cdm.model.common.CdmBase;
26
import eu.etaxonomy.cdm.model.description.PolytomousKey;
27
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
28
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
29
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
30
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
31
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
32
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
33
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
34
import eu.etaxonomy.taxeditor.model.MessagingUtils;
35

    
36
/**
37
 * @author n.hoffmann
38
 * @created Mar 30, 2011
39
 * @version 1.0
40
 */
41
public class KeyEditor extends FormEditor implements IConversationEnabled,
42
		IDirtyMarkable, IPartContentHasDetails, ICdmChangeListener {
43

    
44
	public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
45

    
46
	private ConversationHolder conversation;
47

    
48
	private boolean dirty;
49

    
50
	private KeyEditorDataChangeBehaviour dataChangeBehavior;
51

    
52
	private PolytomousKeyEditorInput polytomousKeyEditorInput;
53

    
54
	/*
55
     * (non-Javadoc)
56
     *
57
     * @see org.eclipse.ui.part.EditorPart#init(org.eclipse.ui.IEditorSite,
58
     * org.eclipse.ui.IEditorInput)
59
     */
60
    @Override
61
    public void init(IEditorSite site, IEditorInput input)
62
            throws PartInitException {
63
        polytomousKeyEditorInput = (PolytomousKeyEditorInput)input;
64
        CdmApplicationState.getCurrentDataChangeService().register(this);
65
        super.init(site, input);
66
    }
67

    
68
	/*
69
	 * (non-Javadoc)
70
	 *
71
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
72
	 * IProgressMonitor)
73
	 */
74
	@Override
75
	public void doSave(IProgressMonitor monitor) {
76
		try {
77
			monitor.beginTask("Saving Editor", 1);
78
			getConversationHolder().bind();
79
			getConversationHolder().commit(true);
80
			polytomousKeyEditorInput.merge();
81
			setDirty(false);
82
			monitor.worked(1);
83
		} finally {
84
			monitor.done();
85
		}
86
	}
87

    
88
	/*
89
	 * (non-Javadoc)
90
	 *
91
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
92
	 */
93
	@Override
94
	public void doSaveAs() {
95
		// not allowed
96
	}
97

    
98
	/*
99
	 * (non-Javadoc)
100
	 *
101
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
102
	 */
103
	@Override
104
	public boolean isSaveAsAllowed() {
105
		return false;
106
	}
107

    
108
	@Override
109
	public void setFocus() {
110
		getConversationHolder().commit(true);
111
		getConversationHolder().bind();
112
		polytomousKeyEditorInput.bind();
113
		super.setFocus();
114
	}
115
	/*
116
	 * (non-Javadoc)
117
	 *
118
	 * @see
119
	 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
120
	 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
121
	 */
122
	@Override
123
	public void update(CdmDataChangeMap map) {
124
		if(dataChangeBehavior == null){
125
			dataChangeBehavior = new KeyEditorDataChangeBehaviour(this);
126
		}
127
		DataChangeBridge.handleDataChange(map, dataChangeBehavior);
128
	}
129

    
130
	/*
131
	 * (non-Javadoc)
132
	 *
133
	 * @see
134
	 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
135
	 * ()
136
	 */
137
	@Override
138
	public ConversationHolder getConversationHolder() {
139
		return conversation;
140
	}
141

    
142
	/*
143
	 * (non-Javadoc)
144
	 *
145
	 * @see
146
	 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
147
	 * java.lang.Object)
148
	 */
149
	@Override
150
	public void changed(Object element) {
151
		editorDirtyStateChanged();
152
		IEditorPart activeEditor = getActiveEditor();
153
		if (activeEditor instanceof IDirtyMarkable) {
154
			((IDirtyMarkable) activeEditor).changed(element);
155
		}
156
	}
157

    
158
    /* (non-Javadoc)
159
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
160
     */
161
    @Override
162
    public void forceDirty() {
163
        changed(null);
164
    }
165

    
166
	/*
167
	 * (non-Javadoc)
168
	 *
169
	 * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
170
	 */
171
	@Override
172
	public void editorDirtyStateChanged() {
173
		dirty = true;
174
		super.editorDirtyStateChanged();
175
	}
176

    
177
	@Override
178
	protected void handlePropertyChange(int propertyId) {
179
		if (propertyId == PROP_DIRTY) {
180
			setDirty(true);
181
		}
182
		super.handlePropertyChange(propertyId);
183
	}
184

    
185
	private void setDirty(boolean dirty) {
186
		this.dirty = dirty;
187
		firePropertyChange(PROP_DIRTY);
188
	}
189

    
190
	/*
191
	 * (non-Javadoc)
192
	 *
193
	 * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
194
	 */
195
	@Override
196
	public boolean isDirty() {
197
		return dirty;
198
	}
199

    
200
	/*
201
	 * (non-Javadoc)
202
	 *
203
	 * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
204
	 */
205
	@Override
206
	public void dispose() {
207
		conversation.unregisterForDataStoreChanges(this);
208
		conversation.close();
209
		polytomousKeyEditorInput.dispose();
210
		CdmApplicationState.getCurrentDataChangeService().unregister(this);
211
		super.dispose();
212
	}
213

    
214
	/*
215
	 * (non-Javadoc)
216
	 *
217
	 * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
218
	 */
219
	@Override
220
	protected void addPages() {
221
		conversation = polytomousKeyEditorInput.getConversationHolder();
222
		conversation.registerForDataStoreChanges(this);
223

    
224
		try {
225
			addPage(0, new PolytomousKeyListEditor(this), polytomousKeyEditorInput);
226
			setPageText(0, "List");
227
			addPage(1, new PolytomousKeyGraphEditor(this), polytomousKeyEditorInput);
228
			setPageText(1, "Graph");
229
		} catch (PartInitException e) {
230
			MessagingUtils.error(getClass(), e);
231
		}
232

    
233

    
234

    
235
		setPartName();
236

    
237
	}
238

    
239
	/**
240
	 *
241
	 */
242
	public void setPartName() {
243
		PolytomousKey key = polytomousKeyEditorInput.getKey();
244
		setPartName(key.getTitleCache());
245
	}
246

    
247
    /* (non-Javadoc)
248
     * @see eu.etaxonomy.cdm.api.application.ICdmChangeListener#onChange(eu.etaxonomy.cdm.api.application.CdmChangeEvent)
249
     */
250
    @Override
251
    public void onChange(CdmChangeEvent event) {
252
        editorDirtyStateChanged();
253
        IEditorPart activeEditor = getActiveEditor();
254
        if (activeEditor instanceof IDirtyMarkable) {
255
            for(CdmBase cdmBase : event.getChangedObjects()) {
256
                ((IDirtyMarkable) activeEditor).changed(cdmBase);
257
            }
258
        }
259
    }
260
}
(3-3/4)