package de.twenty11.skysail.server.ext.osgimonitor.resources; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; 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.representation.Representation; import org.restlet.representation.StringRepresentation; import org.restlet.resource.Get; import org.restlet.resource.Post; import org.restlet.resource.ResourceException; 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.domain.ServiceDescriptor; import de.twenty11.skysail.server.restlet.SkysailApplication; /** * Restlet Resource for OSGi Services. * * The managed entity is of type {@link ServiceDescriptor}. * */ @Presentation(preferred = PresentationStyle.LIST2) public class ServicesResource extends ListServerResource2<ServiceDescriptor> { private List<ServiceReference> services = Collections.emptyList(); public ServicesResource() { setName("osgimonitor bundles resource"); setDescription("The resource containing the list of bundles"); } /** * initializes the services collection from the bundleContext. */ @Override protected void doInit() throws ResourceException { try { BundleContext bundleContext = ((SkysailApplication) getApplication()).getBundleContext(); ServiceReference[] allServiceReferences = bundleContext.getAllServiceReferences(null, null); services = Arrays.asList(allServiceReferences); } catch (InvalidSyntaxException e) { throw new ResourceException(e); } } @Override @Get("html|json|csv") public SkysailResponse<List<ServiceDescriptor>> getEntities() { return getEntities("Listing of all services:"); } @Override protected List<ServiceDescriptor> getData() { List<ServiceDescriptor> result = new ArrayList<ServiceDescriptor>(); for (ServiceReference sr : services) { ServiceDescriptor descriptor = new ServiceDescriptor(sr, getReference()); result.add(descriptor); } Collections.sort(result); return result; } @Post public Representation install(String location) { String prefix = "prefix"; if (!location.startsWith(prefix)) { return new StringRepresentation("location didn't start with '" + prefix + "'"); } return new StringRepresentation("success"); } @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; } }