1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18 /***
19 * <p>Title: WSMO Studio</p>
20 * <p>Description: Semantic Web Service Editor</p>
21 * <p>Copyright: Copyright (c) 2004-2006</p>
22 * <p>Company: OntoText Lab. / SIRMA </p>
23 */
24
25 package org.wsmostudio.ui.views.navigator;
26
27 import org.eclipse.ui.*;
28 import org.wsmostudio.ui.Utils;
29 import org.wsmostudio.ui.editors.model.ObservableModel;
30
31 /***
32 * A class which listens for certain events in the workbench and dynamically
33 * updates the content of the <i>WSMO Navigator</i> view if this is needed.
34 * Such events are: activating/closing an editor, modifications in the active
35 * editor.
36 *
37 * @author not attributable
38 * @version $Revision: 1.9 $ $Date: 2006/01/09 12:51:14 $
39 */
40
41 public class WSMONavigatorUpdater implements IPartListener, IPropertyListener {
42
43 private WSMONavigator navigator;
44
45 public WSMONavigatorUpdater(WSMONavigator navi) {
46 this.navigator = navi;
47 }
48
49 public void registerInOpenedEditors() {
50 IWorkbenchPage page = PlatformUI.getWorkbench()
51 .getActiveWorkbenchWindow()
52 .getActivePage();
53 if (page == null) {
54 return;
55 }
56 IEditorReference[] editors = page.getEditorReferences();
57 if (editors == null) {
58 return;
59 }
60 for(int i = 0; i < editors.length; i++) {
61 IEditorPart editor = editors[i].getEditor(true);
62 if (editor != null) {
63 editor.addPropertyListener(this);
64 }
65 }
66 }
67
68 public void unregisterFromOpenedEditors() {
69 IWorkbenchPage page = PlatformUI.getWorkbench()
70 .getActiveWorkbenchWindow()
71 .getActivePage();
72 if (page == null) {
73 return;
74 }
75 IEditorReference[] editors = page.getEditorReferences();
76 for(int i = 0; i < editors.length; i++) {
77 IEditorPart editor = editors[i].getEditor(true);
78 if (editor != null) {
79 editor.removePropertyListener(this);
80 }
81 }
82 }
83
84 public void partActivated(IWorkbenchPart part) {
85 part.addPropertyListener(this);
86 notifyNavigator(part);
87 }
88 public void partBroughtToTop(IWorkbenchPart part) {
89 notifyNavigator(part);
90 }
91 public void partClosed(IWorkbenchPart part) {
92 part.removePropertyListener(this);
93 Utils.closeDependentEditors(part);
94 clearNavigator(part);
95 }
96 public void partDeactivated(IWorkbenchPart part) {
97 }
98 public void partOpened(IWorkbenchPart part) {
99 part.addPropertyListener(this);
100 notifyNavigator(part);
101 }
102
103 public void propertyChanged(Object source, int propId) {
104 if (propId == IEditorPart.PROP_DIRTY) {
105 navigator.getTree().refresh(true);
106 }
107 }
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134 private void notifyNavigator(IWorkbenchPart part) {
135 if (false == part instanceof IEditorPart) {
136 return;
137 }
138 ObservableModel tmpModel = (ObservableModel)((IEditorPart)part)
139 .getEditorInput()
140 .getAdapter(ObservableModel.class);
141 if (tmpModel == null) {
142 return;
143 }
144 while (tmpModel.getMasterModel() != null) {
145 tmpModel = tmpModel.getMasterModel();
146 }
147
148 IEditorInput newInput = Utils.findInputForModel(tmpModel);
149 if (newInput != null
150 && false == newInput.equals(this.navigator.getWsmoInput())) {
151 this.navigator.setWsmoInput(newInput);
152 }
153 }
154
155 private void clearNavigator(IWorkbenchPart part) {
156 if (false == part instanceof IEditorPart) {
157 return;
158 }
159 IEditorInput input = ((IEditorPart)part).getEditorInput();
160 if (input != null
161 && input.equals(this.navigator.getWsmoInput())) {
162 this.navigator.setWsmoInput(null);
163 }
164 }
165 }
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188