### Eclipse Workspace Patch 1.0 #P org.eclipse.core.runtime Index: src/org/eclipse/core/internal/runtime/InternalPlatform.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.runtime/src/org/eclipse/core/internal/runtime/InternalPlatform.java,v retrieving revision 1.262 diff -u -r1.262 InternalPlatform.java --- src/org/eclipse/core/internal/runtime/InternalPlatform.java 24 Sep 2008 20:47:40 -0000 1.262 +++ src/org/eclipse/core/internal/runtime/InternalPlatform.java 24 Feb 2009 14:01:20 -0000 @@ -11,6 +11,8 @@ *******************************************************************************/ package org.eclipse.core.internal.runtime; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; + import java.io.*; import java.net.MalformedURLException; import java.net.URL; @@ -64,7 +66,7 @@ private static final String[] OS_LIST = {Platform.OS_AIX, Platform.OS_HPUX, Platform.OS_LINUX, Platform.OS_MACOSX, Platform.OS_QNX, Platform.OS_SOLARIS, Platform.OS_WIN32}; private static String password = ""; //$NON-NLS-1$ private static final String PASSWORD = "-password"; //$NON-NLS-1$ - private static PlatformLogWriter platformLog = null; +// private static PlatformLogWriter platformLog = null; private static final String PLUGIN_PATH = ".plugin-path"; //$NON-NLS-1$ @@ -112,6 +114,10 @@ private IProduct product; + private ServiceTracker handlerTracker; + + private PlatformStatusHandler statusHandler; + public static InternalPlatform getDefault() { return singleton; } @@ -335,6 +341,16 @@ } return (FrameworkLog) logTracker.getService(); } + + public FrameworkEventHandler getEventHandler() { + if (handlerTracker == null) { + if (context == null) + return null; + handlerTracker = new ServiceTracker(context, FrameworkEventHandler.class.getName(), null); + handlerTracker.open(); + } + return (FrameworkEventHandler) handlerTracker.getService(); + } public Bundle[] getHosts(Bundle bundle) { PackageAdmin packageAdmin = getBundleAdmin(); @@ -769,12 +785,21 @@ initialized = true; getMetaArea(); initializeAuthorizationHandler(); - FrameworkLog log = getFrameworkLog(); - if (log != null) { - platformLog = new PlatformLogWriter(getFrameworkLog()); - addLogListener(platformLog); - } else - platformLog = null; +// FrameworkLog log = getFrameworkLog(); +// if (log != null) { +// platformLog = new PlatformLogWriter(getFrameworkLog()); +// addLogListener(platformLog); +// } else +// platformLog = null; + + FrameworkEventHandler handler = getEventHandler(); + if (handler != null) { + statusHandler = new PlatformStatusHandler(getEventHandler()); + addLogListener(statusHandler); + } else { + statusHandler = null; + } + startServices(); // See if need to activate rest of the runtime plugins. Plugins are "gently" activated by touching @@ -796,8 +821,11 @@ public void stop(BundleContext bundleContext) { assertInitialized(); stopServices(); // should be done after preferences shutdown - if (platformLog != null) - RuntimeLog.removeLogListener(platformLog); // effectively turns the platform logging off +// if (platformLog != null) +// RuntimeLog.removeLogListener(platformLog); // effectively turns the platform logging off + if(statusHandler != null){ + RuntimeLog.removeLogListener(statusHandler); + } initialized = false; closeOSGITrackers(); context = null; @@ -904,4 +932,8 @@ throw e; } } + + public PlatformStatusHandler getStatusHandler(){ + return statusHandler; + } } Index: src/org/eclipse/core/internal/runtime/PlatformStatusHandler.java =================================================================== RCS file: src/org/eclipse/core/internal/runtime/PlatformStatusHandler.java diff -N src/org/eclipse/core/internal/runtime/PlatformStatusHandler.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ src/org/eclipse/core/internal/runtime/PlatformStatusHandler.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,127 @@ +/******************************************************************************* + * Copyright (c) 2006 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.runtime; + +import org.osgi.framework.FrameworkListener; + +import org.osgi.framework.Bundle; + +import org.osgi.framework.ExtendedFrameworkEvent; + +import org.eclipse.core.runtime.IStatus2; + +import org.osgi.framework.FrameworkEvent; + +import java.util.ArrayList; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.osgi.framework.log.FrameworkLogEntry; + +import org.eclipse.core.runtime.IStatus; + +import org.eclipse.core.runtime.ILogListener; + +import org.eclipse.osgi.framework.log.FrameworkEventHandler; + +/** + * Should be promoted to API. + */ +public class PlatformStatusHandler implements ILogListener { + + FrameworkEventHandler eventHandler; + + public PlatformStatusHandler(FrameworkEventHandler eventHandler) { + this.eventHandler = eventHandler; + eventHandler.addListener(new FrameworkListener() { + + public void frameworkEvent(FrameworkEvent event) { + ExtendedFrameworkEvent event2; + if (event instanceof ExtendedFrameworkEvent) { + event2 = (ExtendedFrameworkEvent) event; + } else { + event2 = new ExtendedFrameworkEvent(event); + } + if (event2.getProperty(IStatus.class) != null) { + return; + } + event2.setProperty(IStatus.class, eventToStatus(event2)); + } + + }, true); + } + + public void logging(IStatus status, String plugin) { + eventHandler.handle(statusToEvent(status), FrameworkEventHandler.LOG); + } + + public void handle(IStatus status, int style) { + eventHandler.handle(statusToEvent(status), style); + } + + protected FrameworkLogEntry getLog(IStatus status) { + Throwable t = status.getException(); + ArrayList childlist = new ArrayList(); + + int stackCode = t instanceof CoreException ? 1 : 0; + // ensure a substatus inside a CoreException is properly logged + if (stackCode == 1) { + IStatus coreStatus = ((CoreException) t).getStatus(); + if (coreStatus != null) { + childlist.add(getLog(coreStatus)); + } + } + + if (status.isMultiStatus()) { + IStatus[] children = status.getChildren(); + for (int i = 0; i < children.length; i++) { + childlist.add(getLog(children[i])); + } + } + + FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()])); + + return new FrameworkLogEntry(status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children); + } + + protected FrameworkEvent statusToEvent(IStatus status) { + if (status instanceof IStatus2) { + IStatus2 status2 = (IStatus2) status; + if (status2.getAdapter(FrameworkEvent.class) != null) { + return (FrameworkEvent) status2.getAdapter(FrameworkEvent.class); + } + ExtendedFrameworkEvent efe = new ExtendedFrameworkEvent(status.getSeverity(), idToBundle(status.getPlugin()), status.getException()); + //TODO: do not allow for loosing any information here. Add everything as ExtendedFrameworkEvent properties. + efe.setProperty(IStatus.class, status); + return efe; + } + if (status instanceof IStatus) { + ExtendedFrameworkEvent efe = new ExtendedFrameworkEvent(status.getSeverity(), idToBundle(status.getPlugin()), status.getException()); + //TODO: do not allow for loosing any information here. Add everything as ExtendedFrameworkEvent properties. + efe.setProperty(IStatus.class, status); + return efe; + } + return null; + } + + protected IStatus eventToStatus(FrameworkEvent event){ + //TODO: implement this + return null; + } + + protected Bundle idToBundle(String id){ + //TODO: implement this + return null; + } + + public void addListener(FrameworkListener listener){ + eventHandler.addListener(listener, false); + } + +} #P org.eclipse.ui.workbench Index: Eclipse UI/org/eclipse/ui/statushandlers/StatusManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.workbench/Eclipse UI/org/eclipse/ui/statushandlers/StatusManager.java,v retrieving revision 1.27 diff -u -r1.27 StatusManager.java --- Eclipse UI/org/eclipse/ui/statushandlers/StatusManager.java 15 Jan 2009 14:33:11 -0000 1.27 +++ Eclipse UI/org/eclipse/ui/statushandlers/StatusManager.java 24 Feb 2009 14:01:47 -0000 @@ -14,6 +14,7 @@ import java.util.ArrayList; import java.util.List; +import org.eclipse.core.internal.runtime.InternalPlatform; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.ILogListener; import org.eclipse.core.runtime.IStatus; @@ -28,6 +29,8 @@ import org.eclipse.ui.internal.misc.StatusUtil; import org.eclipse.ui.internal.statushandlers.StatusHandlerRegistry; import org.eclipse.ui.progress.IProgressConstants; +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; /** *

