View | Details | Raw Unified | Return to bug 193110
Collapse All | Expand All

(-)src/org/eclipse/core/internal/runtime/InternalPlatform.java (-9 / +41 lines)
Lines 11-16 Link Here
11
 *******************************************************************************/
11
 *******************************************************************************/
12
package org.eclipse.core.internal.runtime;
12
package org.eclipse.core.internal.runtime;
13
13
14
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
15
14
import java.io.*;
16
import java.io.*;
15
import java.net.MalformedURLException;
17
import java.net.MalformedURLException;
16
import java.net.URL;
18
import java.net.URL;
Lines 64-70 Link Here
64
	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};
66
	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};
65
	private static String password = ""; //$NON-NLS-1$
67
	private static String password = ""; //$NON-NLS-1$
66
	private static final String PASSWORD = "-password"; //$NON-NLS-1$
68
	private static final String PASSWORD = "-password"; //$NON-NLS-1$
67
	private static PlatformLogWriter platformLog = null;
69
//	private static PlatformLogWriter platformLog = null;
68
70
69
	private static final String PLUGIN_PATH = ".plugin-path"; //$NON-NLS-1$
71
	private static final String PLUGIN_PATH = ".plugin-path"; //$NON-NLS-1$
70
72
Lines 112-117 Link Here
112
114
113
	private IProduct product;
115
	private IProduct product;
114
116
117
	private ServiceTracker handlerTracker;
118
119
	private PlatformStatusHandler statusHandler;
120
115
	public static InternalPlatform getDefault() {
121
	public static InternalPlatform getDefault() {
116
		return singleton;
122
		return singleton;
117
	}
123
	}
Lines 335-340 Link Here
335
		}
341
		}
336
		return (FrameworkLog) logTracker.getService();
342
		return (FrameworkLog) logTracker.getService();
337
	}
343
	}
344
	
345
	public FrameworkEventHandler getEventHandler() {
346
		if (handlerTracker == null) {
347
			if (context == null)
348
				return null;
349
			handlerTracker = new ServiceTracker(context, FrameworkEventHandler.class.getName(), null);
350
			handlerTracker.open();
351
		}
352
		return (FrameworkEventHandler) handlerTracker.getService();
353
	}
338
354
339
	public Bundle[] getHosts(Bundle bundle) {
355
	public Bundle[] getHosts(Bundle bundle) {
340
		PackageAdmin packageAdmin = getBundleAdmin();
356
		PackageAdmin packageAdmin = getBundleAdmin();
Lines 769-780 Link Here
769
		initialized = true;
785
		initialized = true;
770
		getMetaArea();
786
		getMetaArea();
771
		initializeAuthorizationHandler();
787
		initializeAuthorizationHandler();
772
		FrameworkLog log = getFrameworkLog();
788
//		FrameworkLog log = getFrameworkLog();
773
		if (log != null) {
789
//		if (log != null) {
774
			platformLog = new PlatformLogWriter(getFrameworkLog());
790
//			platformLog = new PlatformLogWriter(getFrameworkLog());
775
			addLogListener(platformLog);
791
//			addLogListener(platformLog);
776
		} else
792
//		} else
777
			platformLog = null;
793
//			platformLog = null;
794
		
795
		FrameworkEventHandler handler = getEventHandler();
796
		if (handler != null) {
797
			statusHandler = new PlatformStatusHandler(getEventHandler());
798
			addLogListener(statusHandler);
799
		} else {
800
			statusHandler = null;
801
		}
802
		
778
		startServices();
803
		startServices();
779
804
780
		// See if need to activate rest of the runtime plugins. Plugins are "gently" activated by touching 
805
		// See if need to activate rest of the runtime plugins. Plugins are "gently" activated by touching 
Lines 796-803 Link Here
796
	public void stop(BundleContext bundleContext) {
821
	public void stop(BundleContext bundleContext) {
797
		assertInitialized();
822
		assertInitialized();
798
		stopServices(); // should be done after preferences shutdown
823
		stopServices(); // should be done after preferences shutdown
799
		if (platformLog != null)
824
//		if (platformLog != null)
800
			RuntimeLog.removeLogListener(platformLog); // effectively turns the platform logging off
825
//			RuntimeLog.removeLogListener(platformLog); // effectively turns the platform logging off
826
		if(statusHandler != null){
827
			RuntimeLog.removeLogListener(statusHandler);
828
		}
801
		initialized = false;
829
		initialized = false;
802
		closeOSGITrackers();
830
		closeOSGITrackers();
803
		context = null;
831
		context = null;
Lines 904-907 Link Here
904
			throw e;
932
			throw e;
905
		}
933
		}
906
	}
934
	}
