Project

General

Profile

Download (6.47 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().bind();
111
		polytomousKeyEditorInput.bind();
112
		super.setFocus();
113
	}
114
	/*
115
	 * (non-Javadoc)
116
	 *
117
	 * @see
118
	 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
119
	 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
120
	 */
121
	@Override
122
	public void update(CdmDataChangeMap map) {
123
		if(dataChangeBehavior == null){
124
			dataChangeBehavior = new KeyEditorDataChangeBehaviour(this);
125
		}
126
		DataChangeBridge.handleDataChange(map, dataChangeBehavior);
127
	}
128

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

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

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

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

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

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

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

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

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

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

    
232

    
233

    
234
		setPartName();
235

    
236
	}
237

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

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