blob: f4960373849e3eda0761a5bf4cc09ed1faaa2f29 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2011 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.auth;
import java.util.ArrayList;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.osgi.framework.log.FrameworkLog;
import org.eclipse.osgi.framework.log.FrameworkLogEntry;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;
public class Activator implements BundleActivator {
private static BundleContext bundleContext;
private static ServiceTracker logTracker;
/*
* Return this activator's bundle context.
*/
public static BundleContext getContext() {
return bundleContext;
}
/* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
Activator.bundleContext = context;
}
/* (non-Javadoc)
* @see org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
if (logTracker != null) {
logTracker.close();
logTracker = null;
}
Activator.bundleContext = null;
}
/*
* Log the given status in the framework log.
*/
public static void log(IStatus status) {
if (logTracker == null) {
logTracker = new ServiceTracker(getContext(), FrameworkLog.class.getName(), null);
logTracker.open();
}
FrameworkLog log = (FrameworkLog) logTracker.getService();
log.log(getEntry(status));
}
/*
* Copied code from PlatformLogWriter to convert a status object into
* a FrameworkLogEntry.
*/
private static FrameworkLogEntry getEntry(IStatus status) {
Throwable t = status.getException();
ArrayList childlist = new ArrayList();
int stackCode = t instanceof CoreException ? 1 : 0;
// ensure a sub-status inside a CoreException is properly logged
if (stackCode == 1) {
IStatus coreStatus = ((CoreException) t).getStatus();
if (coreStatus != null)
childlist.add(getEntry(coreStatus));
}
if (status.isMultiStatus()) {
IStatus[] children = status.getChildren();
for (int i = 0; i < children.length; i++)
childlist.add(getEntry(children[i]));
}
FrameworkLogEntry[] children = (FrameworkLogEntry[]) (childlist.size() == 0 ? null : childlist.toArray(new FrameworkLogEntry[childlist.size()]));
return new FrameworkLogEntry(status, status.getPlugin(), status.getSeverity(), status.getCode(), status.getMessage(), stackCode, t, children);
}
}