Project

General

Profile

Download (6.66 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
 * Copyright (C) 2007 EDIT
3
 * European Distributed Institute of Taxonomy
4
 * http://www.e-taxonomy.eu
5
 *
6
 * The contents of this file are subject to the Mozilla Public License Version 1.1
7
 * See LICENSE.TXT at the top of this package for the full license terms.
8
 */
9

    
10
package eu.etaxonomy.taxeditor.editor.key.e4;
11

    
12
import org.eclipse.core.runtime.IProgressMonitor;
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.forms.editor.FormEditor;
18

    
19
import eu.etaxonomy.cdm.api.application.CdmApplicationState;
20
import eu.etaxonomy.cdm.api.application.CdmChangeEvent;
21
import eu.etaxonomy.cdm.api.application.ICdmChangeListener;
22
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
23
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
24
import eu.etaxonomy.cdm.model.common.CdmBase;
25
import eu.etaxonomy.cdm.model.description.PolytomousKey;
26
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
27
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
28
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
29
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
30
import eu.etaxonomy.taxeditor.editor.l10n.Messages;
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 KeyEditorE4 extends FormEditor implements IConversationEnabled,
42
		IDirtyMarkable, IPartContentHasDetails, ICdmChangeListener {
43

    
44
	public static final String ID = "eu.etaxonomy.taxeditor.editor.key"; //$NON-NLS-1$
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(Messages.KeyEditor_SAVING, 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
	    if (element != null){
152
	        editorDirtyStateChanged();
153
	    }
154
		IEditorPart activeEditor = getActiveEditor();
155
		if (activeEditor instanceof IDirtyMarkable) {
156
			((IDirtyMarkable) activeEditor).changed(element);
157
		}
158
	}
159

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

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

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

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

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

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

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

    
226
		try {
227
			addPage(0, new PolytomousKeyListEditor(this), polytomousKeyEditorInput);
228
			setPageText(0, Messages.KeyEditor_LIST);
229
			addPage(1, new PolytomousKeyGraphEditor(this), polytomousKeyEditorInput);
230
			setPageText(1, Messages.KeyEditor_GRAPH);
231
		} catch (PartInitException e) {
232
			MessagingUtils.error(getClass(), e);
233
		}
234

    
235

    
236

    
237
		setPartName();
238

    
239
	}
240

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

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