/******************************************************************************* * Copyright (c) 2007 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.core.internal.registry.osgi; import java.util.Map; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.spi.RegistryStrategy; /** * Use Eclipse job scheduling mechanism. */ final public class ExtensionEventDispatcherJob extends Job { // an "identy rule" that forces extension events to be queued private final static ISchedulingRule EXTENSION_EVENT_RULE = new ISchedulingRule() { public boolean contains(ISchedulingRule rule) { return rule == this; } public boolean isConflicting(ISchedulingRule rule) { return rule == this; } }; private Map deltas; private Object[] listenerInfos; private Object registry; public ExtensionEventDispatcherJob(Object[] listenerInfos, Map deltas, Object registry) { // name not NL'd since it is a system job super("Registry event dispatcher"); //$NON-NLS-1$ setSystem(true); this.listenerInfos = listenerInfos; this.deltas = deltas; this.registry = registry; // all extension event dispatching jobs use this rule setRule(EXTENSION_EVENT_RULE); } public IStatus run(IProgressMonitor monitor) { return RegistryStrategy.processChangeEvent(listenerInfos, deltas, registry); } }