935
	
936
	public PlatformStatusHandler getStatusHandler(){
937
		return statusHandler;
938
	}
907
}
939
}
(-)src/org/eclipse/core/internal/runtime/PlatformStatusHandler.java (+127 lines)
Added Link Here
1
/*******************************************************************************
2
 * Copyright (c) 2006 IBM Corporation and others.
3
 * All rights reserved. This program and the accompanying materials
4
 * are made available under the terms of the Eclipse Public License v1.0
5
 * which accompanies this distribution, and is available at
6
 * http://www.eclipse.org/legal/epl-v10.html
7
 * 
8
 * Contributors:
9
 *     IBM Corporation - initial API and implementation
10
 *******************************************************************************/
11
package org.eclipse.core.internal.runtime;
12
13
import org.osgi.framework.FrameworkListener;
14
15
import org.osgi.framework.Bundle;
16
17
import org.osgi.framework.ExtendedFrameworkEvent;
18
19
import org.eclipse.core.runtime.IStatus2;
20
21
import org.osgi.framework.FrameworkEvent;
22
23
import java.util.ArrayList;
24
import org.eclipse.core.runtime.CoreException;
25
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
26
27
import org.eclipse.core.runtime.IStatus;
28
29
import org.eclipse.core.runtime.ILogListener;
30
31
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
32
33
/**
34
 * Should be promoted to API.
35
 */
36
public class PlatformStatusHandler implements ILogListener {
37
38
	FrameworkEventHandler eventHandler;
39
	
40
	public PlatformStatusHandler(FrameworkEventHandler eventHandler) {
41
		this.eventHandler = eventHandler;
42
		eventHandler.addListener(new FrameworkListener() {
43
44
			public void frameworkEvent(FrameworkEvent event) {
45
				ExtendedFrameworkEvent event2;
46
				if (event instanceof ExtendedFrameworkEvent) {
47
					event2 = (ExtendedFrameworkEvent) event;
48
				} else {
49
					event2 = new ExtendedFrameworkEvent(event);
50
				}
51
				if (event2.getProperty(IStatus.class) != null) {
52
					return;
53
				}
54
				event2.setProperty(IStatus.class, eventToStatus(event2));
55
			}
56
57
		}, true);
58
	}
59
60
	public void logging(IStatus status, String plugin) {
61
		eventHandler.handle(statusToEvent(status), FrameworkEventHandler.LOG);
62
	}
63
	
64
	public void handle(IStatus status, int style) {
65
		eventHandler.handle(statusToEvent(status), style);
66
	}
67
	
68
	protected FrameworkLogEntry getLog(IStatus status) {
69
		Throwable t = status.getException();
70
		ArrayList childlist = new ArrayList();
71
72
		int stackCode = t instanceof CoreException ? 1 : 0;
73
		// ensure a substatus inside a CoreException is properly logged 
74
		if (stackCode == 1) {
75
			IStatus coreStatus = ((CoreException) t).getStatus();
76
			if (coreStatus != null) {
77
				childlist.add(getLog(coreStatus));
78
			}
79
		}
80
81
		if (status.isMultiStatus()) {
82
			IStatus[] children = status.getChildren();
83
			for (int i = 0; i < children.length; i++) {
84
				childlist.add(getLog(children[i]));
85
			}
86
		}
87
88
		FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]));
89
90
		return new FrameworkLogEntry(status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
91
	}
92
	
93
	protected FrameworkEvent statusToEvent(IStatus status) {
94
		if (status instanceof IStatus2) {
95
			IStatus2 status2 = (IStatus2) status;
96
			if (status2.getAdapter(FrameworkEvent.class) != null) {
97
				return (FrameworkEvent) status2.getAdapter(FrameworkEvent.class);
98
			}
99
			ExtendedFrameworkEvent efe = new ExtendedFrameworkEvent(status.getSeverity(), idToBundle(status.getPlugin()), status.getException());
100
			//TODO: do not allow for loosing any information here. Add everything as ExtendedFrameworkEvent properties.
101
			efe.setProperty(IStatus.class, status);
102
			return efe;
103
		}
104
		if (status instanceof IStatus) {
105
			ExtendedFrameworkEvent efe = new ExtendedFrameworkEvent(status.getSeverity(), idToBundle(status.getPlugin()), status.getException());
106
			//TODO: do not allow for loosing any information here. Add everything as ExtendedFrameworkEvent properties.
107
			efe.setProperty(IStatus.class, status);
108
			return efe;
109
		}
110
		return null;
111
	}
112
	
113
	protected IStatus eventToStatus(FrameworkEvent event){
114
		//TODO: implement this
115
		return null;
116
	}
117
	
118
	protected Bundle idToBundle(String id){
119
		//TODO: implement this
120
		return null;
121
	}
122
	
123
	public void addListener(FrameworkListener listener){
124
		eventHandler.addListener(listener, false);
125
	}
