Project

General

Profile

Download (6.14 KB) Statistics
| Branch: | Tag: | Revision:
1
/**
2
* Copyright (C) 2007 EDIT
3
* European Distributed Institute of Taxonomy
4
* http://www.e-taxonomy.eu
5
*
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.
8
*/
9

    
10
package eu.etaxonomy.taxeditor.editor;
11

    
12
import java.util.HashSet;
13
import java.util.Set;
14
import java.util.UUID;
15

    
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;
22

    
23
import eu.etaxonomy.taxeditor.editor.view.concept.ConceptViewPart;
24
import eu.etaxonomy.taxeditor.editor.view.descriptive.DescriptiveViewPart;
25
import eu.etaxonomy.taxeditor.editor.view.media.MediaViewPart;
26
import eu.etaxonomy.taxeditor.model.ContextListenerAdapter;
27
import eu.etaxonomy.taxeditor.model.MessagingUtils;
28
import eu.etaxonomy.taxeditor.view.AbstractCdmEditorViewPart;
29

    
30
/**
31
 * <p>EditorStateManager class.</p>
32
 *
33
 * @author n.hoffmann
34
 * @created Sep 30, 2010
35
 * @version 1.0
36
 */
37
public class EditorStateManager extends ContextListenerAdapter {
38

    
39
	private static final String EDITORS = "editors"; //$NON-NLS-1$
40

    
41
	private static final String EDITOR = "editor"; //$NON-NLS-1$
42

    
43
	private TaxonEditorInputFactory inputFactory;
44

    
45
	/**
46
	 * <p>Constructor for EditorStateManager.</p>
47
	 */
48
	public EditorStateManager() {
49
		inputFactory = new TaxonEditorInputFactory();
50
	}
51

    
52
	/* (non-Javadoc)
53
	 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextAboutToStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
54
	 */
55
	/** {@inheritDoc} */
56
	@Override
57
	public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) {
58
		saveEditorState(memento);
59
	}
60

    
61
	/* (non-Javadoc)
62
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextStop(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
63
	 */
64
	/** {@inheritDoc} */
65
	@Override
66
	public void contextStop(IMemento memento, IProgressMonitor monitor) {
67
		EditorUtil.closeAll();
68
		resetConstantViews();
69
	}
70

    
71
	/**
72
	 *
73
	 */
74
	private void resetConstantViews() {
75
		AbstractCdmEditorViewPart descriptiveView = (AbstractCdmEditorViewPart) EditorUtil.getView(DescriptiveViewPart.ID, false);
76
		AbstractCdmEditorViewPart mediaView = (AbstractCdmEditorViewPart) EditorUtil.getView(MediaViewPart.ID, false);
77
		AbstractCdmEditorViewPart conceptView = (AbstractCdmEditorViewPart) EditorUtil.getView(ConceptViewPart.ID, false);
78

    
79
		if(descriptiveView != null){
80
			descriptiveView.showEmptyPage();
81
		}
82
		if(mediaView != null){
83
			mediaView.showEmptyPage();
84
		}
85
		if(conceptView != null){
86
			conceptView.showEmptyPage();
87
		}
88
	}
89

    
90
	/* (non-Javadoc)
91
	 * @see eu.etaxonomy.taxeditor.model.IContextListener#contextStart(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
92
	 */
93
	/** {@inheritDoc} */
94
	@Override
95
	public void contextStart(IMemento memento, IProgressMonitor monitor) {
96
		restoreEditors(memento, monitor);
97
	}
98

    
99
	/* (non-Javadoc)
100
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#contextRefresh(org.eclipse.core.runtime.IProgressMonitor)
101
	 */
102
	@Override
103
	public void contextRefresh(IProgressMonitor monitor) {
104
		refreshEditors(monitor);
105
	}
106

    
107
	/* (non-Javadoc)
108
	 * @see eu.etaxonomy.taxeditor.model.ContextListenerAdapter#workbenchShutdown(org.eclipse.ui.IMemento, org.eclipse.core.runtime.IProgressMonitor)
109
	 */
110
	/** {@inheritDoc} */
111
	@Override
112
	public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) {
113
		saveEditorState(memento);
114
	}
115

    
116
	/**
117
	 * Reads taxon node UUIDs from the given memento and tries to open an editor
118
	 * for each of the found UUIDs.
119
	 *
120
	 * @param memento
121
	 */
122
	private void restoreEditors(final IMemento memento, IProgressMonitor monitor){
123
		if(memento == null){
124
			return;
125
		}
126

    
127
		IProgressMonitor subProgressMonitor = EditorUtil.getSubProgressMonitor(monitor, 1);
128

    
129
		IMemento editorMementos = memento.getChild(EDITORS);
130
		IMemento[] editorInputs = editorMementos.getChildren(EDITOR);
131

    
132
		String taskName = Messages.EditorStateManager_RESTORE_EDITORS;
133
        subProgressMonitor.beginTask(taskName, 1 + editorInputs.length * 2);
134
		subProgressMonitor.subTask(taskName);
135
		subProgressMonitor.worked(1);
136

    
137
		for(IMemento editorInput : editorInputs){
138
			TaxonEditorInput input = (TaxonEditorInput) inputFactory.createElement(editorInput);
139
			subProgressMonitor.worked(1);
140
			if(!subProgressMonitor.isCanceled() && input != null){
141
				try {
142
					EditorUtil.open(input);
143
				} catch (PartInitException e) {
144
					MessagingUtils.error(getClass(), Messages.EditorStateManager_ERROR_OPEN_WINDOW, e);
145
				}
146
			}
147
			subProgressMonitor.worked(1);
148
		}
149
		subProgressMonitor.done();
150
	}
151

    
152
	/**
153
	 * @param monitor
154
	 */
155
	private void refreshEditors(IProgressMonitor monitor) {
156
		IProgressMonitor subProgressMonitor = EditorUtil.getSubProgressMonitor(monitor, 1);
157

    
158
		Set<IEditorPart> openEditors = EditorUtil.getOpenEditors();
159

    
160

    
161
		subProgressMonitor.beginTask(Messages.EditorStateManager_REFRESH_EDITOR, openEditors.size() * 2);
162

    
163
		Set<UUID> uuids = new HashSet<UUID>();
164

    
165
		for(IEditorPart editor : openEditors){
166
			if(editor instanceof MultiPageTaxonEditor){
167
				try {
168
					uuids.add(((TaxonEditorInput) editor.getEditorInput()).getTaxonNode().getUuid());
169

    
170
//					((MultiPageTaxonEditor) editor).close(false);
171
					EditorUtil.close((MultiPageTaxonEditor)editor);
172
					subProgressMonitor.worked(1);
173
				} catch (Exception e) {
174
					// TODO Auto-generated catch block
175
					e.printStackTrace();
176
				}
177
			}
178
		}
179

    
180
		for(UUID uuid : uuids){
181
			try {
182
				EditorUtil.openTaxonNode(uuid);
183
			} catch (Exception e) {
184
				// TODO Auto-generated catch block
185
				e.printStackTrace();
186
			}
187
			subProgressMonitor.worked(1);
188
		}
189

    
190
		subProgressMonitor.done();
191
	}
192

    
193
	/**
194
	 * Saves the UUIDs
195
	 *
196
	 * @param memento
197
	 */
198
	private void saveEditorState(IMemento memento){
199
		if(memento == null){
200
			return;
201
		}
202

    
203
		Set<IEditorPart> editors = EditorUtil.getOpenEditors();
204

    
205
		IMemento editorMementos = memento.createChild(EDITORS);
206

    
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);
212
			}
213
		}
214
	}
215
}
(3-3/19)