package de.twenty11.skysail.server.ext.osgimonitor.resources; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.osgi.framework.BundleContext; import org.osgi.framework.InvalidSyntaxException; import org.osgi.framework.ServiceReference; import org.restlet.data.Form; import org.restlet.resource.Get; import org.restlet.resource.ResourceException; import de.twenty11.skysail.common.responses.SkysailResponse; import de.twenty11.skysail.server.core.restlet.UniqueResultServerResource2; import de.twenty11.skysail.server.ext.osgimonitor.OsgiMonitorViewerApplication; import de.twenty11.skysail.server.ext.osgimonitor.domain.ServiceDescriptor; public class ServiceResource extends UniqueResultServerResource2<ServiceDescriptor> { private Long serviceId; private List<ServiceReference> services = new ArrayList<ServiceReference>(); @Override protected void doInit() throws ResourceException { serviceId = Long.valueOf((String) getRequest().getAttributes().get("serviceId")); OsgiMonitorViewerApplication app = (OsgiMonitorViewerApplication) getApplication(); BundleContext bundleContext = app.getBundleContext(); if (bundleContext != null) { try { ServiceReference[] allServiceReferences = bundleContext.getAllServiceReferences(null, null); services = Arrays.asList(allServiceReferences); } catch (InvalidSyntaxException e) { throw new ResourceException(e); } } } @Override @Get("html|json") public SkysailResponse<ServiceDescriptor> getEntity() { return getEntity("Details for service " + serviceId); } @Override protected ServiceDescriptor getData() { for (ServiceReference sr : services) { ServiceDescriptor serviceDescriptor = new ServiceDescriptor(sr, getReference()); if (serviceDescriptor.getServiceId().equals(serviceId)) { return serviceDescriptor; } } return null; } @Override public ServiceDescriptor getData(Form form) { // TODO Auto-generated method stub return null; } @Override public SkysailResponse<?> addEntity(ServiceDescriptor entity) { // TODO Auto-generated method stub return null; } }