126
127
}
(-)Eclipse UI/org/eclipse/ui/statushandlers/StatusManager.java (-11 / +36 lines)
Lines 14-19 Link Here
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.List;
15
import java.util.List;
16
16
17
import org.eclipse.core.internal.runtime.InternalPlatform;
17
import org.eclipse.core.runtime.CoreException;
18
import org.eclipse.core.runtime.CoreException;
18
import org.eclipse.core.runtime.ILogListener;
19
import org.eclipse.core.runtime.ILogListener;
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.IStatus;
Lines 28-33 Link Here
28
import org.eclipse.ui.internal.misc.StatusUtil;
29
import org.eclipse.ui.internal.misc.StatusUtil;
29
import org.eclipse.ui.internal.statushandlers.StatusHandlerRegistry;
30
import org.eclipse.ui.internal.statushandlers.StatusHandlerRegistry;
30
import org.eclipse.ui.progress.IProgressConstants;
31
import org.eclipse.ui.progress.IProgressConstants;
32
import org.osgi.framework.FrameworkEvent;
33
import org.osgi.framework.FrameworkListener;
31
34
32
/**
35
/**
33
 * <p>
36
 * <p>
Lines 128-134 Link Here
128
	}
131
	}
129
132
130
	private StatusManager() {
133
	private StatusManager() {
131
		Platform.addLogListener(new StatusManagerLogListener());
134
		InternalPlatform.getDefault().getStatusHandler().addListener(
135
				new FrameworkListener() {
136
137
					public void frameworkEvent(FrameworkEvent event) {
138
						StatusAdapter statusAdapter = convertEventToStatusAdapter(event);
139
						int style = getStyle(event);
140
						// delegates the problem to workbench handler
141
						getStatusHandler().handle(statusAdapter, style);
142
						
143
						// if attached status handler is not able to notify StatusManager
144
						// about particular event, use the default policy and fake the
145
						// notification
146
						if (!getStatusHandler().supportsNotification(
147
								INotificationTypes.HANDLED)) {
148
							generateFakeNotification(statusAdapter, style);
149
						}
150
					}
151
152
					private StatusAdapter convertEventToStatusAdapter(
153
							FrameworkEvent event) {
154
						return null;
155
					}
156
					
157
					private int getStyle(FrameworkEvent event){
158
						return 0;
159
					}
160
161
				});
132
	}
162
	}
133
163
134
	private AbstractStatusHandler getStatusHandler(){
164
	private AbstractStatusHandler getStatusHandler(){
Lines 174-179 Link Here
174
						new NullPointerException("Status object is null")); //$NON-NLS-1$
204
						new NullPointerException("Status object is null")); //$NON-NLS-1$
175
				return;
205
				return;
176
			}
206
			}
207
			
177
208
178
			// The manager will only log the status, if Workbench isn't
209
			// The manager will only log the status, if Workbench isn't
179
			// initialized and the style isn't NONE. If Workbench isn't
210
			// initialized and the style isn't NONE. If Workbench isn't
Lines 184-200 Link Here
184
				}
215
				}
185
				return;
216
				return;
186
			}
217
			}
187
188
			// delegates the problem to workbench handler
189
			getStatusHandler().handle(statusAdapter, style);
190
			
218
			
191
			// if attached status handler is not able to notify StatusManager
219
			//TODO: some nice converting
192
			// about particular event, use the default policy and fake the
220
			//TODO: this does not compile due to restriction access
193
			// notification
221
			InternalPlatform.getDefault().getStatusHandler().handle(
194
			if (!getStatusHandler().supportsNotification(
222
					statusAdapter.getStatus(), style);
195
					INotificationTypes.HANDLED)) {
196
				generateFakeNotification(statusAdapter, style);
197
			}
198
		} catch (Throwable ex) {
223
		} catch (Throwable ex) {
199
			// The used status handler failed
224
			// The used status handler failed
200
			logError(statusAdapter.getStatus());
225
			logError(statusAdapter.getStatus());
(-)core/adaptor/org/eclipse/osgi/framework/adaptor/FrameworkAdaptor.java (+3 lines)
Lines 14-19 Link Here
14
import java.io.IOException;
14
import java.io.IOException;
15
import java.net.URLConnection;
15
import java.net.URLConnection;
16
import java.util.Properties;
16
import java.util.Properties;
17
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
17
import org.eclipse.osgi.framework.log.FrameworkLog;
18
import org.eclipse.osgi.framework.log.FrameworkLog;
18
import org.eclipse.osgi.service.resolver.PlatformAdmin;
19
import org.eclipse.osgi.service.resolver.PlatformAdmin;
19
import org.eclipse.osgi.service.resolver.State;
20
import org.eclipse.osgi.service.resolver.State;
Lines 279-282 Link Here
279
	 * @param error The Throwable for the runtime error that is to be handled.
280
	 * @param error The Throwable for the runtime error that is to be handled.
280
	 */
281
	 */
281
	public void handleRuntimeError(Throwable error);
282
	public void handleRuntimeError(Throwable error);
283
284
	public FrameworkEventHandler createEventHandler();
282
}
285
}
(-)defaultAdaptor/src/org/eclipse/osgi/baseadaptor/hooks/AdaptorHook.java (+3 lines)
Lines 18-23 Link Here
18
import org.eclipse.osgi.baseadaptor.HookRegistry;
18
import org.eclipse.osgi.baseadaptor.HookRegistry;
19
import org.eclipse.osgi.framework.adaptor.EventPublisher;
19
import org.eclipse.osgi.framework.adaptor.EventPublisher;
20
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
20
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
21
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
21
import org.eclipse.osgi.framework.log.FrameworkLog;
22
import org.eclipse.osgi.framework.log.FrameworkLog;
22
import org.osgi.framework.BundleContext;
23
import org.osgi.framework.BundleContext;
23
import org.osgi.framework.BundleException;
24
import org.osgi.framework.BundleException;
Lines 97-100 Link Here
97
	 * @return a FrameworkLog object or null.
98
	 * @return a FrameworkLog object or null.
98
	 */
