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.BundleRequirement;
import org.osgi.framework.wiring.BundleRevision;
import org.osgi.framework.wiring.BundleWire;
import org.osgi.framework.wiring.BundleWiring;
import org.restlet.data.Form;
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.Requirement;
@Presentation(preferred = PresentationStyle.LIST2)
public class RequirementsResource extends ListServerResource2<Requirement> {
@Override
protected List<Requirement> getData() {
List<Requirement> result = new ArrayList<Requirement>();
OsgiMonitorViewerApplication app = (OsgiMonitorViewerApplication) getApplication();
BundleContext bundleContext = app.getBundleContext();
Bundle[] bundles = bundleContext.getBundles();
for (Bundle bundle : bundles) {
addRequirements(result, bundle);
}
return result;
}
private void addRequirements(List<Requirement> result, Bundle bundle) {
BundleWiring bw = bundle.adapt(BundleWiring.class);
if (bw == null) {
return;
}
List<BundleWire> providedWires = bw.getProvidedWires(BundleRevision.PACKAGE_NAMESPACE);
for (BundleRequirement cap : bw.getRequirements(BundleRevision.PACKAGE_NAMESPACE)) {
result.add(new Requirement(cap));
}
}
@Override
public Requirement getData(Form form) {
// TODO Auto-generated method stub
return null;
}
@Override
public SkysailResponse<?> addEntity(Requirement entity) {
// TODO Auto-generated method stub
return null;
}
}