org.ops4j.pax.logging.internal.BundleHelper Maven / Gradle / Ivy
/*
* Copyright 2010 Guillaume Nodet.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
* implied.
*
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.ops4j.pax.logging.internal;
import java.lang.reflect.Method;
import org.osgi.framework.Bundle;
import org.osgi.framework.FrameworkUtil;
public final class BundleHelper
{
private BundleHelper()
{
}
private static final SecurityManagerEx securityManager;
private static final Method getBundleMethod;
static
{
securityManager = new SecurityManagerEx();
Method mth = null;
try
{
mth = FrameworkUtil.class.getMethod("getBundle", new Class[] { Class.class });
}
catch (NoSuchMethodException e)
{
}
getBundleMethod = mth;
}
public static Bundle getCallerBundle(Bundle defaultBundle)
{
if (getBundleMethod == null) {
return defaultBundle;
}
try
{
Class[] classCtx = securityManager.getClassContext();
/* Skip first 2 classes on call stack since:
* classCtx[0] is always SecurityManagerEx.getClassContext()
* classCtx[1] is always BundleHelper.getCallerBundle()
*/
Bundle curBundle = null;
for (int i = 2; i < classCtx.length; i++)
{
Bundle bundle = FrameworkUtil.getBundle(classCtx[i]);
if (bundle == null)
{
return defaultBundle;
}
else if (curBundle == null)
{
curBundle = bundle;
}
else if (bundle != curBundle)
{
return bundle;
}
}
}
catch (Exception e)
{
}
return defaultBundle;
}
static class SecurityManagerEx extends SecurityManager
{
public Class[] getClassContext()
{
return super.getClassContext();
}
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy