blob: 0a8dd97b8c718c34165a09280c40b4ead013d9b6 [file] [log] [blame]
package org.apache.karaf.webconsole.osgi.internal;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import org.apache.karaf.webconsole.core.BasePage;
import org.apache.wicket.PageParameters;
import org.apache.wicket.behavior.SimpleAttributeModifier;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.markup.html.link.Link;
import org.apache.wicket.markup.html.list.ListItem;
import org.apache.wicket.markup.html.list.ListView;
import org.ops4j.pax.wicket.api.PaxWicketBean;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.ServiceReference;
import org.osgi.service.startlevel.StartLevel;
/**
* Homepage
*/
public class HomePage extends BasePage {
@PaxWicketBean(name = "blueprintBundleContext")
private BundleContext context;
// TODO Add any page properties or variables here
interface ItemClassModifier {
List<String> getCssClasses(Bundle bundle);
}
class SystemBundleClassModifier implements ItemClassModifier {
public List<String> getCssClasses(Bundle bundle) {
List<String> classes = new ArrayList<String>();
if (bundle.getBundleId() == 0) {
classes.add("framework");
}
ServiceReference startLevelReference = context.getServiceReference(StartLevel.class.getName());
if (startLevelReference != null) {
StartLevel startLevel = (StartLevel) context.getService(startLevelReference);
int bundleStartLevel = startLevel.getBundleStartLevel(bundle);
if (bundleStartLevel < startLevel.getInitialBundleStartLevel()) {
classes.add("system");
}
context.ungetService(startLevelReference);
}
return classes;
}
}
class BlueprintClassModifier implements ItemClassModifier {
public List<String> getCssClasses(Bundle bundle) {
List<String> classes = new ArrayList<String>();
ServiceReference[] registeredServices = bundle.getRegisteredServices();
if (registeredServices != null) {
for (ServiceReference reference : registeredServices) {
List<String> oc = Arrays.asList((String[]) reference.getProperty("objectClass"));
if (oc.contains("org.osgi.service.blueprint.container.BlueprintContainer")) {
classes.add("blueprint");
break;
}
}
}
return classes;
}
}
class SpringClassModifier implements ItemClassModifier {
public List<String> getCssClasses(Bundle bundle) {
List<String> classes = new ArrayList<String>();
ServiceReference[] registeredServices = bundle.getRegisteredServices();
if (registeredServices != null) {
for (ServiceReference reference : registeredServices) {
List<String> oc = Arrays.asList((String[]) reference.getProperty("objectClass"));
if (oc.contains("org.springframework.context.ApplicationContext")) {
classes.add("spring");
break;
}
}
}
return classes;
}
}
/**
* Constructor that is invoked when page is invoked without a session.
*
* @param parameters Page parameters
*/
public HomePage() {
final List<ItemClassModifier> modifiers = new ArrayList<HomePage.ItemClassModifier>();
modifiers.add(new SystemBundleClassModifier());
modifiers.add(new BlueprintClassModifier());
modifiers.add(new SpringClassModifier());
List<Bundle> model = context == null ? new ArrayList() : Arrays.asList(context.getBundles());
add(new ListView<Bundle>("bundles", model) {
@Override
protected void populateItem(ListItem<Bundle> item) {
final Bundle bundle = item.getModelObject();
item.add(new Label("id", "" + bundle.getBundleId()));
item.add(new Label("symbolicName", bundle.getSymbolicName()));
item.add(new Label("version", bundle.getVersion().toString()));
List<String> classes = new ArrayList<String>() {
@Override
public String toString() {
String toString = "";
for (String item : this) {
toString += " " + item;
}
return toString;
}
};
for (ItemClassModifier modifier : modifiers) {
classes.addAll(modifier.getCssClasses(bundle));
}
item.add(new SimpleAttributeModifier("class", classes.toString()));
item.add(new Link("link") {
@Override
public void onClick() {
PageParameters params = new PageParameters();
params.put("bundleId", bundle.getBundleId());
setResponsePage(new DetailsPage(params));
}
});
}
});
}
@Override
protected List<Class> getSubPages() {
List<Class> subpages = new LinkedList<Class>();
subpages.add(ConfigurationsPage.class);
subpages.add(EventsPage.class);
return subpages;
}
}