KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > help > ui > internal > workingset > HelpWorkingSetSynchronizer


1 /*******************************************************************************
2  * Copyright (c) 2000, 2004 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.help.ui.internal.workingset;
12
13 import java.util.*;
14
15 import org.eclipse.core.runtime.*;
16 import org.eclipse.help.internal.base.*;
17 import org.eclipse.help.internal.workingset.*;
18 import org.eclipse.jface.util.*;
19 import org.eclipse.ui.*;
20
21 /**
22  * Listener for changes in the help and ui working set managers to keep them in
23  * synch.
24  */

25 public class HelpWorkingSetSynchronizer
26         implements
27             IPropertyChangeListener,
28             PropertyChange.IPropertyChangeListener {
29
30     private ArrayList workingSets;
31
32     /**
33      * Constructor
34      */

35     public HelpWorkingSetSynchronizer() {
36         workingSets = new ArrayList();
37     }
38     /**
39      * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent)
40      */

41     public void propertyChange(PropertyChangeEvent event) {
42         if (event.getProperty().equals(
43                 IWorkingSetManager.CHANGE_WORKING_SET_ADD)) {
44
45             // add the help working set
46
IWorkingSet iws = (IWorkingSet) event.getNewValue();
47             addWorkingSet(iws);
48         } else if (event.getProperty().equals(
49                 IWorkingSetManager.CHANGE_WORKING_SET_REMOVE)) {
50
51             // remove the help working set
52
IWorkingSet iws = (IWorkingSet) event.getOldValue();
53             removeWorkingSet(iws);
54         } else if (event.getProperty().equals(
55                 IWorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE)) {
56
57             // rename the help working set
58
IWorkingSet iws = (IWorkingSet) event.getNewValue();
59             renameWorkingSet(iws);
60         } else if (event.getProperty().equals(
61                 IWorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE)) {
62
63             // change the content of the help working set
64
IWorkingSet iws = (IWorkingSet) event.getNewValue();
65             changeWorkingSet(iws);
66         }
67     }
68
69     /**
70      * @see org.eclipse.help.internal.workingset.PropertyChange.IPropertyChangeListener#propertyChange(org.eclipse.help.internal.workingset.PropertyChange.PropertyChangeEvent)
71      */

72     public void propertyChange(PropertyChange.PropertyChangeEvent event) {
73         if (event.getProperty()
74                 .equals(WorkingSetManager.CHANGE_WORKING_SET_ADD)) {
75
76             // add an eclipse working set
77
WorkingSet ws = (WorkingSet) event.getNewValue();
78             addWorkingSet(ws);
79         } else if (event.getProperty().equals(
80                 WorkingSetManager.CHANGE_WORKING_SET_REMOVE)) {
81
82             // remove the eclipse working set
83
WorkingSet ws = (WorkingSet) event.getOldValue();
84             removeWorkingSet(ws);
85         } else if (event.getProperty().equals(
86                 WorkingSetManager.CHANGE_WORKING_SET_NAME_CHANGE)) {
87
88             // change the name of the eclipse working set
89
WorkingSet ws = (WorkingSet) event.getNewValue();
90             renameWorkingSet(ws);
91         } else if (event.getProperty().equals(
92                 WorkingSetManager.CHANGE_WORKING_SET_CONTENT_CHANGE)) {
93
94             // change the content of the eclipse working set
95
WorkingSet ws = (WorkingSet) event.getNewValue();
96             changeWorkingSet(ws);
97         } else if (event.getProperty().equals(
98                 WorkingSetManager.CHANGE_WORKING_SETS_SYNCH)) {
99
100             // remove working sets not present in the UI
101
WorkingSet[] baseWorkingSets = getHelpWorkingSetManager()
102                     .getWorkingSets();
103             for (int i = 0; i < baseWorkingSets.length; i++) {
104                 IWorkingSet iws = getEclipseWorkingSetManager().getWorkingSet(
105                         baseWorkingSets[i].getName());
106                 if (iws == null)
107                     getHelpWorkingSetManager().removeWorkingSet(
108                             baseWorkingSets[i]);
109             }
110         }
111     }
112
113     public void renameWorkingSet(IWorkingSet iws) {
114         HelpWorkingSet hws = findWorkingSet(iws);
115         if (hws != null) {
116             hws.getWorkingSet().setName(iws.getName());
117         }
118     }
119     public void changeWorkingSet(IWorkingSet iws) {
120         HelpWorkingSet hws = findWorkingSet(iws);
121         if (hws != null) {
122             AdaptableHelpResource[] elements = new AdaptableHelpResource[iws
123                     .getElements().length];
124             System
125                     .arraycopy(iws.getElements(), 0, elements, 0,
126                             elements.length);
127             hws.getWorkingSet().setElements(elements);
128         }
129     }
130
131     public void addWorkingSet(IWorkingSet iws) {
132         WorkingSet ws = getHelpWorkingSetManager().getWorkingSet(iws.getName());
133         if (ws == null && isHelpWorkingSet(iws)) {
134             HelpWorkingSet hws = new HelpWorkingSet(iws);
135             workingSets.add(hws);
136             getHelpWorkingSetManager().addWorkingSet(hws.getWorkingSet());
137         }
138         // see if this is happening upon workbench startup
139
if (ws != null && findWorkingSet(iws) == null) {
140             HelpWorkingSet hws = new HelpWorkingSet(ws, iws);
141             workingSets.add(hws);
142             iws.setElements(ws.getElements());
143         }
144     }
145     public void removeWorkingSet(IWorkingSet iws) {
146         WorkingSet ws = getHelpWorkingSetManager().getWorkingSet(iws.getName());
147         if (ws != null) {
148             HelpWorkingSet hws = findWorkingSet(iws);
149             if (hws != null)
150                 workingSets.remove(hws);
151             getHelpWorkingSetManager().removeWorkingSet(ws);
152         }
153     }
154
155     public void renameWorkingSet(WorkingSet ws) {
156         HelpWorkingSet hws = findWorkingSet(ws);
157         if (hws != null) {
158             hws.getIWorkingSet().setName(ws.getName());
159         }
160     }
161     public void changeWorkingSet(WorkingSet ws) {
162         HelpWorkingSet hws = findWorkingSet(ws);
163         if (hws != null) {
164             hws.getIWorkingSet().setElements(ws.getElements());
165         }
166     }
167     public void removeWorkingSet(WorkingSet ws) {
168         IWorkingSet iws = getEclipseWorkingSetManager().getWorkingSet(
169                 ws.getName());
170         if (iws != null) {
171             HelpWorkingSet hws = findWorkingSet(ws);
172             if (hws != null)
173                 workingSets.remove(hws);
174             getEclipseWorkingSetManager().removeWorkingSet(iws);
175         }
176     }
177     public void addWorkingSet(WorkingSet ws) {
178         IWorkingSet iws = getEclipseWorkingSetManager().getWorkingSet(
179                 ws.getName());
180         if (iws == null) {
181             HelpWorkingSet hws = new HelpWorkingSet(ws);
182             workingSets.add(hws);
183             getEclipseWorkingSetManager().addWorkingSet(hws.getIWorkingSet());
184         } else if (findWorkingSet(ws) == null) {
185             HelpWorkingSet hws = new HelpWorkingSet(ws, iws);
186             workingSets.add(hws);
187         }
188     }
189
190     private boolean isHelpWorkingSet(IWorkingSet ws) {
191         IAdaptable[] elements = ws.getElements();
192         return (elements.length > 0 && elements[0] instanceof AdaptableHelpResource);
193     }
194
195     private HelpWorkingSet findWorkingSet(WorkingSet ws) {
196         for (Iterator it = workingSets.iterator(); it.hasNext();) {
197             HelpWorkingSet hws = (HelpWorkingSet) it.next();
198             if (hws.getWorkingSet() == ws)
199                 return hws;
200         }
201         return null;
202     }
203
204     private HelpWorkingSet findWorkingSet(IWorkingSet iws) {
205         for (Iterator it = workingSets.iterator(); it.hasNext();) {
206             HelpWorkingSet hws = (HelpWorkingSet) it.next();
207             if (hws.getIWorkingSet() == iws)
208                 return hws;
209         }
210         return null;
211     }
212
213     private IWorkingSetManager getEclipseWorkingSetManager() {
214         return PlatformUI.getWorkbench().getWorkingSetManager();
215     }
216
217     private WorkingSetManager getHelpWorkingSetManager() {
218         return BaseHelpSystem.getWorkingSetManager();
219     }
220 }
221
Popular Tags