99
	 */
99
	public FrameworkLog createFrameworkLog();
100
	public FrameworkLog createFrameworkLog();
101
102
	public FrameworkEventHandler createEventHandler();
100
}
103
}
(-)core/composite/org/eclipse/osgi/internal/composite/CompositeConfigurator.java (+2 lines)
Lines 22-27 Link Here
22
import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook;
22
import org.eclipse.osgi.baseadaptor.hooks.ClassLoadingHook;
23
import org.eclipse.osgi.baseadaptor.loader.*;
23
import org.eclipse.osgi.baseadaptor.loader.*;
24
import org.eclipse.osgi.framework.adaptor.*;
24
import org.eclipse.osgi.framework.adaptor.*;
25
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
25
import org.eclipse.osgi.framework.log.FrameworkLog;
26
import org.eclipse.osgi.framework.log.FrameworkLog;
26
import org.eclipse.osgi.internal.module.*;
27
import org.eclipse.osgi.internal.module.*;
27
import org.eclipse.osgi.service.internal.composite.CompositeModule;
28
import org.eclipse.osgi.service.internal.composite.CompositeModule;
Lines 57-62 Link Here
57
		return null;
58
		return null;
58
	}
59
	}
59
60
61
	public FrameworkEventHandler createEventHandler() {return null;}
60
	/**
62
	/**
61
	 * @throws BundleException  
63
	 * @throws BundleException  
62
	 */
64
	 */
(-)eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLazyStarter.java (-2 / +3 lines)
Lines 26-33 Link Here
26
import org.eclipse.osgi.framework.adaptor.StatusException;
26
import org.eclipse.osgi.framework.adaptor.StatusException;
27
import org.eclipse.osgi.framework.debug.Debug;
27
import org.eclipse.osgi.framework.debug.Debug;
28
import org.eclipse.osgi.framework.internal.core.*;
28
import org.eclipse.osgi.framework.internal.core.*;
29
import org.eclipse.osgi.framework.log.FrameworkLog;
29
import org.eclipse.osgi.framework.log.*;
30
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
31
import org.eclipse.osgi.framework.util.SecureAction;
30
import org.eclipse.osgi.framework.util.SecureAction;
32
import org.eclipse.osgi.service.resolver.BundleDescription;
31
import org.eclipse.osgi.service.resolver.BundleDescription;
33
import org.eclipse.osgi.service.resolver.StateHelper;
32
import org.eclipse.osgi.service.resolver.StateHelper;
Lines 276-279 Link Here
276
		}
275
		}
277
276
278
	}
277
	}
278
279
		public FrameworkEventHandler createEventHandler() {return null;}
279
}
280
}
(-)eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseErrorHandler.java (-2 / +3 lines)
Lines 18-25 Link Here
18
import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook;
18
import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook;
19
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
19
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
20
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
20
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
21
import org.eclipse.osgi.framework.log.FrameworkLog;
21
import org.eclipse.osgi.framework.log.*;
22
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
23
import org.osgi.framework.BundleContext;
22
import org.osgi.framework.BundleContext;
24
import org.osgi.framework.BundleException;
23
import org.osgi.framework.BundleException;
25
24
Lines 101-104 Link Here
101
	public void initialize(BaseAdaptor adaptor) {
100
	public void initialize(BaseAdaptor adaptor) {
102
		this.adaptor = adaptor;
101
		this.adaptor = adaptor;
103
	}
102
	}
103
104
		public FrameworkEventHandler createEventHandler() {return null;}
104
}
105
}
(-)eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseLogHook.java (+3 lines)
Lines 19-24 Link Here
19
import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook;
19
import org.eclipse.osgi.baseadaptor.hooks.AdaptorHook;
20
import org.eclipse.osgi.framework.internal.core.Constants;
20
import org.eclipse.osgi.framework.internal.core.Constants;
21
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
21
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
22
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
22
import org.eclipse.osgi.framework.log.FrameworkLog;
23
import org.eclipse.osgi.framework.log.FrameworkLog;
23
import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
24
import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
24
import org.eclipse.osgi.service.datalocation.Location;
25
import org.eclipse.osgi.service.datalocation.Location;
Lines 117-120 Link Here
117
		//if all else fails, write to std err
