3 * Copyright (C) 2007 EDIT
4 * European Distributed Institute of Taxonomy
5 * http://www.e-taxonomy.eu
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.
11 package eu
.etaxonomy
.taxeditor
.editor
;
13 import java
.util
.HashSet
;
15 import java
.util
.UUID
;
17 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
18 import org
.eclipse
.ui
.IEditorInput
;
19 import org
.eclipse
.ui
.IEditorPart
;
20 import org
.eclipse
.ui
.IMemento
;
21 import org
.eclipse
.ui
.IPersistable
;
22 import org
.eclipse
.ui
.PartInitException
;
24 import eu
.etaxonomy
.taxeditor
.editor
.view
.concept
.ConceptViewPart
;
25 import eu
.etaxonomy
.taxeditor
.editor
.view
.descriptive
.DescriptiveViewPart
;
26 import eu
.etaxonomy
.taxeditor
.editor
.view
.media
.MediaViewPart
;
27 import eu
.etaxonomy
.taxeditor
.model
.ContextListenerAdapter
;
28 import eu
.etaxonomy
.taxeditor
.model
.MessagingUtils
;
29 import eu
.etaxonomy
.taxeditor
.view
.AbstractCdmEditorViewPart
;
32 * <p>EditorStateManager class.</p>
35 * @created Sep 30, 2010
38 public class EditorStateManager
extends ContextListenerAdapter
{
40 private static final String EDITORS
= "editors";
42 private static final String EDITOR
= "editor";
44 private TaxonEditorInputFactory inputFactory
;
47 * <p>Constructor for EditorStateManager.</p>
49 public EditorStateManager() {
50 inputFactory
= new TaxonEditorInputFactory();
54 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
58 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
59 saveEditorState(memento
);
63 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
67 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
68 EditorUtil
.closeAll();
75 private void resetConstantViews() {
76 AbstractCdmEditorViewPart descriptiveView
= (AbstractCdmEditorViewPart
) EditorUtil
.getView(DescriptiveViewPart
.ID
, false);
77 AbstractCdmEditorViewPart mediaView
= (AbstractCdmEditorViewPart
) EditorUtil
.getView(MediaViewPart
.ID
, false);
78 AbstractCdmEditorViewPart conceptView
= (AbstractCdmEditorViewPart
) EditorUtil
.getView(ConceptViewPart
.ID
, false);
80 if(descriptiveView
!= null){
81 descriptiveView
.showEmptyPage();
83 if(mediaView
!= null){
84 mediaView
.showEmptyPage();
86 if(conceptView
!= null){
87 conceptView
.showEmptyPage();
92 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
96 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
97 restoreEditors(memento
, monitor
);
101 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
104 public void contextRefresh(IProgressMonitor monitor
) {
105 refreshEditors(monitor
);
109 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
113 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
114 saveEditorState(memento
);
118 * Reads taxon node UUIDs from the given memento and tries to open an editor
119 * for each of the found UUIDs.
123 private void restoreEditors(final IMemento memento
, IProgressMonitor monitor
){
128 IProgressMonitor subProgressMonitor
= EditorUtil
.getSubProgressMonitor(monitor
, 1);
130 IMemento editorMementos
= memento
.getChild(EDITORS
);
131 IMemento
[] editorInputs
= editorMementos
.getChildren(EDITOR
);
133 subProgressMonitor
.beginTask("Restoring Editors", 1 + editorInputs
.length
* 2);
134 subProgressMonitor
.subTask("Restoring Editors");
135 subProgressMonitor
.worked(1);
137 for(IMemento editorInput
: editorInputs
){
138 TaxonEditorInput input
= (TaxonEditorInput
) inputFactory
.createElement(editorInput
);
139 subProgressMonitor
.worked(1);
140 if(!subProgressMonitor
.isCanceled() && input
!= null){
142 EditorUtil
.open(input
);
143 } catch (PartInitException e
) {
144 MessagingUtils
.error(getClass(), "Error opening an editor window", e
);
147 subProgressMonitor
.worked(1);
149 subProgressMonitor
.done();
155 private void refreshEditors(IProgressMonitor monitor
) {
156 IProgressMonitor subProgressMonitor
= EditorUtil
.getSubProgressMonitor(monitor
, 1);
158 Set
<IEditorPart
> openEditors
= EditorUtil
.getOpenEditors();
161 subProgressMonitor
.beginTask("Refreshing Editors", openEditors
.size() * 2);
163 Set
<UUID
> uuids
= new HashSet
<UUID
>();
165 for(IEditorPart editor
: openEditors
){
166 if(editor
instanceof MultiPageTaxonEditor
){
168 uuids
.add(((TaxonEditorInput
) editor
.getEditorInput()).getTaxonNode().getUuid());
170 // ((MultiPageTaxonEditor) editor).close(false);
171 EditorUtil
.close((MultiPageTaxonEditor
)editor
);
172 subProgressMonitor
.worked(1);
173 } catch (Exception e
) {
174 // TODO Auto-generated catch block
180 for(UUID uuid
: uuids
){
182 EditorUtil
.openTaxonNode(uuid
);
183 } catch (Exception e
) {
184 // TODO Auto-generated catch block
187 subProgressMonitor
.worked(1);
190 subProgressMonitor
.done();
198 private void saveEditorState(IMemento memento
){
203 Set
<IEditorPart
> editors
= EditorUtil
.getOpenEditors();
205 IMemento editorMementos
= memento
.createChild(EDITORS
);
207 for(IEditorPart editor
: editors
){
208 IEditorInput input
= editor
.getEditorInput();
209 if(input
instanceof IPersistable
){
210 IMemento editorMemento
= editorMementos
.createChild(EDITOR
);
211 ((IPersistable
) input
).saveState(editorMemento
);