blob: 1701350edb577a4b38c21b0abeb35d3e2c4b3dcd [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.apache.felix.webconsole.internal.core;
import java.io.PrintWriter;
import java.lang.reflect.Method;
import java.util.Enumeration;
import org.apache.felix.webconsole.internal.AbstractConfigurationPrinter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.condpermadmin.ConditionInfo;
import org.osgi.service.condpermadmin.ConditionalPermissionAdmin;
import org.osgi.service.condpermadmin.ConditionalPermissionInfo;
import org.osgi.service.permissionadmin.PermissionAdmin;
import org.osgi.service.permissionadmin.PermissionInfo;
/**
* PermissionsPrinter reads the given permissions from PermissionAdmin and
* ConditionalPermissionAdmin and prints them.
*/
public final class PermissionsConfigurationPrinter extends AbstractConfigurationPrinter
{
private static final String TITLE = "Permissions";
private static final String PERMISSION_ADMIN_NAME = "org.osgi.service.permissionadmin.PermissionAdmin"; //$NON-NLS-1$
private static final String CONDITIONAL_PERMISSION_ADMIN_NAME = "org.osgi.service.condpermadmin.ConditionalPermissionAdmin"; //$NON-NLS-1$
/**
* @see org.apache.felix.webconsole.ConfigurationPrinter#getTitle()
*/
public final String getTitle()
{
return TITLE;
}
/**
* @see org.apache.felix.webconsole.ConfigurationPrinter#printConfiguration(java.io.PrintWriter)
*/
public final void printConfiguration(PrintWriter pw)
{
final BundleContext bc = getBundleContext();
final ServiceReference paRef = bc.getServiceReference( PERMISSION_ADMIN_NAME );
final ServiceReference cpaRef = bc.getServiceReference( CONDITIONAL_PERMISSION_ADMIN_NAME );
final Object paSvc = paRef != null ? bc.getService(paRef) : null;
final Object cpaSvc = cpaRef != null ? bc.getService(cpaRef) : null;
try
{
pw.print("Status: Permission Admin ");
if (null == paSvc)
pw.print("not ");
pw.print("available, Conditional Permission Admin ");
if (null == cpaSvc)
pw.print("not ");
pw.println("available.");
if (paSvc != null)
{
final PermissionAdmin pa = (PermissionAdmin) paSvc;
pw.println();
pw.println("Permission Admin");
pw.println(" Default Permissions:");
print(pa.getDefaultPermissions(), pw);
final String locations[] = pa.getLocations();
for (int i = 0; locations != null && i < locations.length; i++)
{
pw.print(" Location: ");
pw.println(locations[i]);
print(pa.getPermissions(locations[i]), pw);
}
}
if (cpaSvc != null)
{
final ConditionalPermissionAdmin cpa = (ConditionalPermissionAdmin) cpaSvc;
pw.println();
pw.println("Conditional Permission Admin");
Method getAccessDecision = null;
try
{
getAccessDecision = ConditionalPermissionInfo.class.getMethod( "getAccessDecision",
( Class[] ) null );
}
catch (Throwable t)
{
// it is r4.0 framework, not r4.2
}
boolean hasPermissions = false;
//final java.util.List list = cpa.newConditionalPermissionUpdate().getConditionalPermissionInfos();
//for (int i = 0; list != null && i < list.size(); i++)
for (Enumeration e = cpa.getConditionalPermissionInfos(); e.hasMoreElements();)
{
hasPermissions = true;
//final ConditionalPermissionInfo info = (ConditionalPermissionInfo) list.get(i);
final ConditionalPermissionInfo info = (ConditionalPermissionInfo) e.nextElement();
pw.print(" "); //$NON-NLS-1$
pw.print(info.getName());
if (getAccessDecision != null)
{
try
{
final Object ad = getAccessDecision.invoke( info, ( Object[] ) null );
pw.print(" ("); //$NON-NLS-1$
pw.print(ad);
pw.print(")"); //$NON-NLS-1$
}
catch (Throwable t)
{
// ignore - will not print it
}
}
pw.println();
pw.println(" Conditions:");
print(info.getConditionInfos(), pw);
pw.println(" Permissions:");
print(info.getPermissionInfos(), pw);
}
if (!hasPermissions)
pw.println(" n/a");
}
}
finally
{
if (paRef != null)
bc.ungetService(paRef);
if (cpaRef != null)
bc.ungetService(cpaRef);
}
}
private static final void print(PermissionInfo[] infos, PrintWriter pw)
{
if (infos == null || infos.length == 0)
{
pw.println(" n/a");
}
else
{
for (int i = 0, len = infos.length; i < len; i++)
{
pw.print(" "); //$NON-NLS-1$
pw.println(infos[i].getEncoded());
}
}
pw.println();
}
private static final void print(ConditionInfo[] infos, PrintWriter pw)
{
if (infos == null || infos.length == 0)
{
pw.println(" empty conditions set");
}
else
{
for (int i = 0, len = infos.length; i < len; i++)
{
pw.print(" "); //$NON-NLS-1$
pw.println(infos[i].getEncoded());
}
}
pw.println();
}
}