118
		//if all else fails, write to std err
118
		return new EclipseLog(new PrintWriter(System.err));
119
		return new EclipseLog(new PrintWriter(System.err));
119
	}
120
	}
121
122
		public FrameworkEventHandler createEventHandler() {return null;}
120
}
123
}
(-)eclipseAdaptor/src/org/eclipse/core/runtime/internal/adaptor/EclipseAdaptorHook.java (-2 / +3 lines)
Lines 23-30 Link Here
23
import org.eclipse.osgi.framework.console.CommandProvider;
23
import org.eclipse.osgi.framework.console.CommandProvider;
24
import org.eclipse.osgi.framework.debug.Debug;
24
import org.eclipse.osgi.framework.debug.Debug;
25
import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
25
import org.eclipse.osgi.framework.debug.FrameworkDebugOptions;
26
import org.eclipse.osgi.framework.log.FrameworkLog;
26
import org.eclipse.osgi.framework.log.*;
27
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
28
import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
27
import org.eclipse.osgi.internal.baseadaptor.AdaptorUtil;
29
import org.eclipse.osgi.service.datalocation.Location;
28
import org.eclipse.osgi.service.datalocation.Location;
30
import org.eclipse.osgi.service.pluginconversion.PluginConverter;
29
import org.eclipse.osgi.service.pluginconversion.PluginConverter;
Lines 192-195 Link Here
192
		hookRegistry.addAdaptorHook(this);
191
		hookRegistry.addAdaptorHook(this);
193
	}
192
	}
194
193
194
		public FrameworkEventHandler createEventHandler() {return null;}
195
195
}
196
}
(-)defaultAdaptor/src/org/eclipse/osgi/internal/baseadaptor/BaseStorageHook.java (+3 lines)
Lines 27-32 Link Here
27
import org.eclipse.osgi.framework.debug.Debug;
27
import org.eclipse.osgi.framework.debug.Debug;
28
import org.eclipse.osgi.framework.internal.core.*;
28
import org.eclipse.osgi.framework.internal.core.*;
29
import org.eclipse.osgi.framework.internal.core.Constants;
29
import org.eclipse.osgi.framework.internal.core.Constants;
30
import org.eclipse.osgi.framework.log.FrameworkEventHandler;
30
import org.eclipse.osgi.framework.log.FrameworkLog;
31
import org.eclipse.osgi.framework.log.FrameworkLog;
31
import org.eclipse.osgi.framework.util.KeyedElement;
32
import org.eclipse.osgi.framework.util.KeyedElement;
32
import org.eclipse.osgi.service.datalocation.Location;
33
import org.eclipse.osgi.service.datalocation.Location;
Lines 438-441 Link Here
438
			buf.append(VARIABLE_DELIM_CHAR).append(var);
439
			buf.append(VARIABLE_DELIM_CHAR).append(var);
439
		return buf.toString();
440
		return buf.toString();
440
	}
441
	}
442
443
		public FrameworkEventHandler createEventHandler() {return null;}
