2 * Copyright (C) 2007 EDIT
3 * European Distributed Institute of Taxonomy
4 * http://www.e-taxonomy.eu
6 * The contents of this file are subject to the Mozilla Public License Version 1.1
7 * See LICENSE.TXT at the top of this package for the full license terms.
10 package eu
.etaxonomy
.taxeditor
.editor
;
12 import java
.util
.HashSet
;
14 import java
.util
.UUID
;
16 import org
.eclipse
.core
.runtime
.IProgressMonitor
;
17 import org
.eclipse
.ui
.IEditorInput
;
18 import org
.eclipse
.ui
.IEditorPart
;
19 import org
.eclipse
.ui
.IMemento
;
20 import org
.eclipse
.ui
.IPersistable
;
21 import org
.eclipse
.ui
.PartInitException
;
23 import eu
.etaxonomy
.taxeditor
.editor
.l10n
.Messages
;
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"; //$NON-NLS-1$
42 private static final String EDITOR
= "editor"; //$NON-NLS-1$
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 String taskName
= Messages
.EditorStateManager_RESTORE_EDITORS
;
134 subProgressMonitor
.beginTask(taskName
, 1 + editorInputs
.length
* 2);
135 subProgressMonitor
.subTask(taskName
);
136 subProgressMonitor
.worked(1);
138 for(IMemento editorInput
: editorInputs
){
139 TaxonEditorInput input
= (TaxonEditorInput
) inputFactory
.createElement(editorInput
);
140 subProgressMonitor
.worked(1);
141 if(!subProgressMonitor
.isCanceled() && input
!= null){
143 EditorUtil
.open(input
);
144 } catch (PartInitException e
) {
145 MessagingUtils
.error(getClass(), Messages
.EditorStateManager_ERROR_OPEN_WINDOW
, e
);
148 subProgressMonitor
.worked(1);
150 subProgressMonitor
.done();
156 private void refreshEditors(IProgressMonitor monitor
) {
157 IProgressMonitor subProgressMonitor
= EditorUtil
.getSubProgressMonitor(monitor
, 1);
159 Set
<IEditorPart
> openEditors
= EditorUtil
.getOpenEditors();
162 subProgressMonitor
.beginTask(Messages
.EditorStateManager_REFRESH_EDITOR
, openEditors
.size() * 2);
164 Set
<UUID
> uuids
= new HashSet
<UUID
>();
166 for(IEditorPart editor
: openEditors
){
167 if(editor
instanceof MultiPageTaxonEditor
){
169 uuids
.add(((TaxonEditorInput
) editor
.getEditorInput()).getTaxonNode().getUuid());
171 // ((MultiPageTaxonEditor) editor).close(false);
172 EditorUtil
.close((MultiPageTaxonEditor
)editor
);
173 subProgressMonitor
.worked(1);
174 } catch (Exception e
) {
175 // TODO Auto-generated catch block
181 for(UUID uuid
: uuids
){
183 EditorUtil
.openTaxonNodeE4(uuid
);
184 } catch (Exception e
) {
185 // TODO Auto-generated catch block
188 subProgressMonitor
.worked(1);
191 subProgressMonitor
.done();
199 private void saveEditorState(IMemento memento
){
204 Set
<IEditorPart
> editors
= EditorUtil
.getOpenEditors();
206 IMemento editorMementos
= memento
.createChild(EDITORS
);
208 for(IEditorPart editor
: editors
){
209 IEditorInput input
= editor
.getEditorInput();
210 if(input
instanceof IPersistable
){
211 IMemento editorMemento
= editorMementos
.createChild(EDITOR
);
212 ((IPersistable
) input
).saveState(editorMemento
);