| /******************************************************************************* |
| * 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); |
| } |
| |
| } |