blob: c7d8e2669a0289c9577193e49a29b41125a73ce1 [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.compendium;
import java.io.PrintWriter;
import java.util.Dictionary;
import java.util.Enumeration;
import org.apache.felix.webconsole.internal.AbstractConfigurationPrinter;
import org.osgi.framework.BundleContext;
import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.osgi.service.wireadmin.Envelope;
import org.osgi.service.wireadmin.Wire;
import org.osgi.service.wireadmin.WireAdmin;
/**
* WireAdminConfigurationPrinter reads the configured wires in WireAdmin service, and
* prints them along their properties and values.
*/
public final class WireAdminConfigurationPrinter extends AbstractConfigurationPrinter
{
private static final String TITLE = "Wire Admin";
private static final String WIRE_ADMIN_NAME = "org.osgi.service.wireadmin.WireAdmin"; //$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 ref = bc.getServiceReference( WIRE_ADMIN_NAME );
try
{
final Object service = ref != null ? bc.getService(ref) : null;
if (service == null)
{
pw.println("Status: Wire Admin service not available");
}
else
{
final WireAdmin wireAdmin = (WireAdmin) service;
final Wire wires[] = wireAdmin.getWires(null);
if (null == wires || 0 == wires.length)
{
pw.println("Status: No wires available");
}
else
{
final int len = wires.length;
int valid = 0;
int connected = 0;
// status
for (int i = 0; i < len; i++)
{
final Wire wire = wires[i];
if (wire.isValid())
valid++;
if (wire.isConnected())
connected++;
}
pw.print("Status: ");
pw.print(len);
pw.print(" wires available, ");
pw.print(valid);
pw.print(" valid, ");
pw.print(connected);
pw.print(" connected.");
pw.println();
pw.println();
// print wires
for (int i = 0; i < len; i++)
{
pw.print("#"); //$NON-NLS-1$
pw.print(i);
print(wires[i], pw);
}
}
}
}
catch (InvalidSyntaxException ie)
{
// thrown by wireAdmin.getWires(null) - will not happen, we are not setting filter.
}
finally
{
if (ref != null)
bc.ungetService(ref);
}
}
private static final void print(Wire wire, PrintWriter pw)
{
pw.print(" Valid: ");
pw.println(wire.isValid());
pw.print(" Connected: ");
pw.println(wire.isConnected());
final Object val = wire.poll();
if (null == val)
{
pw.println(" Value: null");
}
else if (val instanceof Envelope)
{
print(0, (Envelope) val, pw);
}
else if (val instanceof Envelope[])
{
final Envelope values[] = (Envelope[]) val;
for (int i = 0, len = values.length; i < len; i++)
{
print(i, values[i], pw);
}
}
else
{
pw.print(" Value: ");
pw.print(val);
pw.print(" ("); //$NON-NLS-1$
pw.print(val.getClass().getName());
pw.println(")"); //$NON-NLS-1$
}
String[] scope = wire.getScope();
if (scope == null)
{
pw.println(" Scope: none");
}
else
{
pw.println(" Scope: ");
for (int i = 0, len = scope.length; i < len; i++)
{
pw.print(" "); //$NON-NLS-1$
pw.println(scope[i]);
}
}
Class[] flavors = wire.getFlavors();
if (flavors == null)
{
pw.println(" Flavors: none");
}
else
{
pw.print(" Flavors: ");
for (int i = 0, len = flavors.length; i < len; i++)
{
pw.print(flavors[i].getName());
if (i < len - 1)
pw.print(", "); //$NON-NLS-1$
}
pw.println();
}
Dictionary props = wire.getProperties();
if (props == null)
{
pw.println(" Properties: none");
}
else
{
pw.println(" Properties: ");
for (Enumeration e = props.keys(); e.hasMoreElements();)
{
final Object key = e.nextElement();
pw.print(" "); //$NON-NLS-1$
pw.print(key.toString());
pw.print('=');
pw.println(props.get(key));
}
}
pw.println();
}
private static final void print(int index, Envelope envelope, PrintWriter pw)
{
pw.print(" : Envelope #");
pw.print(index);
pw.print("[scope=");
pw.print(envelope.getScope());
pw.print(",identification=");
pw.print(envelope.getIdentification());
pw.print(",value=");
pw.print(envelope.getValue());
pw.println("]");
}
}