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