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
.AbstractCdmEditorViewPart
;
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
;
30 * <p>EditorStateManager class.</p>
33 * @created Sep 30, 2010
36 public class EditorStateManager
extends ContextListenerAdapter
{
38 private static final String EDITORS
= "editors";
40 private static final String EDITOR
= "editor";
42 private TaxonEditorInputFactory inputFactory
;
45 * <p>Constructor for EditorStateManager.</p>
47 public EditorStateManager() {
48 inputFactory
= new TaxonEditorInputFactory();
52 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
56 public void contextAboutToStop(IMemento memento
, IProgressMonitor monitor
) {
57 saveEditorState(memento
);
61 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
65 public void contextStop(IMemento memento
, IProgressMonitor monitor
) {
72 private void resetConstantViews() {
73 AbstractCdmEditorViewPart descriptiveView
= (AbstractCdmEditorViewPart
) EditorUtil
.getView(DescriptiveViewPart
.ID
, false);
74 AbstractCdmEditorViewPart mediaView
= (AbstractCdmEditorViewPart
) EditorUtil
.getView(MediaViewPart
.ID
, false);
76 if(descriptiveView
!= null){
77 descriptiveView
.showEmptyPage();
80 if(mediaView
!= null){
81 mediaView
.showEmptyPage();
86 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
90 public void contextStart(IMemento memento
, IProgressMonitor monitor
) {
91 restoreEditors(memento
, monitor
);
95 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
98 public void contextRefresh(IProgressMonitor monitor
) {
99 refreshEditors(monitor
);
103 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
107 public void workbenchShutdown(IMemento memento
, IProgressMonitor monitor
) {
108 saveEditorState(memento
);
112 * Reads taxon node UUIDs from the given memento and tries to open an editor
113 * for each of the found UUIDs.
117 private void restoreEditors(final IMemento memento
, IProgressMonitor monitor
){
122 IProgressMonitor subProgressMonitor
= EditorUtil
.getSubProgressMonitor(monitor
, 1);
124 IMemento editorMementos
= memento
.getChild(EDITORS
);
125 IMemento
[] editorInputs
= editorMementos
.getChildren(EDITOR
);
127 subProgressMonitor
.beginTask("Restoring Editors", 1 + editorInputs
.length
* 2);
128 subProgressMonitor
.subTask("Restoring Editors");
129 subProgressMonitor
.worked(1);
131 for(IMemento editorInput
: editorInputs
){
132 TaxonEditorInput input
= (TaxonEditorInput
) inputFactory
.createElement(editorInput
);
133 subProgressMonitor
.worked(1);
134 if(!subProgressMonitor
.isCanceled() && input
!= null){
136 EditorUtil
.open(input
);
137 } catch (PartInitException e
) {
138 EditorUtil
.error(getClass(), "Error opening an editor window", e
);
141 subProgressMonitor
.worked(1);
143 subProgressMonitor
.done();
149 private void refreshEditors(IProgressMonitor monitor
) {
150 IProgressMonitor subProgressMonitor
= EditorUtil
.getSubProgressMonitor(monitor
, 1);
152 Set
<IEditorPart
> openEditors
= EditorUtil
.getOpenEditors();
155 subProgressMonitor
.beginTask("Refreshing Editors", openEditors
.size() * 2);
157 Set
<UUID
> uuids
= new HashSet
<UUID
>();
159 for(IEditorPart editor
: openEditors
){
160 if(editor
instanceof MultiPageTaxonEditor
){
162 uuids
.add(((TaxonEditorInput
) editor
.getEditorInput()).getTaxonNode().getUuid());
164 // ((MultiPageTaxonEditor) editor).close(false);
165 EditorUtil
.close((MultiPageTaxonEditor
)editor
);
166 subProgressMonitor
.worked(1);
167 } catch (Exception e
) {
168 // TODO Auto-generated catch block
174 for(UUID uuid
: uuids
){
176 EditorUtil
.openTaxonNode(uuid
);
177 } catch (Exception e
) {
178 // TODO Auto-generated catch block
181 subProgressMonitor
.worked(1);
184 subProgressMonitor
.done();
192 private void saveEditorState(IMemento memento
){
197 Set
<IEditorPart
> editors
= EditorUtil
.getOpenEditors();
199 IMemento editorMementos
= memento
.createChild(EDITORS
);
201 for(IEditorPart editor
: editors
){
202 IEditorInput input
= editor
.getEditorInput();
203 if(input
instanceof IPersistable
){
204 IMemento editorMemento
= editorMementos
.createChild(EDITOR
);
205 ((IPersistable
) input
).saveState(editorMemento
);