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