aboutsummaryrefslogtreecommitdiffstats
path: root/svc/svcmgr/src
diff options
context:
space:
mode:
Diffstat (limited to 'svc/svcmgr/src')
-rw-r--r--svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.java24
-rw-r--r--svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/EplService.java213
-rw-r--r--svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.java18
-rw-r--r--svc/svcmgr/src/main/webapp/WEB-INF/web.xml22
-rw-r--r--svc/svcmgr/src/main/webapp/index.jsp8
5 files changed, 285 insertions, 0 deletions
diff --git a/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.java b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.java
new file mode 100644
index 0000000..69a5f44
--- /dev/null
+++ b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.java
@@ -0,0 +1,24 @@
+package com.cablelabs.vcpe.svc.svcmgr;
+
+import javax.ws.rs.container.ContainerRequestContext;
+import javax.ws.rs.container.ContainerResponseContext;
+import javax.ws.rs.container.ContainerResponseFilter;
+import javax.ws.rs.core.MultivaluedMap;
+import java.io.IOException;
+
+//
+// enable cross origin responses, otherwise we can't send rest requests from domain different than that of the server hosting our service
+//
+
+public class CORSResponseFilter implements ContainerResponseFilter {
+
+ public void filter(ContainerRequestContext requestContext, ContainerResponseContext responseContext)
+ throws IOException {
+
+ MultivaluedMap<String, Object> headers = responseContext.getHeaders();
+ headers.add("Access-Control-Allow-Origin", "*");
+ headers.add("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
+ headers.add("Access-Control-Allow-Headers", "X-Requested-With, Content-Type, X-Codingpedia");
+ }
+
+}
diff --git a/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/EplService.java b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/EplService.java
new file mode 100644
index 0000000..7f7510d
--- /dev/null
+++ b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/EplService.java
@@ -0,0 +1,213 @@
+package com.cablelabs.vcpe.svc.svcmgr;
+
+
+import com.cablelabs.vcpe.common.Dbg;
+import com.cablelabs.vcpe.evc.evcbase.client.EvcClient;
+import com.cablelabs.vcpe.svc.svcbase.model.Epl;
+import com.cablelabs.vcpe.svc.svcbase.repository.EplRespositoryInMem;
+import com.cablelabs.vcpe.evc.evcbase.model.Evc;
+
+
+import javax.ws.rs.*;
+import javax.ws.rs.core.GenericEntity;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.core.Response;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * Root resource (exposed at "svc/epl" path)
+ */
+
+@Path("svc/epl")
+public class EplService {
+
+ @POST
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ //--------------------------------------------------------
+ public Response create(Epl epl)
+ //--------------------------------------------------------
+ {
+ if ( epl == null) {
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ Dbg.p("\nADDING [" + epl.getId() + "] to epl repo");
+
+ //
+ // Create an EVC
+ //
+
+ Evc evcForEpl = new Evc();
+
+ // Uni IDs set at lower layers
+ List<String> uniIdList = new ArrayList<String>();
+ uniIdList.add("unset");
+ uniIdList.add("unset");
+
+ // Transfer EPLs mac list to EVC
+ List<String> uniMacList = new ArrayList<String>();
+ if (epl.getUniHostMacList() != null && epl.getUniHostMacList().size() == 2) {
+ uniMacList.add(epl.getUniHostMacList().get(0) );
+ uniMacList.add(epl.getUniHostMacList().get(1));
+ }
+ else {
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ // Transfer EPLs I{P list to EVC
+ List<String> uniIpList = new ArrayList<String>();
+ if (epl.getUniHostIpList() != null && epl.getUniHostIpList().size() == 2) {
+ uniIpList.add(epl.getUniHostIpList().get(0) );
+ uniIpList.add(epl.getUniHostIpList().get(1));
+ }
+ else {
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ // evc mgr will set perf props based on CoS. We need to set everything else
+ evcForEpl.setAllNonPerfProps( "unset", // set by lower layer (id)
+ Evc.EvcType.POINT_TO_POINT, // required for EPL (evcType)
+ 2, // required for EPL (maxUnis)
+ uniIdList, // created above
+ uniMacList, uniIpList, // passed in
+ Evc.FrameDelivery.UNCONDITIONAL, // required for EPL (unicastFrameDelivery)
+ Evc.FrameDelivery.UNCONDITIONAL, // required for EPL (multicastFrameDelivery)
+ Evc.FrameDelivery.UNCONDITIONAL, // required for EPL (broadcastFrameDelivery)
+ true, // required for EPL (ceVLanIdPreservation)
+ true, // required for EPL (ceVlanCosPreservation)
+ 1600, // hard coded, need to figure out source !!
+ epl.getCos());
+
+ // send create request to EVC mgr
+ EvcClient evcClient = new EvcClient();
+ evcForEpl= evcClient.create(evcForEpl);
+
+ // EVC Layer generates the ID, we need to capture it
+ epl.setEvcId(evcForEpl.getId());
+
+ // Now add the EPL to our local repo
+ EplRespositoryInMem.INSTANCE.add(epl);
+ EplRespositoryInMem.INSTANCE.dump(0);
+ return Response.ok().entity(epl).build();
+ }
+
+ @PUT
+ @Path("{eplId}")
+ @Consumes(MediaType.APPLICATION_JSON)
+ @Produces(MediaType.APPLICATION_JSON)
+ //--------------------------------------------------------
+ public Response update(Epl epl)
+ //--------------------------------------------------------
+ {
+ Dbg.p("\nUPDATING [" + epl.getId()+"]");
+
+ EplRespositoryInMem.INSTANCE.update(epl);
+ EplRespositoryInMem.INSTANCE.dump(0);
+ return Response.ok().entity(epl).build();
+ }
+
+ @GET
+ @Path("{eplId}")
+ @Produces(MediaType.APPLICATION_JSON)
+ //--------------------------------------------------------
+ public Response get( @PathParam("eplId") String eplId )
+ //--------------------------------------------------------
+ {
+ if ( eplId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+ Dbg.p("\nRETRIEVING ["+eplId+"]");
+ Epl epl = EplRespositoryInMem.INSTANCE.get(eplId);
+ if (epl == null) {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ }
+ epl.dump(1);
+ return Response.ok().entity(epl).build();
+ }
+
+ @GET
+ @Path("list")
+ @Produces(MediaType.APPLICATION_JSON)
+ //--------------------------------------------------------
+ public Response eplList()
+ //--------------------------------------------------------
+
+ // get a list of all Epl objects
+ {
+ Dbg.p("\nEPL GET ALL:");
+ List eplList = EplRespositoryInMem.INSTANCE.getAll();
+ if (eplList == null )
+ {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ }
+ return Response.ok().entity(new GenericEntity<List<Epl>>(eplList) {}).build();
+ }
+
+ @DELETE
+ @Path("{eplId}")
+ //--------------------------------------------------------
+ public Response delete(@PathParam("eplId") String eplId)
+ //--------------------------------------------------------
+ {
+ if ( eplId == null) {
+ return Response.status(Response.Status.BAD_REQUEST).build();
+ }
+
+ // grab the full EPL so that we can get EVC ID to delete
+ Epl epl = EplRespositoryInMem.INSTANCE.get(eplId);
+ if (epl == null) {
+ return Response.status(Response.Status.NOT_FOUND).build();
+ }
+ String evcId = epl.getEvcId();
+
+ // Delete the EVC associated with the EPL being deleted
+ EvcClient evcClient = new EvcClient();
+ evcClient.delete(evcId);
+
+ Dbg.p("\nDELETE:" + eplId);
+ EplRespositoryInMem.INSTANCE.delete(eplId);
+ EplRespositoryInMem.INSTANCE.dump(0);
+ return Response.ok().build();
+ }
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ //--------------------------------------------------------
+ public Epl testGet()
+ //--------------------------------------------------------
+ // simple get to check out json format
+
+ {
+ long numLocations = 2;
+
+ List<String> locList = new ArrayList<String>();
+ locList.add("1111 MEF Dr, Honolulu HI, USA");
+ locList.add("2222 MEF Dr, Boston MA, MAS");
+
+ List<String> uniList = new ArrayList<String>();
+ uniList.add("00:0a:95:9d:68:16");
+ uniList.add("00:A0:C9:14:C8:29");
+
+ List<String> ipList = new ArrayList<String>();
+ ipList.add("192.168.1.10");
+ ipList.add("192.168.1.10");
+
+ Epl epl = new Epl();
+ epl.setAllProps("epl-1", numLocations, locList, uniList, ipList, "gold", "unset");
+ return epl;
+ }
+
+ @GET
+ @Produces(MediaType.TEXT_PLAIN)
+ //--------------------------------------------------------
+ public String ping()
+ //--------------------------------------------------------
+ // simple ping to check connectivity
+
+ {
+ Dbg.p("In Epl Service: ping test");
+ return "... pingEpl reponse";
+ }
+}
diff --git a/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.java b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.java
new file mode 100644
index 0000000..5d92220
--- /dev/null
+++ b/svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.java
@@ -0,0 +1,18 @@
+package com.cablelabs.vcpe.svc.svcmgr;
+
+import org.glassfish.jersey.server.ResourceConfig;
+
+//
+// In order to avoid CORS issues, register our CORS Response filter
+//
+
+public class SvcJaxRsApplication extends ResourceConfig {
+
+ /**
+ * Register JAX-RS application components.
+ */
+ public SvcJaxRsApplication() {
+ packages("com.cablelabs.vcpe.cos.cosmgr");
+ register(CORSResponseFilter.class);
+ }
+} \ No newline at end of file
diff --git a/svc/svcmgr/src/main/webapp/WEB-INF/web.xml b/svc/svcmgr/src/main/webapp/WEB-INF/web.xml
new file mode 100644
index 0000000..06f0b7c
--- /dev/null
+++ b/svc/svcmgr/src/main/webapp/WEB-INF/web.xml
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!-- This web.xml file is not required when using Servlet 3.0 container,
+ see implementation details http://jersey.java.net/nonav/documentation/latest/jax-rs.html -->
+<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+ <servlet>
+ <servlet-name>Jersey Web Application</servlet-name>
+ <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
+ <init-param>
+ <param-name>jersey.config.server.provider.packages</param-name>
+ <param-value>com.cablelabs.vcpe.svc</param-value>
+ </init-param>
+ <init-param>
+ <param-name>javax.ws.rs.Application</param-name>
+ <param-value>com.cablelabs.vcpe.svc.svcmgr.SvcJaxRsApplication</param-value>
+ </init-param>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Jersey Web Application</servlet-name>
+ <url-pattern>/webapi/*</url-pattern>
+ </servlet-mapping>
+</web-app>
diff --git a/svc/svcmgr/src/main/webapp/index.jsp b/svc/svcmgr/src/main/webapp/index.jsp
new file mode 100644
index 0000000..a064b45
--- /dev/null
+++ b/svc/svcmgr/src/main/webapp/index.jsp
@@ -0,0 +1,8 @@
+<html>
+<body>
+ <h2>Jersey RESTful Web Application!</h2>
+ <p><a href="webapi/myresource">Jersey resource</a>
+ <p>Visit <a href="http://jersey.java.net">Project Jersey website</a>
+ for more information on Jersey!
+</body>
+</html>