441
}
444
}
(-)defaultAdaptor/src/org/eclipse/osgi/baseadaptor/BaseAdaptor.java (-3 / +59 lines)
Lines 14-20 Link Here
14
import java.io.*;
14
import java.io.*;
15
import java.net.URL;
15
import java.net.URL;
16
import java.net.URLConnection;
16
import java.net.URLConnection;
17
import java.util.Properties;
17
import java.util.*;
18
import org.eclipse.core.runtime.adaptor.LocationManager;
18
import org.eclipse.core.runtime.adaptor.LocationManager;
19
import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
19
import org.eclipse.osgi.baseadaptor.bundlefile.BundleFile;
20
import org.eclipse.osgi.baseadaptor.hooks.*;
20
import org.eclipse.osgi.baseadaptor.hooks.*;
Lines 22-29 Link Here
22
import org.eclipse.osgi.framework.debug.Debug;
22
import org.eclipse.osgi.framework.debug.Debug;
23
import org.eclipse.osgi.framework.internal.core.Constants;
23
import org.eclipse.osgi.framework.internal.core.Constants;
24
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
24
import org.eclipse.osgi.framework.internal.core.FrameworkProperties;
25
import org.eclipse.osgi.framework.log.FrameworkLog;
25
import org.eclipse.osgi.framework.log.*;
26
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
27
import org.eclipse.osgi.internal.baseadaptor.*;
26
import org.eclipse.osgi.internal.baseadaptor.*;
28
import org.eclipse.osgi.service.resolver.PlatformAdmin;
27
import org.eclipse.osgi.service.resolver.PlatformAdmin;
29
import org.eclipse.osgi.service.resolver.State;
28
import org.eclipse.osgi.service.resolver.State;
Lines 81-86 Link Here
81
	private boolean stopping;
80
	private boolean stopping;
82
	private HookRegistry hookRegistry;
81
	private HookRegistry hookRegistry;
83
	private FrameworkLog log;
82
	private FrameworkLog log;
83
	private FrameworkEventHandler handler;
84
	private BundleContext context;
84
	private BundleContext context;
85
	private BaseStorage storage;
85
	private BaseStorage storage;
86
	private BundleWatcher bundleWatcher;
86
	private BundleWatcher bundleWatcher;
Lines 341-346 Link Here
341
		return log;
341
		return log;
342
	}
342
	}
343
343
344
	public FrameworkEventHandler createEventHandler() {
345
		if (handler != null)
346
			return handler;
347
		AdaptorHook[] adaptorHooks = getHookRegistry().getAdaptorHooks();
348
		for (int i = 0; i < adaptorHooks.length; i++) {
349
			handler = adaptorHooks[i].createEventHandler();
350
			if (handler != null)
351
				return handler;
352
		}
353
		// default handler: log everything
354
		handler = new FrameworkEventHandler() {
355
356
			Set listeners = new HashSet();
357
			Set preListeners = new HashSet();
358
359
			public Object handle(FrameworkEvent event, int style) {
360
				// compatibility
361
				ExtendedFrameworkEvent extendedEvent;
362
				if (!(event instanceof ExtendedFrameworkEvent)) {
363
					extendedEvent = new ExtendedFrameworkEvent(event);
364
				} else {
365
					extendedEvent = (ExtendedFrameworkEvent) event;
366
				}
367
				//store style inside the event
368
				extendedEvent.setProperty(HINT, new Integer(style));
369
370
				// broadcast before any action (so listener can add some diagnosis or compute additional properties)
371
				for (Iterator it = preListeners.iterator(); it.hasNext();) {
372
					FrameworkListener listener = (FrameworkListener) it.next();
373
					listener.frameworkEvent(extendedEvent);
374
				}
375
376
				// log if necessary
377
				if ((style & LOG) != 0) {
378
					getFrameworkLog().log(event);
379
				}
380
381
				// broadcast event
382
				for (Iterator it = listeners.iterator(); it.hasNext();) {
383
					FrameworkListener listener = (FrameworkListener) it.next();
384
					listener.frameworkEvent(extendedEvent);
385
				}
386
				return null;
387
			}
388
389
			public void addListener(FrameworkListener listener, boolean pre) {
390
				if (pre) {
391
					preListeners.add(listener);
392
				} else {
393
					listeners.add(listener);
394
				}
395
			}
396
		};
397
		return handler;
398
	}
399
344
	/**
400
	/**
345
	 * @see FrameworkAdaptor#createSystemBundleData()
401
	 * @see FrameworkAdaptor#createSystemBundleData()
346
	 */