@@ -128,7 +131,34 @@ } private StatusManager() { - Platform.addLogListener(new StatusManagerLogListener()); + InternalPlatform.getDefault().getStatusHandler().addListener( + new FrameworkListener() { + + public void frameworkEvent(FrameworkEvent event) { + StatusAdapter statusAdapter = convertEventToStatusAdapter(event); + int style = getStyle(event); + // delegates the problem to workbench handler + getStatusHandler().handle(statusAdapter, style); + + // if attached status handler is not able to notify StatusManager + // about particular event, use the default policy and fake the + // notification + if (!getStatusHandler().supportsNotification( + INotificationTypes.HANDLED)) { + generateFakeNotification(statusAdapter, style); + } + } + + private StatusAdapter convertEventToStatusAdapter( + FrameworkEvent event) { + return null; + } + + private int getStyle(FrameworkEvent event){ + return 0; + } + + }); } private AbstractStatusHandler getStatusHandler(){ @@ -174,6 +204,7 @@ new NullPointerException("Status object is null")); //$NON-NLS-1$ return; } + // The manager will only log the status, if Workbench isn't // initialized and the style isn't NONE. If Workbench isn't @@ -184,17 +215,11 @@ } return; } - - // delegates the problem to workbench handler - getStatusHandler().handle(statusAdapter, style); - // if attached status handler is not able to notify StatusManager - // about particular event, use the default policy and fake the - // notification - if (!getStatusHandler().supportsNotification( - INotificationTypes.HANDLED)) { - generateFakeNotification(statusAdapter, style); - } + //TODO: some nice converting + //TODO: this does not compile due to restriction access + InternalPlatform.getDefault().getStatusHandler().handle( + statusAdapter.getStatus(), style); } catch (Throwable ex) { // The used status handler failed logError(statusAdapter.getStatus()); #P org.eclipse.osgi Index: core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java,v retrieving revision 1.28 diff -u -r1.28 FrameworkAdaptor.java --- core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java 15 Dec 2008 15:51:01 -0000 1.28 +++ core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java 24 Feb 2009 14:01:56 -0000 @@ -14,6 +14,7 @@ import java.io.IOException; import java.net.URLConnection; import java.util.Properties; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; import org.eclipse.osgi.framework.log.FrameworkLog; import org.eclipse.osgi.service.resolver.PlatformAdmin; import org.eclipse.osgi.service.resolver.State; @@ -279,4 +280,6 @@ * @param error The Throwable for the runtime error that is to be handled. */ public void handleRuntimeError(Throwable error); + + public FrameworkEventHandler createEventHandler(); } Index: defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/AdaptorHook.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/AdaptorHook.java,v retrieving revision 1.4 diff -u -r1.4 AdaptorHook.java --- defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/AdaptorHook.java 15 Dec 2008 15:51:01 -0000 1.4 +++ defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/AdaptorHook.java 24 Feb 2009 14:01:59 -0000 @@ -18,6 +18,7 @@ import org.eclipse.osgi.baseadaptor.HookRegistry; import org.eclipse.osgi.framework.adaptor.EventPublisher; import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; import org.eclipse.osgi.framework.log.FrameworkLog; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; @@ -97,4 +98,6 @@ * @return a FrameworkLog object or null. */ public FrameworkLog createFrameworkLog(); + + public FrameworkEventHandler createEventHandler(); } Index: core/composite/org/eclipse/osgi/internal/composite/CompositeConfigurator.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/core/composite/org/eclipse/osgi/internal/composite/CompositeConfigurator.java,v retrieving revision 1.3 diff -u -r1.3 CompositeConfigurator.java --- core/composite/org/eclipse/osgi/internal/composite/CompositeConfigurator.java 4 Feb 2009 17:23:30 -0000 1.3 +++ core/composite/org/eclipse/osgi/internal/composite/CompositeConfigurator.java 24 Feb 2009 14:01:57 -0000 @@ -22,6 +22,7 @@ import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook; import org.eclipse.osgi.baseadaptor.loader.*; import org.eclipse.osgi.framework.adaptor.*; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; import org.eclipse.osgi.framework.log.FrameworkLog; import org.eclipse.osgi.internal.module.*; import org.eclipse.osgi.service.internal.composite.CompositeModule; @@ -57,6 +58,7 @@ return null; } + public FrameworkEventHandler createEventHandler() {return null;} /** * @throws BundleException */ Index: eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java,v retrieving revision 1.8 diff -u -r1.8 EclipseLazyStarter.java --- eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java 15 Dec 2008 15:51:01 -0000 1.8 +++ eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java 24 Feb 2009 14:02:03 -0000 @@ -26,8 +26,7 @@ import org.eclipse.osgi.framework.adaptor.StatusException; import org.eclipse.osgi.framework.debug.Debug; import org.eclipse.osgi.framework.internal.core.*; -import org.eclipse.osgi.framework.log.FrameworkLog; -import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.log.*; import org.eclipse.osgi.framework.util.SecureAction; import org.eclipse.osgi.service.resolver.BundleDescription; import org.eclipse.osgi.service.resolver.StateHelper; @@ -276,4 +275,6 @@ } } + + public FrameworkEventHandler createEventHandler() {return null;} } Index: eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java,v retrieving revision 1.3 diff -u -r1.3 EclipseErrorHandler.java --- eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java 15 Dec 2008 15:51:01 -0000 1.3 +++ eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java 24 Feb 2009 14:02:02 -0000 @@ -18,8 +18,7 @@ import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook; import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor; import org.eclipse.osgi.framework.internal.core.FrameworkProperties; -import org.eclipse.osgi.framework.log.FrameworkLog; -import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.log.*; import org.osgi.framework.BundleContext; import org.osgi.framework.BundleException; @@ -101,4 +100,6 @@ public void initialize(BaseAdaptor adaptor) { this.adaptor = adaptor; } + + public FrameworkEventHandler createEventHandler() {return null;} } Index: eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java,v retrieving revision 1.3 diff -u -r1.3 EclipseLogHook.java --- eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java 15 Dec 2008 15:51:01 -0000 1.3 +++ eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java 24 Feb 2009 14:02:04 -0000 @@ -19,6 +19,7 @@ import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook; import org.eclipse.osgi.framework.internal.core.Constants; import org.eclipse.osgi.framework.internal.core.FrameworkProperties; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; import org.eclipse.osgi.framework.log.FrameworkLog; import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil; import org.eclipse.osgi.service.datalocation.Location; @@ -117,4 +118,6 @@ //if all else fails, write to std err return new EclipseLog(new PrintWriter(System.err)); } + + public FrameworkEventHandler createEventHandler() {return null;} } Index: eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java,v retrieving revision 1.10 diff -u -r1.10 EclipseAdaptorHook.java --- eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java 15 Dec 2008 15:51:01 -0000 1.10 +++ eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java 24 Feb 2009 14:02:02 -0000 @@ -23,8 +23,7 @@ import org.eclipse.osgi.framework.console.CommandProvider; import org.eclipse.osgi.framework.debug.Debug; import org.eclipse.osgi.framework.debug.FrameworkDebugOptions; -import org.eclipse.osgi.framework.log.FrameworkLog; -import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.log.*; import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil; import org.eclipse.osgi.service.datalocation.Location; import org.eclipse.osgi.service.pluginconversion.PluginConverter; @@ -192,4 +191,6 @@ hookRegistry.addAdaptorHook(this); } + public FrameworkEventHandler createEventHandler() {return null;} + } Index: defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java,v retrieving revision 1.19 diff -u -r1.19 BaseStorageHook.java --- defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java 19 Dec 2008 21:10:00 -0000 1.19 +++ defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java 24 Feb 2009 14:02:01 -0000 @@ -27,6 +27,7 @@ import org.eclipse.osgi.framework.debug.Debug; import org.eclipse.osgi.framework.internal.core.*; import org.eclipse.osgi.framework.internal.core.Constants; +import org.eclipse.osgi.framework.log.FrameworkEventHandler; import org.eclipse.osgi.framework.log.FrameworkLog; import org.eclipse.osgi.framework.util.KeyedElement; import org.eclipse.osgi.service.datalocation.Location; @@ -438,4 +439,6 @@ buf.append(VARIABLE_DELIM_CHAR).append(var); return buf.toString(); } + + public FrameworkEventHandler createEventHandler() {return null;} } Index: defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java,v retrieving revision 1.9 diff -u -r1.9 BaseAdaptor.java --- defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java 15 Dec 2008 15:51:01 -0000 1.9 +++ defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java 24 Feb 2009 14:01:59 -0000 @@ -14,7 +14,7 @@ import java.io.*; import java.net.URL; import java.net.URLConnection; -import java.util.Properties; +import java.util.*; import org.eclipse.core.runtime.adaptor.LocationManager; import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile; import org.eclipse.osgi.baseadaptor.hooks.*; @@ -22,8 +22,7 @@ import org.eclipse.osgi.framework.debug.Debug; import org.eclipse.osgi.framework.internal.core.Constants; import org.eclipse.osgi.framework.internal.core.FrameworkProperties; -import org.eclipse.osgi.framework.log.FrameworkLog; -import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.log.*; import org.eclipse.osgi.internal.baseadaptor.*; import org.eclipse.osgi.service.resolver.PlatformAdmin; import org.eclipse.osgi.service.resolver.State; @@ -81,6 +80,7 @@ private boolean stopping; private HookRegistry hookRegistry; private FrameworkLog log; + private FrameworkEventHandler handler; private BundleContext context; private BaseStorage storage; private BundleWatcher bundleWatcher; @@ -341,6 +341,62 @@ return log; } + public FrameworkEventHandler createEventHandler() { + if (handler != null) + return handler; + AdaptorHook[] adaptorHooks = getHookRegistry().getAdaptorHooks(); + for (int i = 0; i < adaptorHooks.length; i++) { + handler = adaptorHooks[i].createEventHandler(); + if (handler != null) + return handler; + } + // default handler: log everything + handler = new FrameworkEventHandler() { + + Set listeners = new HashSet(); + Set preListeners = new HashSet(); + + public Object handle(FrameworkEvent event, int style) { + // compatibility + ExtendedFrameworkEvent extendedEvent; + if (!(event instanceof ExtendedFrameworkEvent)) { + extendedEvent = new ExtendedFrameworkEvent(event); + } else { + extendedEvent = (ExtendedFrameworkEvent) event; + } + //store style inside the event + extendedEvent.setProperty(HINT, new Integer(style)); + + // broadcast before any action (so listener can add some diagnosis or compute additional properties) + for (Iterator it = preListeners.iterator(); it.hasNext();) { + FrameworkListener listener = (FrameworkListener) it.next(); + listener.frameworkEvent(extendedEvent); + } + + // log if necessary + if ((style & LOG) != 0) { + getFrameworkLog().log(event); + } + + // broadcast event + for (Iterator it = listeners.iterator(); it.hasNext();) { + FrameworkListener listener = (FrameworkListener) it.next(); + listener.frameworkEvent(extendedEvent); + } + return null; + } + + public void addListener(FrameworkListener listener, boolean pre) { + if (pre) { + preListeners.add(listener); + } else { + listeners.add(listener); + } + } + }; + return handler; + } + /** * @see FrameworkAdaptor#createSystemBundleData() */ Index: security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java =================================================================== RCS file: /cvsroot/rt/org.eclipse.equinox/framework/bundles/org.eclipse.osgi/security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java,v retrieving revision 1.7 diff -u -r1.7 SignedBundleHook.java --- security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java 19 Jan 2009 21:16:15 -0000 1.7 +++ security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java 24 Feb 2009 14:02:06 -0000 @@ -23,8 +23,7 @@ import org.eclipse.osgi.framework.adaptor.BundleData; import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor; import org.eclipse.osgi.framework.internal.core.*; -import org.eclipse.osgi.framework.log.FrameworkLog; -import org.eclipse.osgi.framework.log.FrameworkLogEntry; +import org.eclipse.osgi.framework.log.*; import org.eclipse.osgi.internal.provisional.service.security.AuthorizationEngine; import org.eclipse.osgi.internal.provisional.verifier.CertificateVerifierFactory; import org.eclipse.osgi.internal.service.security.DefaultAuthorizationEngine; @@ -325,4 +324,6 @@ } return new TrustEngine[0]; } + + public FrameworkEventHandler createEventHandler() {return null;} } Index: osgi/src/org/osgi/framework/ExtendedFrameworkEvent.java =================================================================== RCS file: osgi/src/org/osgi/framework/ExtendedFrameworkEvent.java diff -N osgi/src/org/osgi/framework/ExtendedFrameworkEvent.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ osgi/src/org/osgi/framework/ExtendedFrameworkEvent.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,31 @@ +package org.osgi.framework; + +import java.util.HashMap; +import java.util.Map; + +/** + * Open FrameworkEvent for carrying more runtime information. + */ +public class ExtendedFrameworkEvent extends FrameworkEvent { + + private static final long serialVersionUID = 7689196092497566122L; + private final Map properties = new HashMap(); + + public ExtendedFrameworkEvent(int type, Bundle bundle, Throwable throwable) { + super(type, bundle, throwable); + // TODO Auto-generated constructor stub + } + + public ExtendedFrameworkEvent(FrameworkEvent event) { + super(event.getType(), event.getBundle(), event.getThrowable()); + } + + public Object getProperty(Object key) { + return properties.get(key); + } + + public Object setProperty(Object key, Object value) { + return properties.put(key, value); + } + +} Index: supplement/src/org/eclipse/osgi/framework/log/FrameworkEventHandler.java =================================================================== RCS file: supplement/src/org/eclipse/osgi/framework/log/FrameworkEventHandler.java diff -N supplement/src/org/eclipse/osgi/framework/log/FrameworkEventHandler.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ supplement/src/org/eclipse/osgi/framework/log/FrameworkEventHandler.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,41 @@ +package org.eclipse.osgi.framework.log; + +import org.osgi.framework.FrameworkEvent; +import org.osgi.framework.FrameworkListener; + +/** + * TODO: Add broadcasting mechanism + */ +public interface FrameworkEventHandler { + + /** + * Ignore. + */ + public static final int NONE = 0; + + /** + * Do not broadcast. This is not hint, but FrameworkEventHandler directive. + */ + public static final int NO_BROADCAST = 1; + + /** + * Something to log. + */ + public static final int LOG = 2; + /** + * Something to present to the user. + */ + public static final int PRESENT = 4; + + public static final String HINT = "hint"; //$NON-NLS-1$ + + /** + * + * @param event to be handled + * @param style is only a hint, that does not have to be respected. + * @return some response, undefined yet + */ + public Object handle(FrameworkEvent event, int style); + + public void addListener(FrameworkListener listener, boolean pre); +}