Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 126556 Details for
Bug 193110
[ErrorHandling] StatusManager cannot be used in headless applications
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
some work in progress (even does not compile)
clipboard.txt (text/plain), 28.45 KB, created by
Krzysztof Daniel
on 2009-02-24 09:03:31 EST
(
hide
)
Description:
some work in progress (even does not compile)
Filename:
MIME Type:
Creator:
Krzysztof Daniel
Created:
2009-02-24 09:03:31 EST
Size:
28.45 KB
patch
obsolete
>### 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; > > /** > * <p> >@@ -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); >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 193110
: 126556 |
126557