merge
[taxeditor.git] / eu.etaxonomy.taxeditor.editor / src / main / java / eu / etaxonomy / taxeditor / editor / key / KeyEditor.java
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 }