package com.bpedman.osgisample.entity.rest;
import aQute.bnd.annotation.component.Activate;
import aQute.bnd.annotation.component.Component;
import aQute.bnd.annotation.component.Deactivate;
import aQute.bnd.annotation.component.Reference;
import com.bpedman.osgisample.entity.Node;
import com.bpedman.osgisample.entity.NodeService;
import org.apache.cxf.endpoint.Server;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.jaxrs.lifecycle.SingletonResourceProvider;
import org.codehaus.jackson.jaxrs.JacksonJsonProvider;
import javax.jws.WebService;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
/**
* User: bpedersen
* Date: 8/5/13
*/
@WebService
@Path("/")
@Component(
name = "NodeServiceRest",
immediate = true
)
public class NodeServiceRest {
private NodeService nodeService;
private Server server = null;
@Reference
public void setNodeService(NodeService nodeService) {
this.nodeService = nodeService;
}
public void unsetNodeService(NodeService nodeService) {
this.nodeService = null;
}
@Activate
public void activate() {
JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setResourceClasses(getClass());
sf.setResourceProvider(getClass(), new SingletonResourceProvider(this));
sf.setAddress("/node");
sf.setProvider(new JacksonJsonProvider());
server = sf.create();
}
@Deactivate
public void deactivate() {
if (server != null) {
server.stop();
server.destroy();
server = null;
}
}
@GET
@Path("{id}")
@Produces(MediaType.APPLICATION_JSON)
public Response getNode(@PathParam("id") String id) {
Node node = nodeService.getNode(id);
if (node != null) {
return Response.ok(node).build();
} else {
return Response.status(Response.Status.NOT_FOUND).build();
}
}
@POST
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response addNode(Node node) {
return Response.ok(nodeService.addNode(node)).build();
}
@PUT
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
@Path("{id}")
public Response updateNode(@PathParam("id") String id, Node node) {
return Response.ok(nodeService.updateNode(id, node)).build();
}
@DELETE
@Path("{id}")
public Response deleteNode(@PathParam("id") String id) {
nodeService.deleteNode(id);
return Response.noContent().build();
}
@GET
@Produces(MediaType.APPLICATION_JSON)
public java.util.Collection<Node> getNodes() {
return nodeService.getNodes();
}
}