Project

General

Profile

Download (5.34 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.IEditorPart;
15
import org.eclipse.ui.PartInitException;
16
import org.eclipse.ui.forms.editor.FormEditor;
17

    
18
import eu.etaxonomy.cdm.api.conversation.ConversationHolder;
19
import eu.etaxonomy.cdm.api.conversation.IConversationEnabled;
20
import eu.etaxonomy.cdm.api.service.IPolytomousKeyService;
21
import eu.etaxonomy.cdm.model.description.PolytomousKey;
22
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
23
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyEditorInput;
24
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
25
import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
26
import eu.etaxonomy.taxeditor.model.DataChangeBridge;
27
import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
28
import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
29
import eu.etaxonomy.taxeditor.model.MessagingUtils;
30
import eu.etaxonomy.taxeditor.store.CdmStore;
31

    
32
/**
33
 * @author n.hoffmann
34
 * @created Mar 30, 2011
35
 * @version 1.0
36
 */
37
public class KeyEditor extends FormEditor implements IConversationEnabled,
38
		IDirtyMarkable, IPartContentHasDetails {
39

    
40
	public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
41

    
42
	private ConversationHolder conversation;
43

    
44
	private boolean dirty;
45

    
46
	private KeyEditorDataChangeBehaviour dataChangeBehavior;
47

    
48
	/*
49
	 * (non-Javadoc)
50
	 *
51
	 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
52
	 * IProgressMonitor)
53
	 */
54
	@Override
55
	public void doSave(IProgressMonitor monitor) {
56
		try {
57
			monitor.beginTask("Saving Editor", 1);
58
			getConversationHolder().bind();
59
			getConversationHolder().commit(true);
60
			CdmStore.getService(IPolytomousKeyService.class).merge(((PolytomousKeyEditorInput)getEditorInput()).getKey());
61
			setDirty(false);
62
			monitor.worked(1);
63
		} finally {
64
			monitor.done();
65
		}
66
	}
67

    
68
	/*
69
	 * (non-Javadoc)
70
	 *
71
	 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
72
	 */
73
	@Override
74
	public void doSaveAs() {
75
		// not allowed
76
	}
77

    
78
	/*
79
	 * (non-Javadoc)
80
	 *
81
	 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
82
	 */
83
	@Override
84
	public boolean isSaveAsAllowed() {
85
		return false;
86
	}
87

    
88
	@Override
89
	public void setFocus() {
90
		getConversationHolder().bind();
91
		super.setFocus();
92
	}
93
	/*
94
	 * (non-Javadoc)
95
	 *
96
	 * @see
97
	 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
98
	 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
99
	 */
100
	@Override
101
	public void update(CdmDataChangeMap map) {
102
		if(dataChangeBehavior == null){
103
			dataChangeBehavior = new KeyEditorDataChangeBehaviour(this);
104
		}
105
		DataChangeBridge.handleDataChange(map, dataChangeBehavior);
106
	}
107

    
108
	/*
109
	 * (non-Javadoc)
110
	 *
111
	 * @see
112
	 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
113
	 * ()
114
	 */
115
	@Override
116
	public ConversationHolder getConversationHolder() {
117
		return conversation;
118
	}
119

    
120
	/*
121
	 * (non-Javadoc)
122
	 *
123
	 * @see
124
	 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
125
	 * java.lang.Object)
126
	 */
127
	@Override
128
	public void changed(Object element) {
129
		editorDirtyStateChanged();
130
		IEditorPart activeEditor = getActiveEditor();
131
		if (activeEditor instanceof IDirtyMarkable) {
132
			((IDirtyMarkable) activeEditor).changed(element);
133
		}
134
	}
135

    
136
    /* (non-Javadoc)
137
     * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
138
     */
139
    @Override
140
    public void forceDirty() {
141
        changed(null);
142
    }
143

    
144
	/*
145
	 * (non-Javadoc)
146
	 *
147
	 * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
148
	 */
149
	@Override
150
	public void editorDirtyStateChanged() {
151
		dirty = true;
152
		super.editorDirtyStateChanged();
153
	}
154

    
155
	@Override
156
	protected void handlePropertyChange(int propertyId) {
157
		if (propertyId == PROP_DIRTY) {
158
			setDirty(true);
159
		}
160
		super.handlePropertyChange(propertyId);
161
	}
162

    
163
	private void setDirty(boolean dirty) {
164
		this.dirty = dirty;
165
		firePropertyChange(PROP_DIRTY);
166
	}
167

    
168
	/*
169
	 * (non-Javadoc)
170
	 *
171
	 * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
172
	 */
173
	@Override
174
	public boolean isDirty() {
175
		return dirty;
176
	}
177

    
178
	/*
179
	 * (non-Javadoc)
180
	 *
181
	 * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
182
	 */
183
	@Override
184
	public void dispose() {
185
		conversation.unregisterForDataStoreChanges(this);
186
		conversation.close();
187
		super.dispose();
188
	}
189

    
190
	/*
191
	 * (non-Javadoc)
192
	 *
193
	 * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
194
	 */
195
	@Override
196
	protected void addPages() {
197
		AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
198
		conversation = input.getConversationHolder();
199
		conversation.registerForDataStoreChanges(this);
200

    
201
		try {
202
			addPage(0, new PolytomousKeyListEditor(this), input);
203
			setPageText(0, "List");
204
			addPage(1, new PolytomousKeyGraphEditor(this), input);
205
			setPageText(1, "Graph");
206
		} catch (PartInitException e) {
207
			MessagingUtils.error(getClass(), e);
208
		}
209

    
210

    
211

    
212
		setPartName();
213

    
214
	}
215

    
216
	/**
217
	 *
218
	 */
219
	public void setPartName() {
220
		AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
221
		PolytomousKey key = (PolytomousKey) input.getKey();
222
		setPartName(key.getTitleCache());
223
	}
224
}
(3-3/4)