402
	 */
(-)security/src/org/eclipse/osgi/internal/signedcontent/SignedBundleHook.java (-2 / +3 lines)
Lines 23-30 Link Here
23
import org.eclipse.osgi.framework.adaptor.BundleData;
23
import org.eclipse.osgi.framework.adaptor.BundleData;
24
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
24
import org.eclipse.osgi.framework.adaptor.FrameworkAdaptor;
25
import org.eclipse.osgi.framework.internal.core.*;
25
import org.eclipse.osgi.framework.internal.core.*;
26
import org.eclipse.osgi.framework.log.FrameworkLog;
26
import org.eclipse.osgi.framework.log.*;
27
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
28
import org.eclipse.osgi.internal.provisional.service.security.AuthorizationEngine;
27
import org.eclipse.osgi.internal.provisional.service.security.AuthorizationEngine;
29
import org.eclipse.osgi.internal.provisional.verifier.CertificateVerifierFactory;
28
import org.eclipse.osgi.internal.provisional.verifier.CertificateVerifierFactory;
30
import org.eclipse.osgi.internal.service.security.DefaultAuthorizationEngine;
29
import org.eclipse.osgi.internal.service.security.DefaultAuthorizationEngine;
Lines 325-328 Link Here
325
		}
324
		}
326
		return new TrustEngine[0];
325
		return new TrustEngine[0];
327
	}
326
	}
327
328
	public FrameworkEventHandler createEventHandler() {return null;}
328
}
329
}
(-)osgi/src/org/osgi/framework/ExtendedFrameworkEvent.java (+31 lines)
Added Link Here
1
package org.osgi.framework;
2
3
import java.util.HashMap;
4
import java.util.Map;
5
6
/**
7
 * Open FrameworkEvent for carrying more runtime information.
8
 */
9
public class ExtendedFrameworkEvent extends FrameworkEvent {
10
11
	private static final long serialVersionUID = 7689196092497566122L;
12
	private final Map properties = new HashMap();
13
14
	public ExtendedFrameworkEvent(int type, Bundle bundle, Throwable throwable) {
15
		super(type, bundle, throwable);
16
		// TODO Auto-generated constructor stub
17
	}
18
19
	public ExtendedFrameworkEvent(FrameworkEvent event) {
20
		super(event.getType(), event.getBundle(), event.getThrowable());
21
	}
22
23
	public Object getProperty(Object key) {
24
		return properties.get(key);
25
	}
26
27
	public Object setProperty(Object key, Object value) {
28
		return properties.put(key, value);
29
	}
30
31
}
(-)supplement/src/org/eclipse/osgi/framework/log/FrameworkEventHandler.java (+41 lines)
Added Link Here
1
package org.eclipse.osgi.framework.log;
2
3
import org.osgi.framework.FrameworkEvent;
4
import org.osgi.framework.FrameworkListener;
5
6
/**
7
 * TODO: Add broadcasting mechanism
8
 */
9
public interface FrameworkEventHandler {
10
11
	/**
12
	 * Ignore.
13
	 */
14
	public static final int NONE = 0;
15
16
	/**
17
	 * Do not broadcast. This is not hint, but FrameworkEventHandler directive.
18
	 */
19
	public static final int NO_BROADCAST = 1;
20
21
	/**
22
	 * Something to log.
23
	 */
24
	public static final int LOG = 2;
25
	/**
26
	 * Something to present to the user.
27
	 */
28
	public static final int PRESENT = 4;
29
30
	public static final String HINT = "hint"; //$NON-NLS-1$
31
32
	/**
33
	 * 
34
	 * @param event to be handled
35
	 * @param style is only a hint, that does not have to be respected.
36
	 * @return some response, undefined yet
37
	 */
38
	public Object handle(FrameworkEvent event, int style);
39
40
	public void addListener(FrameworkListener listener, boolean pre);
41
}

Return to bug 193110