blob: ab8bcf025a83ad060698094956b5cc664739444f [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2016 Cognos Incorporated, 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
******************************************************************************/
package org.eclipse.osgi.internal.log;
import java.security.Permission;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.equinox.log.ExtendedLogService;
import org.eclipse.equinox.log.LogPermission;
import org.osgi.framework.*;
public class ExtendedLogServiceFactory implements ServiceFactory<ExtendedLogService>, BundleListener {
private final Permission logPermission = new LogPermission("*", LogPermission.LOG); //$NON-NLS-1$
private final ExtendedLogReaderServiceFactory logReaderServiceFactory;
private final Map<Bundle, ExtendedLogService> logServices = new HashMap<>();
public ExtendedLogServiceFactory(ExtendedLogReaderServiceFactory logReaderServiceFactory) {
this.logReaderServiceFactory = logReaderServiceFactory;
}
public ExtendedLogServiceImpl getService(Bundle bundle, ServiceRegistration<ExtendedLogService> registration) {
return getLogService(bundle);
}
public void ungetService(Bundle bundle, ServiceRegistration<ExtendedLogService> registration, ExtendedLogService service) {
// do nothing
// Notice that we do not remove the the LogService impl for the bundle because other bundles
// still need to be able to get the cached loggers for a bundle.
}
public void bundleChanged(BundleEvent event) {
if (event.getType() == BundleEvent.UNINSTALLED)
removeLogService(event.getBundle());
}
synchronized ExtendedLogServiceImpl getLogService(Bundle bundle) {
ExtendedLogServiceImpl logService = (ExtendedLogServiceImpl) logServices.get(bundle);
if (logService == null) {
logService = new ExtendedLogServiceImpl(this, bundle);
if (bundle != null && bundle.getState() != Bundle.UNINSTALLED)
logServices.put(bundle, logService);
}
return logService;
}
synchronized void shutdown() {
logServices.clear();
}
synchronized void removeLogService(Bundle bundle) {
logServices.remove(bundle);
}
boolean isLoggable(Bundle bundle, String name, int level) {
return logReaderServiceFactory.isLoggable(bundle, name, level);
}
void log(Bundle bundle, String name, Object context, int level, String message, Throwable exception) {
logReaderServiceFactory.log(bundle, name, context, level, message, exception);
}
void checkLogPermission() throws SecurityException {
SecurityManager sm = System.getSecurityManager();
if (sm != null)
sm.checkPermission(logPermission);
}
}