package de.twenty11.skysail.server.ext.osgimonitor.resources;
import java.util.ArrayList;
import java.util.List;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
import org.osgi.framework.wiring.BundleCapability;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.framework.wiring.BundleWire;
import org.osgi.framework.wiring.BundleWiring;
import org.restlet.data.Form;
import org.restlet.resource.Get;
import de.twenty11.skysail.common.Presentation;
import de.twenty11.skysail.common.PresentationStyle;
import de.twenty11.skysail.common.responses.SkysailResponse;
import de.twenty11.skysail.server.core.restlet.ListServerResource2;
import de.twenty11.skysail.server.ext.osgimonitor.OsgiMonitorViewerApplication;
import de.twenty11.skysail.server.ext.osgimonitor.domain.Capability;
@Presentation(preferred = PresentationStyle.LIST2)
public class CapabilitiesResource extends ListServerResource2<Capability> {
@Override
@Get("html|json|csv")
public SkysailResponse<List<Capability>> getEntities() {
return getEntities("All Capabilities");
}
@Override
protected List<Capability> getData() {
List<Capability> result = new ArrayList<Capability>();
OsgiMonitorViewerApplication app = (OsgiMonitorViewerApplication) getApplication();
BundleContext bundleContext = app.getBundleContext();
Bundle[] bundles = bundleContext.getBundles();
for (Bundle bundle : bundles) {
addCapabilities(result, bundle);
}
return result;
}
private void addCapabilities(List<Capability> result, Bundle bundle) {
BundleWiring bw = bundle.adapt(BundleWiring.class);
if (bw == null) {
return;
}
List<BundleWire> providedWires = bw.getProvidedWires(BundleRevision.PACKAGE_NAMESPACE);
for (BundleCapability cap : bw.getCapabilities(BundleRevision.PACKAGE_NAMESPACE)) {
result.add(new Capability(cap, bundle));
}
}
@Override
public Capability getData(Form form) {
// TODO Auto-generated method stub
return null;
}
@Override
public SkysailResponse<?> addEntity(Capability entity) {
// TODO Auto-generated method stub
return null;
}
}