- rename IDirtyMarkableSelectionProvider to IDirtyMarkable
[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.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.model.description.PolytomousKey;
21 import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap;
22 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyGraphEditor;
23 import eu.etaxonomy.taxeditor.editor.key.polytomous.PolytomousKeyListEditor;
24 import eu.etaxonomy.taxeditor.model.DataChangeBridge;
25 import eu.etaxonomy.taxeditor.model.IDirtyMarkable;
26 import eu.etaxonomy.taxeditor.model.IPartContentHasDetails;
27 import eu.etaxonomy.taxeditor.model.MessagingUtils;
28
29 /**
30 * @author n.hoffmann
31 * @created Mar 30, 2011
32 * @version 1.0
33 */
34 public class KeyEditor extends FormEditor implements IConversationEnabled,
35 IDirtyMarkable, IPartContentHasDetails {
36
37 public static final String ID = "eu.etaxonomy.taxeditor.editor.key";
38
39 private ConversationHolder conversation;
40
41 private boolean dirty;
42
43 private KeyEditorDataChangeBehaviour dataChangeBehavior;
44
45 /*
46 * (non-Javadoc)
47 *
48 * @see org.eclipse.ui.part.EditorPart#doSave(org.eclipse.core.runtime.
49 * IProgressMonitor)
50 */
51 @Override
52 public void doSave(IProgressMonitor monitor) {
53 try {
54 monitor.beginTask("Saving Editor", 1);
55 getConversationHolder().bind();
56 getConversationHolder().commit(true);
57 setDirty(false);
58 monitor.worked(1);
59 } finally {
60 monitor.done();
61 }
62 }
63
64 /*
65 * (non-Javadoc)
66 *
67 * @see org.eclipse.ui.part.EditorPart#doSaveAs()
68 */
69 @Override
70 public void doSaveAs() {
71 // not allowed
72 }
73
74 /*
75 * (non-Javadoc)
76 *
77 * @see org.eclipse.ui.part.EditorPart#isSaveAsAllowed()
78 */
79 @Override
80 public boolean isSaveAsAllowed() {
81 return false;
82 }
83
84 @Override
85 public void setFocus() {
86 getConversationHolder().bind();
87 super.setFocus();
88 }
89 /*
90 * (non-Javadoc)
91 *
92 * @see
93 * eu.etaxonomy.cdm.persistence.hibernate.ICdmPostDataChangeObserver#update
94 * (eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap)
95 */
96 @Override
97 public void update(CdmDataChangeMap map) {
98 if(dataChangeBehavior == null){
99 dataChangeBehavior = new KeyEditorDataChangeBehaviour(this);
100 }
101 DataChangeBridge.handleDataChange(map, dataChangeBehavior);
102 }
103
104 /*
105 * (non-Javadoc)
106 *
107 * @see
108 * eu.etaxonomy.cdm.api.conversation.IConversationEnabled#getConversationHolder
109 * ()
110 */
111 @Override
112 public ConversationHolder getConversationHolder() {
113 return conversation;
114 }
115
116 /*
117 * (non-Javadoc)
118 *
119 * @see
120 * eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#changed(
121 * java.lang.Object)
122 */
123 @Override
124 public void changed(Object element) {
125 editorDirtyStateChanged();
126 IEditorPart activeEditor = getActiveEditor();
127 if (activeEditor instanceof IDirtyMarkable) {
128 ((IDirtyMarkable) activeEditor).changed(element);
129 }
130 }
131
132 /* (non-Javadoc)
133 * @see eu.etaxonomy.taxeditor.model.IDirtyMarkableSelectionProvider#forceDirty()
134 */
135 @Override
136 public void forceDirty() {
137 changed(null);
138 }
139
140 /*
141 * (non-Javadoc)
142 *
143 * @see org.eclipse.ui.forms.editor.FormEditor#editorDirtyStateChanged()
144 */
145 @Override
146 public void editorDirtyStateChanged() {
147 dirty = true;
148 super.editorDirtyStateChanged();
149 }
150
151 @Override
152 protected void handlePropertyChange(int propertyId) {
153 if (propertyId == PROP_DIRTY) {
154 setDirty(true);
155 }
156 super.handlePropertyChange(propertyId);
157 }
158
159 private void setDirty(boolean dirty) {
160 this.dirty = dirty;
161 firePropertyChange(PROP_DIRTY);
162 }
163
164 /*
165 * (non-Javadoc)
166 *
167 * @see org.eclipse.ui.forms.editor.FormEditor#isDirty()
168 */
169 @Override
170 public boolean isDirty() {
171 return dirty;
172 }
173
174 /*
175 * (non-Javadoc)
176 *
177 * @see org.eclipse.ui.forms.editor.FormEditor#dispose()
178 */
179 @Override
180 public void dispose() {
181 conversation.unregisterForDataStoreChanges(this);
182 conversation.close();
183 super.dispose();
184 }
185
186 /*
187 * (non-Javadoc)
188 *
189 * @see org.eclipse.ui.forms.editor.FormEditor#addPages()
190 */
191 @Override
192 protected void addPages() {
193 AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
194 conversation = input.getConversationHolder();
195 conversation.registerForDataStoreChanges(this);
196
197 try {
198 addPage(0, new PolytomousKeyListEditor(this), input);
199 setPageText(0, "List");
200 addPage(1, new PolytomousKeyGraphEditor(this), input);
201 setPageText(1, "Graph");
202 } catch (PartInitException e) {
203 MessagingUtils.error(getClass(), e);
204 }
205
206
207
208 setPartName();
209
210 }
211
212 /**
213 *
214 */
215 public void setPartName() {
216 AbstractIdentificationEditorInput input = (AbstractIdentificationEditorInput) getEditorInput();
217 PolytomousKey key = (PolytomousKey) input.getKey();
218 setPartName(key.getTitleCache());
219 }
220 }