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