01: /*******************************************************************************
02: * Copyright (c) 2005, 2006 IBM Corporation and others.
03: * All rights reserved. This program and the accompanying materials
04: * are made available under the terms of the Eclipse Public License v1.0
05: * which accompanies this distribution, and is available at
06: * http://www.eclipse.org/legal/epl-v10.html
07: *
08: * Contributors:
09: * IBM Corporation - initial API and implementation
10: *******************************************************************************/package org.eclipse.ui.internal.contexts;
11:
12: import java.util.Collection;
13: import java.util.Map;
14: import java.util.TreeMap;
15:
16: import org.eclipse.core.commands.contexts.ContextManagerEvent;
17: import org.eclipse.core.commands.contexts.IContextManagerListener;
18: import org.eclipse.ui.AbstractSourceProvider;
19: import org.eclipse.ui.ISources;
20: import org.eclipse.ui.contexts.IContextService;
21:
22: /**
23: * <p>
24: * This listens to changes to the list of active contexts, and propagates them
25: * through the <code>ISourceProvider</code> framework (a common language in
26: * which events are communicated to services).
27: * </p>
28: *
29: * @since 3.2
30: */
31: public final class ActiveContextSourceProvider extends
32: AbstractSourceProvider implements IContextManagerListener {
33:
34: /**
35: * The names of the sources supported by this source provider.
36: */
37: private static final String[] PROVIDED_SOURCE_NAMES = new String[] { ISources.ACTIVE_CONTEXT_NAME };
38:
39: /**
40: * The context service with which this source provider should communicate.
41: * This value is never <code>null</code>.
42: */
43: private final IContextService contextService;
44:
45: /**
46: * Constructs a new instance of <code>ActiveContextSourceProvider</code>.
47: *
48: * @param contextService
49: * The context service to use; must not be <code>null</code>.
50: */
51: public ActiveContextSourceProvider(
52: final IContextService contextService) {
53: this .contextService = contextService;
54: contextService.addContextManagerListener(this );
55: }
56:
57: public final void contextManagerChanged(
58: final ContextManagerEvent event) {
59: if (event.isActiveContextsChanged()) {
60: final Map currentState = getCurrentState();
61:
62: if (DEBUG) {
63: logDebuggingInfo("Contexts changed to " //$NON-NLS-1$
64: + currentState
65: .get(ISources.ACTIVE_CONTEXT_NAME));
66: }
67:
68: fireSourceChanged(ISources.ACTIVE_CONTEXT, currentState);
69: }
70: }
71:
72: public final void dispose() {
73: contextService.removeContextManagerListener(this );
74: }
75:
76: public final Map getCurrentState() {
77: final Map currentState = new TreeMap();
78: final Collection activeContextIds = contextService
79: .getActiveContextIds();
80: currentState
81: .put(ISources.ACTIVE_CONTEXT_NAME, activeContextIds);
82: return currentState;
83: }
84:
85: public final String[] getProvidedSourceNames() {
86: return PROVIDED_SOURCE_NAMES;
87: }
88:
89: }
|