Add remoting operation / handlers for key list editor
[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().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 }