From ed73dbf357aff41edcbab401a94e5fbc266d9391 Mon Sep 17 00:00:00 2001 From: Mufaddal Makati Date: Fri, 7 Aug 2015 13:09:49 -0700 Subject: First Commit --- README.md | 139 ++ common/pom.xml | 17 + .../main/java/com/cablelabs/vcpe/common/Dbg.java | 24 + .../classes/com/cablelabs/vcpe/common/Dbg.class | Bin 0 -> 1200 bytes common/target/common.jar | Bin 0 -> 2690 bytes common/target/maven-archiver/pom.properties | 5 + .../compile/default-compile/createdFiles.lst | 1 + .../compile/default-compile/inputFiles.lst | 1 + cos/cosbase/pom.xml | 23 + .../vcpe/cos/cosbase/client/CoSClient.java | 151 ++ .../vcpe/cos/cosbase/model/BandwidthProfile.java | 27 + .../com/cablelabs/vcpe/cos/cosbase/model/CoS.java | 86 ++ .../cos/cosbase/repository/CoSRespository.java | 22 + .../cosbase/repository/CoSRespositoryInMem.java | 74 + .../vcpe/cos/cosbase/client/CoSClientTest.java | 105 ++ .../cos/cosbase/repository/CoSRepositoryTest.java | 63 + .../vcpe/cos/cosbase/client/CoSClient$1.class | Bin 0 -> 748 bytes .../vcpe/cos/cosbase/client/CoSClient.class | Bin 0 -> 4135 bytes .../vcpe/cos/cosbase/model/BandwidthProfile.class | Bin 0 -> 1338 bytes .../com/cablelabs/vcpe/cos/cosbase/model/CoS.class | Bin 0 -> 3647 bytes .../cos/cosbase/repository/CoSRespository.class | Bin 0 -> 534 bytes .../cosbase/repository/CoSRespositoryInMem.class | Bin 0 -> 3649 bytes cos/cosbase/target/cosbase.jar | Bin 0 -> 9554 bytes cos/cosbase/target/maven-archiver/pom.properties | 5 + .../vcpe/cos/cosbase/client/CoSClientTest.class | Bin 0 -> 2944 bytes .../cos/cosbase/repository/CoSRepositoryTest.class | Bin 0 -> 2308 bytes cos/cosmgr/pom.xml | 29 + .../vcpe/cos/cosmgr/CORSResponseFilter.java | 25 + .../vcpe/cos/cosmgr/CoSJaxRsApplication.java | 18 + .../com/cablelabs/vcpe/cos/cosmgr/CoSService.java | 130 ++ cos/cosmgr/src/main/webapp/WEB-INF/web.xml | 24 + cos/cosmgr/src/main/webapp/index.jsp | 8 + .../vcpe/cos/cosmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../vcpe/cos/cosmgr/CoSJaxRsApplication.class | Bin 0 -> 689 bytes .../cablelabs/vcpe/cos/cosmgr/CoSService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/cos/cosmgr/CoSService.class | Bin 0 -> 3955 bytes cos/cosmgr/target/cosmgr.war | Bin 0 -> 9806641 bytes .../vcpe/cos/cosmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../vcpe/cos/cosmgr/CoSJaxRsApplication.class | Bin 0 -> 689 bytes .../cablelabs/vcpe/cos/cosmgr/CoSService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/cos/cosmgr/CoSService.class | Bin 0 -> 3955 bytes .../WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar | Bin 0 -> 320127 bytes .../target/cosmgr/WEB-INF/lib/cglib-2.2.0-b14.jar | Bin 0 -> 282815 bytes .../cosmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar | Bin 0 -> 2690 bytes .../cosmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar | Bin 0 -> 9554 bytes .../target/cosmgr/WEB-INF/lib/guava-14.0.1.jar | Bin 0 -> 2189117 bytes .../cosmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar | Bin 0 -> 126233 bytes .../cosmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar | Bin 0 -> 133345 bytes .../cosmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar | Bin 0 -> 53381 bytes .../WEB-INF/lib/javax.annotation-api-1.2.jar | Bin 0 -> 26366 bytes .../cosmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar | Bin 0 -> 5987 bytes .../cosmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar | Bin 0 -> 112758 bytes .../cosmgr/WEB-INF/lib/jersey-client-2.2.jar | Bin 0 -> 117090 bytes .../cosmgr/WEB-INF/lib/jersey-common-2.2.jar | Bin 0 -> 600514 bytes .../lib/jersey-container-servlet-core-2.2.jar | Bin 0 -> 52819 bytes .../cosmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar | Bin 0 -> 15591 bytes .../cosmgr/WEB-INF/lib/jersey-server-2.2.jar | Bin 0 -> 801094 bytes .../lib/org.eclipse.persistence.antlr-2.5.0.jar | Bin 0 -> 189645 bytes .../lib/org.eclipse.persistence.asm-2.5.0.jar | Bin 0 -> 271208 bytes .../lib/org.eclipse.persistence.core-2.5.0.jar | Bin 0 -> 4977121 bytes .../lib/org.eclipse.persistence.moxy-2.5.0.jar | Bin 0 -> 488045 bytes .../WEB-INF/lib/osgi-resource-locator-1.0.1.jar | Bin 0 -> 20235 bytes .../WEB-INF/lib/validation-api-1.1.0.Final.jar | Bin 0 -> 63777 bytes cos/cosmgr/target/cosmgr/WEB-INF/web.xml | 24 + cos/cosmgr/target/cosmgr/index.jsp | 8 + cos/cosmgr/target/maven-archiver/pom.properties | 5 + cos/pom.xml | 24 + deploy.sh | 25 + doc/dev-notes.md | 9 + doc/sample-json.txt | 46 + doc/state-of-code.md | 22 + evc/evcbase/pom.xml | 29 + .../vcpe/evc/evcbase/client/EvcClient.java | 149 ++ .../com/cablelabs/vcpe/evc/evcbase/model/Evc.java | 235 +++ .../vcpe/evc/evcbase/model/EvcPerformance.java | 102 ++ .../evc/evcbase/repository/EvcRespository.java | 21 + .../evcbase/repository/EvcRespositoryInMem.java | 91 ++ .../vcpe/evc/evcbase/client/EvcClientTest.java | 163 +++ .../evc/evcbase/repository/EvcRepositoryTest.java | 120 ++ .../vcpe/evc/evcbase/client/EvcClient$1.class | Bin 0 -> 748 bytes .../vcpe/evc/evcbase/client/EvcClient.class | Bin 0 -> 4135 bytes .../vcpe/evc/evcbase/model/Evc$EvcType.class | Bin 0 -> 1548 bytes .../vcpe/evc/evcbase/model/Evc$FrameDelivery.class | Bin 0 -> 1566 bytes .../com/cablelabs/vcpe/evc/evcbase/model/Evc.class | Bin 0 -> 8811 bytes .../vcpe/evc/evcbase/model/EvcPerformance.class | Bin 0 -> 3899 bytes .../evc/evcbase/repository/EvcRespository.class | Bin 0 -> 534 bytes .../evcbase/repository/EvcRespositoryInMem.class | Bin 0 -> 3649 bytes evc/evcbase/target/evcbase.jar | Bin 0 -> 13723 bytes evc/evcbase/target/maven-archiver/pom.properties | 5 + .../vcpe/evc/evcbase/client/EvcClientTest.class | Bin 0 -> 5561 bytes .../evc/evcbase/repository/EvcRepositoryTest.class | Bin 0 -> 3935 bytes evc/evcmgr/pom.xml | 39 + .../vcpe/evc/evcmgr/CORSResponseFilter.java | 24 + .../vcpe/evc/evcmgr/EvcJaxRsApplication.java | 18 + .../com/cablelabs/vcpe/evc/evcmgr/EvcService.java | 286 ++++ evc/evcmgr/src/main/webapp/WEB-INF/web.xml | 22 + evc/evcmgr/src/main/webapp/index.jsp | 8 + .../vcpe/evc/evcmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../vcpe/evc/evcmgr/EvcJaxRsApplication.class | Bin 0 -> 689 bytes .../cablelabs/vcpe/evc/evcmgr/EvcService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/evc/evcmgr/EvcService.class | Bin 0 -> 9613 bytes evc/evcmgr/target/evcmgr.war | Bin 0 -> 9835473 bytes .../vcpe/evc/evcmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../vcpe/evc/evcmgr/EvcJaxRsApplication.class | Bin 0 -> 689 bytes .../cablelabs/vcpe/evc/evcmgr/EvcService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/evc/evcmgr/EvcService.class | Bin 0 -> 9613 bytes .../WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar | Bin 0 -> 320127 bytes .../target/evcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar | Bin 0 -> 282815 bytes .../evcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar | Bin 0 -> 2690 bytes .../evcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar | Bin 0 -> 9554 bytes .../evcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar | Bin 0 -> 13723 bytes .../target/evcmgr/WEB-INF/lib/guava-14.0.1.jar | Bin 0 -> 2189117 bytes .../evcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar | Bin 0 -> 126233 bytes .../evcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar | Bin 0 -> 133345 bytes .../evcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar | Bin 0 -> 53381 bytes .../WEB-INF/lib/javax.annotation-api-1.2.jar | Bin 0 -> 26366 bytes .../evcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar | Bin 0 -> 5987 bytes .../evcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar | Bin 0 -> 112758 bytes .../evcmgr/WEB-INF/lib/jersey-client-2.2.jar | Bin 0 -> 117090 bytes .../evcmgr/WEB-INF/lib/jersey-common-2.2.jar | Bin 0 -> 600514 bytes .../lib/jersey-container-servlet-core-2.2.jar | Bin 0 -> 52819 bytes .../evcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar | Bin 0 -> 15591 bytes .../evcmgr/WEB-INF/lib/jersey-server-2.2.jar | Bin 0 -> 801094 bytes .../lib/org.eclipse.persistence.antlr-2.5.0.jar | Bin 0 -> 189645 bytes .../lib/org.eclipse.persistence.asm-2.5.0.jar | Bin 0 -> 271208 bytes .../lib/org.eclipse.persistence.core-2.5.0.jar | Bin 0 -> 4977121 bytes .../lib/org.eclipse.persistence.moxy-2.5.0.jar | Bin 0 -> 488045 bytes .../WEB-INF/lib/osgi-resource-locator-1.0.1.jar | Bin 0 -> 20235 bytes .../evcmgr/WEB-INF/lib/unibase-1.0-SNAPSHOT.jar | Bin 0 -> 18351 bytes .../WEB-INF/lib/validation-api-1.1.0.Final.jar | Bin 0 -> 63777 bytes evc/evcmgr/target/evcmgr/WEB-INF/web.xml | 22 + evc/evcmgr/target/evcmgr/index.jsp | 8 + evc/evcmgr/target/maven-archiver/pom.properties | 5 + evc/pom.xml | 24 + model/MEF-Classes.png | Bin 0 -> 268103 bytes model/MEF-Ref-Diagrams.png | Bin 0 -> 1433667 bytes model/README.md | 14 + model/cl-mef-uml/.project | 11 + model/cl-mef-uml/model.di | 2 + model/cl-mef-uml/model.notation | 1501 ++++++++++++++++++++ model/cl-mef-uml/model.uml | 557 ++++++++ pom.xml | 94 ++ svc/pom.xml | 30 + svc/svcbase/pom.xml | 29 + .../vcpe/svc/svcbase/client/EplClient.java | 149 ++ .../com/cablelabs/vcpe/svc/svcbase/model/Epl.java | 104 ++ .../svc/svcbase/repository/EplRespository.java | 21 + .../svcbase/repository/EplRespositoryInMem.java | 91 ++ .../vcpe/svc/svcbase/client/EplClientTest.java | 150 ++ .../svc/svcbase/repository/EplRepositoryTest.java | 126 ++ .../vcpe/svc/svcbase/client/EplClient$1.class | Bin 0 -> 748 bytes .../vcpe/svc/svcbase/client/EplClient.class | Bin 0 -> 4184 bytes .../com/cablelabs/vcpe/svc/svcbase/model/Epl.class | Bin 0 -> 4747 bytes .../svc/svcbase/repository/EplRespository.class | Bin 0 -> 534 bytes .../svcbase/repository/EplRespositoryInMem.class | Bin 0 -> 3649 bytes svc/svcbase/target/maven-archiver/pom.properties | 5 + svc/svcbase/target/svcbase.jar | Bin 0 -> 9200 bytes .../vcpe/svc/svcbase/client/EplClientTest.class | Bin 0 -> 5005 bytes .../svc/svcbase/repository/EplRepositoryTest.class | Bin 0 -> 4317 bytes svc/svcmgr/pom.xml | 33 + .../vcpe/svc/svcmgr/CORSResponseFilter.java | 24 + .../com/cablelabs/vcpe/svc/svcmgr/EplService.java | 213 +++ .../vcpe/svc/svcmgr/SvcJaxRsApplication.java | 18 + svc/svcmgr/src/main/webapp/WEB-INF/web.xml | 22 + svc/svcmgr/src/main/webapp/index.jsp | 8 + .../vcpe/svc/svcmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../cablelabs/vcpe/svc/svcmgr/EplService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/svc/svcmgr/EplService.class | Bin 0 -> 6265 bytes .../vcpe/svc/svcmgr/SvcJaxRsApplication.class | Bin 0 -> 689 bytes svc/svcmgr/target/maven-archiver/pom.properties | 5 + svc/svcmgr/target/svcmgr.war | Bin 0 -> 9825987 bytes .../vcpe/svc/svcmgr/CORSResponseFilter.class | Bin 0 -> 1384 bytes .../cablelabs/vcpe/svc/svcmgr/EplService$1.class | Bin 0 -> 905 bytes .../com/cablelabs/vcpe/svc/svcmgr/EplService.class | Bin 0 -> 6265 bytes .../vcpe/svc/svcmgr/SvcJaxRsApplication.class | Bin 0 -> 689 bytes .../WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar | Bin 0 -> 320127 bytes .../target/svcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar | Bin 0 -> 282815 bytes .../svcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar | Bin 0 -> 2690 bytes .../svcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar | Bin 0 -> 9554 bytes .../svcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar | Bin 0 -> 13723 bytes .../target/svcmgr/WEB-INF/lib/guava-14.0.1.jar | Bin 0 -> 2189117 bytes .../svcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar | Bin 0 -> 126233 bytes .../svcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar | Bin 0 -> 133345 bytes .../svcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar | Bin 0 -> 53381 bytes .../WEB-INF/lib/javax.annotation-api-1.2.jar | Bin 0 -> 26366 bytes .../svcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar | Bin 0 -> 5987 bytes .../svcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar | Bin 0 -> 112758 bytes .../svcmgr/WEB-INF/lib/jersey-client-2.2.jar | Bin 0 -> 117090 bytes .../svcmgr/WEB-INF/lib/jersey-common-2.2.jar | Bin 0 -> 600514 bytes .../lib/jersey-container-servlet-core-2.2.jar | Bin 0 -> 52819 bytes .../svcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar | Bin 0 -> 15591 bytes .../svcmgr/WEB-INF/lib/jersey-server-2.2.jar | Bin 0 -> 801094 bytes .../lib/org.eclipse.persistence.antlr-2.5.0.jar | Bin 0 -> 189645 bytes .../lib/org.eclipse.persistence.asm-2.5.0.jar | Bin 0 -> 271208 bytes .../lib/org.eclipse.persistence.core-2.5.0.jar | Bin 0 -> 4977121 bytes .../lib/org.eclipse.persistence.moxy-2.5.0.jar | Bin 0 -> 488045 bytes .../WEB-INF/lib/osgi-resource-locator-1.0.1.jar | Bin 0 -> 20235 bytes .../svcmgr/WEB-INF/lib/svcbase-1.0-SNAPSHOT.jar | Bin 0 -> 9200 bytes .../WEB-INF/lib/validation-api-1.1.0.Final.jar | Bin 0 -> 63777 bytes svc/svcmgr/target/svcmgr/WEB-INF/web.xml | 22 + svc/svcmgr/target/svcmgr/index.jsp | 8 + uni/pom.xml | 23 + uni/unibase/pom.xml | 23 + .../vcpe/uni/unibase/client/EvcPathClient.java | 180 +++ .../vcpe/uni/unibase/client/UniClient.java | 188 +++ .../cablelabs/vcpe/uni/unibase/model/EvcPath.java | 112 ++ .../com/cablelabs/vcpe/uni/unibase/model/Uni.java | 230 +++ .../vcpe/uni/unibase/client/UniClientTest.java | 50 + .../vcpe/uni/unibase/client/EvcPathClient$1.class | Bin 0 -> 776 bytes .../vcpe/uni/unibase/client/EvcPathClient.class | Bin 0 -> 5305 bytes .../vcpe/uni/unibase/client/UniClient$1.class | Bin 0 -> 748 bytes .../vcpe/uni/unibase/client/UniClient.class | Bin 0 -> 5328 bytes .../cablelabs/vcpe/uni/unibase/model/EvcPath.class | Bin 0 -> 3301 bytes .../cablelabs/vcpe/uni/unibase/model/Uni$1.class | Bin 0 -> 1000 bytes .../vcpe/uni/unibase/model/Uni$MacLayer.class | Bin 0 -> 1433 bytes .../vcpe/uni/unibase/model/Uni$PhysMedium.class | Bin 0 -> 1680 bytes .../vcpe/uni/unibase/model/Uni$SvcSpeed.class | Bin 0 -> 1641 bytes .../vcpe/uni/unibase/model/Uni$SyncMode.class | Bin 0 -> 1501 bytes .../vcpe/uni/unibase/model/Uni$Type.class | Bin 0 -> 1381 bytes .../com/cablelabs/vcpe/uni/unibase/model/Uni.class | Bin 0 -> 8039 bytes uni/unibase/target/maven-archiver/pom.properties | 5 + .../vcpe/uni/unibase/client/UniClientTest.class | Bin 0 -> 2949 bytes uni/unibase/target/unibase.jar | Bin 0 -> 18351 bytes uni/unimgr/dbg.js | 84 ++ uni/unimgr/package.json | 10 + uni/unimgr/uniMgrEmu.js | 247 ++++ 226 files changed, 6900 insertions(+) create mode 100644 README.md create mode 100644 common/pom.xml create mode 100644 common/src/main/java/com/cablelabs/vcpe/common/Dbg.java create mode 100644 common/target/classes/com/cablelabs/vcpe/common/Dbg.class create mode 100644 common/target/common.jar create mode 100644 common/target/maven-archiver/pom.properties create mode 100644 common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst create mode 100644 common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst create mode 100644 cos/cosbase/pom.xml create mode 100644 cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.java create mode 100644 cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.java create mode 100644 cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/CoS.java create mode 100644 cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.java create mode 100644 cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.java create mode 100644 cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.java create mode 100644 cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.java create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient$1.class create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.class create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.class create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/CoS.class create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.class create mode 100644 cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.class create mode 100644 cos/cosbase/target/cosbase.jar create mode 100644 cos/cosbase/target/maven-archiver/pom.properties create mode 100644 cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.class create mode 100644 cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.class create mode 100644 cos/cosmgr/pom.xml create mode 100644 cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.java create mode 100644 cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.java create mode 100644 cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSService.java create mode 100644 cos/cosmgr/src/main/webapp/WEB-INF/web.xml create mode 100644 cos/cosmgr/src/main/webapp/index.jsp create mode 100644 cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class create mode 100644 cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class create mode 100644 cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class create mode 100644 cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class create mode 100644 cos/cosmgr/target/cosmgr.war create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/cglib-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/guava-14.0.1.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.annotation-api-1.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-client-2.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-common-2.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-server-2.2.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar create mode 100644 cos/cosmgr/target/cosmgr/WEB-INF/web.xml create mode 100644 cos/cosmgr/target/cosmgr/index.jsp create mode 100644 cos/cosmgr/target/maven-archiver/pom.properties create mode 100644 cos/pom.xml create mode 100755 deploy.sh create mode 100644 doc/dev-notes.md create mode 100644 doc/sample-json.txt create mode 100644 doc/state-of-code.md create mode 100644 evc/evcbase/pom.xml create mode 100644 evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.java create mode 100644 evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/Evc.java create mode 100644 evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.java create mode 100644 evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.java create mode 100644 evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.java create mode 100644 evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.java create mode 100644 evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.java create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient$1.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$EvcType.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$FrameDelivery.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.class create mode 100644 evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.class create mode 100644 evc/evcbase/target/evcbase.jar create mode 100644 evc/evcbase/target/maven-archiver/pom.properties create mode 100644 evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.class create mode 100644 evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.class create mode 100644 evc/evcmgr/pom.xml create mode 100644 evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.java create mode 100644 evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.java create mode 100644 evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcService.java create mode 100644 evc/evcmgr/src/main/webapp/WEB-INF/web.xml create mode 100644 evc/evcmgr/src/main/webapp/index.jsp create mode 100644 evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class create mode 100644 evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class create mode 100644 evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class create mode 100644 evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class create mode 100644 evc/evcmgr/target/evcmgr.war create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/guava-14.0.1.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-client-2.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-common-2.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-server-2.2.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/unibase-1.0-SNAPSHOT.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar create mode 100644 evc/evcmgr/target/evcmgr/WEB-INF/web.xml create mode 100644 evc/evcmgr/target/evcmgr/index.jsp create mode 100644 evc/evcmgr/target/maven-archiver/pom.properties create mode 100644 evc/pom.xml create mode 100644 model/MEF-Classes.png create mode 100644 model/MEF-Ref-Diagrams.png create mode 100644 model/README.md create mode 100644 model/cl-mef-uml/.project create mode 100644 model/cl-mef-uml/model.di create mode 100644 model/cl-mef-uml/model.notation create mode 100644 model/cl-mef-uml/model.uml create mode 100644 pom.xml create mode 100644 svc/pom.xml create mode 100644 svc/svcbase/pom.xml create mode 100644 svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java create mode 100644 svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java create mode 100644 svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java create mode 100644 svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java create mode 100644 svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java create mode 100644 svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java create mode 100644 svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient$1.class create mode 100644 svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient.class create mode 100644 svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/model/Epl.class create mode 100644 svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.class create mode 100644 svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.class create mode 100644 svc/svcbase/target/maven-archiver/pom.properties create mode 100644 svc/svcbase/target/svcbase.jar create mode 100644 svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.class create mode 100644 svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.class create mode 100644 svc/svcmgr/pom.xml create mode 100644 svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.java create mode 100644 svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/EplService.java create mode 100644 svc/svcmgr/src/main/java/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.java create mode 100644 svc/svcmgr/src/main/webapp/WEB-INF/web.xml create mode 100644 svc/svcmgr/src/main/webapp/index.jsp create mode 100644 svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class create mode 100644 svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class create mode 100644 svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class create mode 100644 svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class create mode 100644 svc/svcmgr/target/maven-archiver/pom.properties create mode 100644 svc/svcmgr/target/svcmgr.war create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/guava-14.0.1.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-client-2.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-common-2.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-server-2.2.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/svcbase-1.0-SNAPSHOT.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar create mode 100644 svc/svcmgr/target/svcmgr/WEB-INF/web.xml create mode 100644 svc/svcmgr/target/svcmgr/index.jsp create mode 100644 uni/pom.xml create mode 100644 uni/unibase/pom.xml create mode 100644 uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.java create mode 100644 uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/UniClient.java create mode 100644 uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/EvcPath.java create mode 100644 uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/Uni.java create mode 100644 uni/unibase/src/test/java/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.java create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient$1.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient$1.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/EvcPath.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$1.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$MacLayer.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$PhysMedium.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SvcSpeed.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SyncMode.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$Type.class create mode 100644 uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni.class create mode 100644 uni/unibase/target/maven-archiver/pom.properties create mode 100644 uni/unibase/target/test-classes/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.class create mode 100644 uni/unibase/target/unibase.jar create mode 100644 uni/unimgr/dbg.js create mode 100644 uni/unimgr/package.json create mode 100644 uni/unimgr/uniMgrEmu.js diff --git a/README.md b/README.md new file mode 100644 index 0000000..c300426 --- /dev/null +++ b/README.md @@ -0,0 +1,139 @@ +=================== +VCPE Services Demo +=================== + +* There are 3 service layers in the VCPE demo, each runs independently + - cosmgr, evcmgr, svcmgr + - The build creates war files for each that are deployable on tomcat +* Currently the code is housed in private VCPE gerrit repo: + http://euca-10-5-5-106.cirrus.cloud.cablelabs.com:8080/#/admin/projects/vcpe-services +* All development and testing to date have been on OSX + +Environment Requirements: +========================= +* JDK for Java 7 +* Tomcat 8 +* Maven 3.3 + +If you need help with environement set-up instrucitons, see "Environment Set Up" notes at the bottom of this document + +Building and Deploying VCPE service managers +============================================ +Assumptions +* You have an account on the vcpe gerrit server +* Your environmnt has been completely set up as described at the bottom of this document + + $ git clone ssh://yourusername@euca-10-5-5-106.cirrus.cloud.cablelabs.com:29418/vcpe-services + $ cd vcpe-services + $ chmod +x ./deploy.sh + $ ./deploy.sh + +* This will build cosmgr.war, evcmgr.war, and eplmgr.war, copy them to your tomcat webapps directory, and start tomcat +* If you prefer to set up manually you can follow the following steps + $ cd vcpe-services + $ mvn clean install + $ cp ./cos/cosmgr/target/cosmgr.war /Library/Tomcat/webapps/. + $ cp ./evc/evcmgr/target/evcmgr.war /Library/Tomcat/webapps/. + $ cp ./svc/svcmgr/target/svcmgr.war /Library/Tomcat/webapps/. + $ /Library/Tomcat/bin/startup.sh + +* The 3 vcpe service managers are now running, and will expect/send REST calls on port 9090 + +Running the ODL Uni Manager Emulator +==================================== +* If you would like run the demo without running the ODL plugin, you can do so by running the unimgr emulator. + - This is a nodejs app that is listening for ODL specific REST calls, and when recieved, it prints the deatils of the call to the console +* In order to run the unimgr emulator, you will need to install nodejs and npm. See "Install node/npm" in the "Environment Set Up" section at the bottom of this document for more details. +* Before running the emulator, make sure that the ODL plugin is not running (or you will likely get a port conflict on 8181) +* Build the runtime environement, and Start the emulator as follows: + + $ cd vcpe-services/uni/unimgr + $ npm install (if node_modules does not exist) + $ node uniMgrEmu.js + +* Any REST calls targted to ODL will now be responded to by the ODL emulator, and logged to the console in which the emulator was started + +================== +Environment Set Up +================== + +Install JDK +=========== +**OSX:** +* Because OpenDaylight requires Java 7, all md-proto development has been against Java 7, so that all components (ODL based, and non ODL based) will be able to run on the same machine if needed +* The md-proto development has been against JDK version 79 + - Download installation package from here: + http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html +* Tomcat (and other applications) will require a JAVA_HOME environment variable. A convenient way to make sure that it is created correctly is to add the following to your .bashrc + - export JAVA_HOME=$(/usr/libexec/java_home) + +**Windows/Cygwin:** +TBD + +**Linux:** +TBD + +Install Tomcat +============== +**OSX:** +* We are using Tomcat 8, which is the latest version that support Java7 +* Download tar.gz installation package from here + - https://tomcat.apache.org/download-80.cgi + - note: md-proto dev was against v 8.022 + +* Assuming the tar.gz file is in your ~/Downloads folder: + + $ sudo mkdir -p /usr/local (if /usr/local does not already) + $ cd /usr/local + $ sudo tar -xvf ~/Downloads/apache-tomcat-8.0.22.tar.gz (or other version) + +* For convenience, and to make it simpler to replace this with newer versions you can create a link /Library/Tomcat and point to the version specific tomcat directory (the instructions below assume, and the deployment script assume you have done so) + + $ sudo rm -f /Library/Tomcat (if the link already exists) + $ sudo ln -s /usr/local/apache-tomcat-8.0.22 /Library/Tomcat + $ sudo chown -R -H /Library/Tomcat + $ sudo chmod +x /Library/Tomcat/bin/*.sh + +* All of the vcpe services sent to 9090, so make sure that your /Library/Tomcat/conf/server.xml file is configured to have tomcat listen on 9090. + + + +**Windows/Cygwin:** +TBD + +**Linux:** +TBD + +Install Maven +============= +**OSX:** +* Maven can be installed on OSX using brew + - brew is a package manager for OSX + - if you don’t have brew installed, do so as described here + http://coolestguidesontheplanet.com/installing-homebrew-os-x-yosemite-10-10-package-manager-unix-apps/ + +* Now, install maven: + + $ brew install maven + +**Windows/Cygwin:** +TBD + +**Linux:** +TBD + + +Install node/npm +================ +**OSX:** +* If you plan on running the UNI ODL emluator you will need to install node/npm +* Download and execute the Nodejs Mac OS X Installer (.pkg) from + https://nodejs.org/download/ + +**Windows/Cygwin:** +TBD + +**Linux:** +TBD diff --git a/common/pom.xml b/common/pom.xml new file mode 100644 index 0000000..0a353d6 --- /dev/null +++ b/common/pom.xml @@ -0,0 +1,17 @@ + + + 4.0.0 + + com.cablelabs.vcpe + common + jar + 1.0-SNAPSHOT + + + common + + + + + diff --git a/common/src/main/java/com/cablelabs/vcpe/common/Dbg.java b/common/src/main/java/com/cablelabs/vcpe/common/Dbg.java new file mode 100644 index 0000000..b98f1e1 --- /dev/null +++ b/common/src/main/java/com/cablelabs/vcpe/common/Dbg.java @@ -0,0 +1,24 @@ +package com.cablelabs.vcpe.common; + +/** + * Created by steve on 5/25/15. + */ +public class Dbg { + + private static final String TAB = " "; + + + static public void p( String s) { p( 0, "", s);} + static public void p( int tabs, String s) { p( tabs, "", s);} + static public void p( int tabs, String pre, String s){ + System.out.println(tab(tabs) + pre + s); + } + + static private String tab (int tabs) { + String t = new String(); + for ( int i = 0; i < tabs; i++ ) { + t = t + TAB; + } + return t; + } +} diff --git a/common/target/classes/com/cablelabs/vcpe/common/Dbg.class b/common/target/classes/com/cablelabs/vcpe/common/Dbg.class new file mode 100644 index 0000000..9af32e8 Binary files /dev/null and b/common/target/classes/com/cablelabs/vcpe/common/Dbg.class differ diff --git a/common/target/common.jar b/common/target/common.jar new file mode 100644 index 0000000..267b07a Binary files /dev/null and b/common/target/common.jar differ diff --git a/common/target/maven-archiver/pom.properties b/common/target/maven-archiver/pom.properties new file mode 100644 index 0000000..05beb19 --- /dev/null +++ b/common/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:17 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=common diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst new file mode 100644 index 0000000..4ef3036 --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst @@ -0,0 +1 @@ +com/cablelabs/vcpe/common/Dbg.class diff --git a/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst new file mode 100644 index 0000000..72ad648 --- /dev/null +++ b/common/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst @@ -0,0 +1 @@ +/Users/mmakati/vcpe-services/common/src/main/java/com/cablelabs/vcpe/common/Dbg.java diff --git a/cos/cosbase/pom.xml b/cos/cosbase/pom.xml new file mode 100644 index 0000000..6574e02 --- /dev/null +++ b/cos/cosbase/pom.xml @@ -0,0 +1,23 @@ + + + + com.cablelabs.vcpe + cos + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + cosbase + jar + 1.0-SNAPSHOT + + + cosbase + + + + + diff --git a/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.java b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.java new file mode 100644 index 0000000..d47b11b --- /dev/null +++ b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.java @@ -0,0 +1,151 @@ +package com.cablelabs.vcpe.cos.cosbase.client; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * Created by steve on 5/28/15. + */ +public class CoSClient { + + private Client client; // provided by Jersey + + public CoSClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public CoS create(CoS cos) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/cosmgr/webapi/"); + Response response = target.path("cos") + .request(MediaType.APPLICATION_JSON) + .post(Entity.entity(cos, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(CoS.class); + } + + //-------------------------------------------------------- + public CoS update(CoS cos) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/cosmgr/webapi/"); + Response response = target.path("cos/"+cos.getId()) + .request(MediaType.APPLICATION_JSON) + .put(Entity.entity(cos, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(CoS.class); + } + + + //-------------------------------------------------------- + public CoS get(String cosId) + //-------------------------------------------------------- + // get CoS of specified ID + { + WebTarget target = client.target("http://localhost:9090/cosmgr/webapi/"); + + Response response = target.path("cos/"+cosId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(CoS.class); + } + + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + // get a list of all CoS instances + { + + WebTarget target = client.target("http://localhost:9090/cosmgr/webapi/"); + + // Can I do this with a Response, so that I can check for errors + List response = target.path("cos/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + + + //-------------------------------------------------------- + public void delete(String cosId) + //-------------------------------------------------------- + // delete CoS of specified ID + { + WebTarget target = client.target("http://localhost:9090/cosmgr/webapi/"); + Response response = target.path("cos/"+cosId).request(MediaType.APPLICATION_JSON).delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + //-------------------------------------------------------- + public CoS testGet() + //-------------------------------------------------------- + // test marshaling of CoS class from server json + { + WebTarget target = client.target("http://localhost:9090/cosmgr/webapi/"); + + Response response = target.path("cos").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(CoS.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/cosmgr/webapi/"); + + Response response = target.path("cos").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + + return response.readEntity(String.class); + } +} diff --git a/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.java b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.java new file mode 100644 index 0000000..70f7313 --- /dev/null +++ b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.java @@ -0,0 +1,27 @@ +package com.cablelabs.vcpe.cos.cosbase.model; + +import javax.xml.bind.annotation.XmlRootElement; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class BandwidthProfile { + private int committedInfoRate = 0; // MBS + private int committedBurtSize = 0; // MBS + private int excessInfoRate = 0; // MBS + private int excessBurstSize = 0; // MBS + + public int getCommittedInfoRate() { return committedInfoRate; } + public void setCommittedInfoRate(int committedInfoRate) { this.committedInfoRate = committedInfoRate; } + + public int getCommittedBurtSize() { return committedBurtSize; } + public void setCommittedBurtSize(int committedBurtSize) { this.committedBurtSize = committedBurtSize; } + + public int getExcessInfoRate() { return excessInfoRate; } + public void setExcessInfoRate(int excessInfoRate) { this.excessInfoRate = excessInfoRate; } + + public int getExcessBurstSize() { return excessBurstSize; } + public void setExcessBurstSize(int excessBurstSize) { this.excessBurstSize = excessBurstSize; } +} diff --git a/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/CoS.java b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/CoS.java new file mode 100644 index 0000000..8a4d219 --- /dev/null +++ b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/model/CoS.java @@ -0,0 +1,86 @@ +package com.cablelabs.vcpe.cos.cosbase.model; + +import com.cablelabs.vcpe.common.Dbg; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class CoS +{ + private String id; + + // private BandwidthProfile ingressBWProfile; + // private BandwidthProfile egressBWProfile; + // Above should be integrated at some point + // ... for now we will support commitedInfoRate in Lie of BW Profiles + private int commitedInfoRate; // MBPS + + private double availbility; // percentage + private double frameDelay; // milli-seconds + private double jitter; // milli-seconds + private double frameLoss; // percentage + + // no argument constructor required for JAX-RS + public CoS() { + commitedInfoRate = 0; + availbility = 0.0; + frameDelay = 0.0; + jitter = 0.0; + frameLoss = 0.0; + } + + + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public int getCommitedInfoRate() { return commitedInfoRate; } + public void setCommitedInfoRate(int commitedInfoRate) { this.commitedInfoRate = commitedInfoRate; } + + public double getAvailbility() { return availbility; } + public void setAvailbility(double availbility) { this.availbility = availbility; } + + public double getFrameDelay() { return frameDelay; } + public void setFrameDelay(double frameDelay) { this.frameDelay = frameDelay; } + + public double getJitter() { return jitter; } + public void setJitter(double jitter) { this.jitter = jitter; } + + public double getFrameLoss() { return frameLoss; } + public void setFrameLoss(double frameLoss) { this.frameLoss = frameLoss; } + + public void setAllProps(String id, int commitedInfoRate, double availbility, double frameDelay, double jitter, double frameLoss) + { + this.id = id; + this.commitedInfoRate = commitedInfoRate; + this.availbility = availbility; + this.frameDelay = frameDelay; + this.jitter = jitter; + this.frameLoss = frameLoss; + } + + public void dump() { dump(0); } + public void dump(int tab) { + Dbg.p(tab, "id: " + this.id); + Dbg.p(tab, "commInfoRate: " + this.commitedInfoRate); + Dbg.p(tab, "availbility: " + this.availbility); + Dbg.p(tab, "frameDelay: " + this.frameDelay); + Dbg.p(tab, "jitter: " + this.jitter); + Dbg.p(tab, "frameLoss: " + this.frameLoss); + } + + public static void dumpList(List cosList) { dumpList(0, cosList); } + public static void dumpList(int tab, List cosList) { + int numCos = 0; + Dbg.p("----- CoS List : [" + cosList.size() + "] elements"); + for (CoS curCos : cosList) { + numCos++; + Dbg.p(tab+1, ""); + curCos.dump(tab+2); + } + } +} diff --git a/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.java b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.java new file mode 100644 index 0000000..3a58000 --- /dev/null +++ b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.java @@ -0,0 +1,22 @@ +package com.cablelabs.vcpe.cos.cosbase.repository; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; + +import java.util.List; + +/** + * Created by steve on 5/25/15. + */ +public interface CoSRespository +{ + // TODO add exceptions + + CoS add(CoS cos); // returns null if already exists, otherwise returns stored cos + CoS get(String cosId); // returns null if not found, otherwise stored cos + CoS update(CoS cos); // returns null if did not exit, otherwise cos as it was previous to update (put in any case) + CoS delete(String cosId); // returns null if not found, otherwise cos as it was previous to delete + int count(); // number of CoS stored in the repo + List getAll(); + + public void dump(int tab); // print out contents of the repo +} diff --git a/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.java b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.java new file mode 100644 index 0000000..2fa44c1 --- /dev/null +++ b/cos/cosbase/src/main/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.java @@ -0,0 +1,74 @@ +package com.cablelabs.vcpe.cos.cosbase.repository; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by steve on 5/24/15. + */ + + +/* + Singleton that contains a hashmap which holds instances of CoS objects, indexed by CiS ID + */ + +public enum CoSRespositoryInMem implements CoSRespository { + INSTANCE; // Singleton + + private Map< String, CoS> cosDB = new ConcurrentHashMap(); + + @Override + public CoS add(CoS cos) { + if ( this.get(cos.getId()) != null ) { + return null; + } + cosDB.put(cos.getId(), cos ); + return cos; + } + + @Override + public CoS get(String cosId) { + return cosDB.get(cosId); + } + + @Override + public CoS update(CoS cos) { + // put returns null if cos did not exist, other returns cos as it stood prior to put + return cosDB.put(cos.getId(), cos); + } + + @Override + public CoS delete(String cosId) { + // remove returns null if cos did not exist, other returns cos as it stood prior to remove + return cosDB.remove(cosId); + } + + @Override + public List getAll() { + List cosList = new ArrayList(cosDB.values()); + return cosList; + } + + @Override + public int count() { + return cosDB.size(); + } + + @Override + public void dump(int tab) { + + Dbg.p(tab, "CoS Repo: " + cosDB.size() + " entrie(s)"); + int numCos = 0; + for (CoS curCos : cosDB.values()) { + numCos++; + Dbg.p(tab+1, ""); + curCos.dump(tab+2); + } + } + +} diff --git a/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.java b/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.java new file mode 100644 index 0000000..cbf5516 --- /dev/null +++ b/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.java @@ -0,0 +1,105 @@ +package com.cablelabs.vcpe.cos.cosbase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import org.junit.Test; + +import java.util.List; + +import static org.junit.Assert.*; + +/** + * Created by steve on 5/28/15. + */ + +public class CoSClientTest { + + @Test + public void testAll() throws Exception { + CoSClient coSClient = new CoSClient(); + + CoS gold = new CoS(); + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + Dbg.p("gold svc being created in CoS"); + gold.dump(1); + + gold = coSClient.create(gold); + assertNotNull(gold); + + CoS retrievedCos = coSClient.get(gold.getId()); + + assertNotNull(retrievedCos); + Dbg.p("gold svc just retrieved from CoS"); + retrievedCos.dump(1); + retrievedCos = null; + + gold.setCommitedInfoRate(50); + Dbg.p("gold svc modified, to be updated"); + gold.dump(1); + assertNotNull(coSClient.update(gold)); + retrievedCos = coSClient.get(gold.getId()); + assertNotNull(retrievedCos); + Dbg.p("gold svc modified, just retrieved from CoS"); + retrievedCos.dump(1); + + coSClient.delete(gold.getId()); + + CoS vid = new CoS(); + CoS game = new CoS(); + CoS dl = new CoS(); + + vid.setAllProps ("vid", 100, 0.99, 17.43, 2.43, 0.1); + game.setAllProps("game", 75, 0.99, 7.43, 1.43, 0.01); + dl.setAllProps("dl", 100, 0.99, 17.43, 2.43, 0.02); + + vid = coSClient.create(vid); + assertNotNull(vid); + + game = coSClient.create(game); + assertNotNull(game); + + dl = coSClient.create(dl); + assertNotNull(dl); + + + + List cosList = coSClient.getAll(); + assertNotNull(cosList); + assertEquals(cosList.size(), 3); + CoS.dumpList(cosList); + + coSClient.delete(game.getId()); + cosList = coSClient.getAll(); + assertNotNull(cosList); + assertEquals(cosList.size(), 2); + CoS.dumpList(cosList); + + coSClient.delete(vid.getId()); + cosList = coSClient.getAll(); + assertNotNull(cosList); + assertEquals(cosList.size(), 1); + CoS.dumpList(cosList); + + coSClient.delete(dl.getId()); + cosList = coSClient.getAll(); + assertNotNull(cosList); + assertEquals(cosList.size(), 0); + CoS.dumpList(cosList); + } + + @Test + public void testTestGet() throws Exception { + CoSClient coSClient = new CoSClient(); + CoS cos = coSClient.testGet(); + cos.dump();; + } + + @Test + public void testPing() throws Exception { + + CoSClient coSClient = new CoSClient(); + String resp = coSClient.ping(); + Dbg.p(resp); + } + +} \ No newline at end of file diff --git a/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.java b/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.java new file mode 100644 index 0000000..0c46737 --- /dev/null +++ b/cos/cosbase/src/test/java/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.java @@ -0,0 +1,63 @@ +package com.cablelabs.vcpe.cos.cosbase.repository; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import org.junit.Test; + +import static org.junit.Assert.*; + +/** + * Created by steve on 5/25/15. + */ +public class CoSRepositoryTest +{ + + @Test + public void test() { + + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + // id CIR/MBS avail delay jitter frameloss + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + CoSRespository repo = CoSRespositoryInMem.INSTANCE; + + assertNotNull(repo.add(gold)); + assertNotNull(repo.add(silver)); + assertNotNull(repo.add(bronze)); + assertNull(repo.add(bronze)); // duplicate + assertEquals(repo.count(), 3); + + assertNotNull(repo.get(gold.getId())); + assertNotNull(repo.get(silver.getId())); + assertNotNull(repo.get(bronze.getId())); + + assertNotNull(repo.delete(silver.getId())); + assertNull(repo.delete(silver.getId())); + assertNull(repo.delete("not-in-repo")); + assertEquals(repo.count(), 2); + + assertEquals(repo.get(gold.getId()).getCommitedInfoRate(), 100); + assertNotEquals(repo.get(bronze.getId()).getCommitedInfoRate(), 100); + + CoS tin = new CoS(); + tin.setAllProps("tin", 1, 0.50, 47.43, 2.43, 0.04); + + + assertNull(repo.update(tin)); // update non-existent cos + assertEquals(repo.count(), 3); + assertEquals(repo.get("tin").getCommitedInfoRate(), 1); + + tin.setCommitedInfoRate(5); + assertNotNull(repo.update(tin)); // update existing cos, same object + assertEquals(repo.get("tin").getCommitedInfoRate(), 5); + + CoS tin2 = new CoS(); + tin.setAllProps("tin", 8, 0.50, 47.43, 2.43, 0.04); + assertNotNull(repo.update(tin)); // update existing cos, new object + assertEquals(repo.get("tin").getCommitedInfoRate(), 8); + } +} diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient$1.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient$1.class new file mode 100644 index 0000000..6e5c04d Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient$1.class differ diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.class new file mode 100644 index 0000000..d20148c Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClient.class differ diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.class new file mode 100644 index 0000000..3e4a92d Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/BandwidthProfile.class differ diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/CoS.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/CoS.class new file mode 100644 index 0000000..744b89c Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/model/CoS.class differ diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.class new file mode 100644 index 0000000..d3b6054 Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespository.class differ diff --git a/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.class b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.class new file mode 100644 index 0000000..6d8f689 Binary files /dev/null and b/cos/cosbase/target/classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRespositoryInMem.class differ diff --git a/cos/cosbase/target/cosbase.jar b/cos/cosbase/target/cosbase.jar new file mode 100644 index 0000000..d991659 Binary files /dev/null and b/cos/cosbase/target/cosbase.jar differ diff --git a/cos/cosbase/target/maven-archiver/pom.properties b/cos/cosbase/target/maven-archiver/pom.properties new file mode 100644 index 0000000..0b6b211 --- /dev/null +++ b/cos/cosbase/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:18 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=cosbase diff --git a/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.class b/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.class new file mode 100644 index 0000000..a4c81fc Binary files /dev/null and b/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/client/CoSClientTest.class differ diff --git a/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.class b/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.class new file mode 100644 index 0000000..c9f508e Binary files /dev/null and b/cos/cosbase/target/test-classes/com/cablelabs/vcpe/cos/cosbase/repository/CoSRepositoryTest.class differ diff --git a/cos/cosmgr/pom.xml b/cos/cosmgr/pom.xml new file mode 100644 index 0000000..9245481 --- /dev/null +++ b/cos/cosmgr/pom.xml @@ -0,0 +1,29 @@ + + + + com.cablelabs.vcpe + cos + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + cosmgr + war + 1.0-SNAPSHOT + + + cosmgr + + + + + com.cablelabs.vcpe + cosbase + 1.0-SNAPSHOT + + + + diff --git a/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.java b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.java new file mode 100644 index 0000000..50a118a --- /dev/null +++ b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.java @@ -0,0 +1,25 @@ +package com.cablelabs.vcpe.cos.cosmgr; + +import java.io.IOException; + +import javax.ws.rs.container.ContainerRequestContext; +import javax.ws.rs.container.ContainerResponseContext; +import javax.ws.rs.container.ContainerResponseFilter; +import javax.ws.rs.core.MultivaluedMap; + +// +// 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 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/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.java b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.java new file mode 100644 index 0000000..8d9c889 --- /dev/null +++ b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.java @@ -0,0 +1,18 @@ +package com.cablelabs.vcpe.cos.cosmgr; + +import org.glassfish.jersey.server.ResourceConfig; + +// +// In order to avoid CORS issues, register our CORS Response filter +// + +public class CoSJaxRsApplication extends ResourceConfig { + + /** + * Register JAX-RS application components. + */ + public CoSJaxRsApplication() { + packages("com.cablelabs.vcpe.cos.cosmgr"); + register(CORSResponseFilter.class); + } +} \ No newline at end of file diff --git a/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSService.java b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSService.java new file mode 100644 index 0000000..e9390fc --- /dev/null +++ b/cos/cosmgr/src/main/java/com/cablelabs/vcpe/cos/cosmgr/CoSService.java @@ -0,0 +1,130 @@ +package com.cablelabs.vcpe.cos.cosmgr; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.cos.cosbase.repository.CoSRespositoryInMem; + +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.List; + +/** + * Root resource (exposed at "myresource" path) + */ +@Path("cos") +public class CoSService +{ + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response create(CoS cos) + //-------------------------------------------------------- + { + if ( cos == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + + Dbg.p("\nADDING [" + cos.getId() + "] to cos repo"); + CoSRespositoryInMem.INSTANCE.add(cos); + CoSRespositoryInMem.INSTANCE.dump(0); + return Response.ok().entity(cos).build(); + } + + @PUT + @Path("{cosId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response update(CoS cos) + //-------------------------------------------------------- + { + Dbg.p("\nUPDATING [" + cos.getId()+"]"); + CoSRespositoryInMem.INSTANCE.update(cos); + CoSRespositoryInMem.INSTANCE.dump(0); + return Response.ok().entity(cos).build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + @Path("{cosId}") + //-------------------------------------------------------- + public Response get( @PathParam("cosId") String cosId ) + //-------------------------------------------------------- + { + if ( cosId == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + Dbg.p("\nRETRIEVING ["+cosId+"]"); + CoSRespositoryInMem.INSTANCE.dump(1); + CoS cos = CoSRespositoryInMem.INSTANCE.get(cosId); + if (cos == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + cos.dump(1); + return Response.ok().entity(cos).build(); + } + + @DELETE + @Path("{cosId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response delete(@PathParam("cosId") String cosId) + //-------------------------------------------------------- + + { + if ( cosId == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + Dbg.p("\nDELETE:" + cosId); + CoSRespositoryInMem.INSTANCE.delete(cosId); + CoSRespositoryInMem.INSTANCE.dump(0); + return Response.ok().build(); + } + + + @GET + @Path("list") + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response cosList() + //-------------------------------------------------------- + // get a list of all CoS objects + { + Dbg.p("\nCOS GET ALL:"); + List cosList = CoSRespositoryInMem.INSTANCE.getAll(); + if (cosList == null ) + { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.ok().entity(new GenericEntity>(cosList) {}).build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public CoS testGet() + //-------------------------------------------------------- + // simple get to check out json format + + { + CoS cos = new CoS(); + cos.setAllProps("testGetCoS", 100, 0.99, 17.43, 2.43, 0.01); + return cos; + } + + @GET + @Produces(MediaType.TEXT_PLAIN) + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // simple ping to check connectivity + { + Dbg.p("In CoS Service simple get connection test server"); + return "... pingCos reponse"; + } +} diff --git a/cos/cosmgr/src/main/webapp/WEB-INF/web.xml b/cos/cosmgr/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..49cf6ad --- /dev/null +++ b/cos/cosmgr/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.cos + + + javax.ws.rs.Application + com.cablelabs.vcpe.cos.cosmgr.CoSJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + + diff --git a/cos/cosmgr/src/main/webapp/index.jsp b/cos/cosmgr/src/main/webapp/index.jsp new file mode 100644 index 0000000..a064b45 --- /dev/null +++ b/cos/cosmgr/src/main/webapp/index.jsp @@ -0,0 +1,8 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class new file mode 100644 index 0000000..1bc8889 Binary files /dev/null and b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class differ diff --git a/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class new file mode 100644 index 0000000..ef46719 Binary files /dev/null and b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class differ diff --git a/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class new file mode 100644 index 0000000..cc9d6f7 Binary files /dev/null and b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class differ diff --git a/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class new file mode 100644 index 0000000..23ee3d9 Binary files /dev/null and b/cos/cosmgr/target/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class differ diff --git a/cos/cosmgr/target/cosmgr.war b/cos/cosmgr/target/cosmgr.war new file mode 100644 index 0000000..f10f3a5 Binary files /dev/null and b/cos/cosmgr/target/cosmgr.war differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class new file mode 100644 index 0000000..1bc8889 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CORSResponseFilter.class differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class new file mode 100644 index 0000000..ef46719 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSJaxRsApplication.class differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class new file mode 100644 index 0000000..cc9d6f7 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService$1.class differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class new file mode 100644 index 0000000..23ee3d9 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/classes/com/cablelabs/vcpe/cos/cosmgr/CoSService.class differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar new file mode 100644 index 0000000..9c1f40d Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/cglib-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/cglib-2.2.0-b14.jar new file mode 100644 index 0000000..7d6963b Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/cglib-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..267b07a Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..d991659 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/guava-14.0.1.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/guava-14.0.1.jar new file mode 100644 index 0000000..3a3d925 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/guava-14.0.1.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar new file mode 100644 index 0000000..acec5bc Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar new file mode 100644 index 0000000..fb2687f Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar new file mode 100644 index 0000000..2c8df43 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.annotation-api-1.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.annotation-api-1.2.jar new file mode 100644 index 0000000..9ab39ff Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.annotation-api-1.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar new file mode 100644 index 0000000..21463e7 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar new file mode 100644 index 0000000..b7d364b Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-client-2.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-client-2.2.jar new file mode 100644 index 0000000..cab47b0 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-client-2.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-common-2.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-common-2.2.jar new file mode 100644 index 0000000..55d27ed Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-common-2.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar new file mode 100644 index 0000000..e03b5f9 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar new file mode 100644 index 0000000..786290a Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-server-2.2.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-server-2.2.jar new file mode 100644 index 0000000..37b3410 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/jersey-server-2.2.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar new file mode 100644 index 0000000..cff0ef8 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar new file mode 100644 index 0000000..832e18e Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar new file mode 100644 index 0000000..01bb838 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar new file mode 100644 index 0000000..29a1057 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar new file mode 100644 index 0000000..bd6aa17 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar b/cos/cosmgr/target/cosmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar new file mode 100644 index 0000000..de85403 Binary files /dev/null and b/cos/cosmgr/target/cosmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar differ diff --git a/cos/cosmgr/target/cosmgr/WEB-INF/web.xml b/cos/cosmgr/target/cosmgr/WEB-INF/web.xml new file mode 100644 index 0000000..49cf6ad --- /dev/null +++ b/cos/cosmgr/target/cosmgr/WEB-INF/web.xml @@ -0,0 +1,24 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.cos + + + javax.ws.rs.Application + com.cablelabs.vcpe.cos.cosmgr.CoSJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + + diff --git a/cos/cosmgr/target/cosmgr/index.jsp b/cos/cosmgr/target/cosmgr/index.jsp new file mode 100644 index 0000000..a064b45 --- /dev/null +++ b/cos/cosmgr/target/cosmgr/index.jsp @@ -0,0 +1,8 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/cos/cosmgr/target/maven-archiver/pom.properties b/cos/cosmgr/target/maven-archiver/pom.properties new file mode 100644 index 0000000..3ea6361 --- /dev/null +++ b/cos/cosmgr/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:18 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=cosmgr diff --git a/cos/pom.xml b/cos/pom.xml new file mode 100644 index 0000000..1ad3e4b --- /dev/null +++ b/cos/pom.xml @@ -0,0 +1,24 @@ + + + + com.cablelabs.vcpe + vcpe-services + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + cos + pom + 1.0-SNAPSHOT + + + cosbase + cosmgr + + + + + diff --git a/deploy.sh b/deploy.sh new file mode 100755 index 0000000..e267f4b --- /dev/null +++ b/deploy.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +echo ... stopping tomcat +/Library/Tomcat/bin/shutdown.sh + +declare -a services=('cos' 'evc' 'svc') +for svc in "${services[@]}" +do + for del in `ls -d /Library/Tomcat/webapps/${svc}*`; do + echo ... removing $del + rm -rf $del + done +done + +echo ... building new war files +mvn clean install + +echo ... moving war files to tomcat root +cp ./cos/cosmgr/target/cosmgr.war /Library/Tomcat/webapps/. +cp ./evc/evcmgr/target/evcmgr.war /Library/Tomcat/webapps/. +cp ./svc/svcmgr/target/svcmgr.war /Library/Tomcat/webapps/. +ls -l /Library/Tomcat/webapps/*.war + +echo ... starting tomcat +/Library/Tomcat/bin/startup.sh diff --git a/doc/dev-notes.md b/doc/dev-notes.md new file mode 100644 index 0000000..1ff24b6 --- /dev/null +++ b/doc/dev-notes.md @@ -0,0 +1,9 @@ +## REST Clients Notes : CoSClient, EvcClient, EplClient +1. Provide rest communications to cosmgr, evcmgr, and eplmgr repsectivly. + - provide create/request/update/delete capabilities + - these services must be running within tomcat + - each has it's own separate war file +2. Creating resources + - The create() methods take cos/epl/evc objects as inputs + - Not all inputs are known at time of resource creation, and the create service itself will set some of the parameters, and the all return object of the type that was created which will capture any values set within the create service (in addition to remembering the values originally supplied) + - You must capture the object returned by the create function, as there will be values that were set during that proccess diff --git a/doc/sample-json.txt b/doc/sample-json.txt new file mode 100644 index 0000000..d46dc4c --- /dev/null +++ b/doc/sample-json.txt @@ -0,0 +1,46 @@ + +// cos +Content-Type application/json +Accept application/json +{ + "id" : "gold", + "commitedInfoRate" : 100, + "availbility" : 99.9, + "frameDelay" : 2.5, + "jitter" : 3.6, + "frameLoss" : 4.7 +} + +// evc +Content-Type application/json +Accept application/json +{ + "broadcastFrameDelivery": "UNCONDITIONAL", + "ceVLanIdPreservation": true, + "ceVlanCosPreservation": true, + "cosId": "gold", + "evcMaxSvcFrameSize": 1600, + "evcType": "POINT_TO_POINT", + "id": "11:00:11:11:11:11|11:00:22:22:22:22", + "maxUnis": 2, + "multicastFrameDelivery": "UNCONDITIONAL", + "oneWayAvailability": 0.99, + "oneWayFrameDelay": 17.43, + "oneWayFrameLossRatio": 0.01, + "uniIdList": [ + "UNI-1", + "UNI-2" + ], + "uniIpList": [ + "192.168.1.1", + "192.168.1.2" + ], + "uniMacList": [ + "11:00:11:11:11:11", + "11:00:22:22:22:22" + ], + "unicastFrameDelivery": "UNCONDITIONAL" +} + +// for the simple ping test gets +Accept text/plain \ No newline at end of file diff --git a/doc/state-of-code.md b/doc/state-of-code.md new file mode 100644 index 0000000..0a9eff3 --- /dev/null +++ b/doc/state-of-code.md @@ -0,0 +1,22 @@ +This is a proof of concept prototype implementation enabling the creation and management of MEF EPL Services. + +Being a proof of concept prototype, there are some areas which have received only superficial coverage or no coverage at all. Following are items that should be addressed when evolving this to a production oriented implementation + +1. The current test suite is reasonable, but exhaustive. Production targeted version should have more thourough test coverage +2. Exception handling is only superficially implemented. A production system should include a more robust exception handling and error reporting architecture +3. Only a subset of the MEF Attributes have been implemented. Long term the goal is to evolve this code base to fully support all MEF paramaters +4. We are only implementing a portion of the data model for the sake of expediency. + - Only EPL service is supported at the moment + - Currently, the service repo is hard coded to hold EPL (we have not implemented the more general MEFSvc and Eline/ELine/Tree classes that in the future will also reside in the repo). + - The MEF service hierarchy (MEFSvc->Eline->EPL) need to be architected and implemented + - The SvcMgr needs to be architected in order to handle multiple service types from a REST API perspective and from a persitance perspective + - the REST URL/path architecture is currently hard coded, should be configurable at some point (config file, etc). +5. There has not been a definitive analysis of which specific service attributes are recieved, generated, or queried at each service layer. + - It would be very useful to do this analysis, and then reflect in the code through structure and documentation, which attributes are set/queried at each layer + +Specific To Do: +1. Who supplies/generates evcMaxSvcFrameSize? Currently hard coded to 1600 in EplService.create() +2. Make sure for all XXXClient.create(xxx), that we capture the returned version, in case the service layer modified it + - for example epl = eplClient.create(epl) +3. Check for nulls when prior to printing out lists in dump() fxns +4. Unique EVC IDs are being generated via an internal counter. This of course does not scale nor survive restart. A proper unique ID generation approach will be needed for production. \ No newline at end of file diff --git a/evc/evcbase/pom.xml b/evc/evcbase/pom.xml new file mode 100644 index 0000000..07c6464 --- /dev/null +++ b/evc/evcbase/pom.xml @@ -0,0 +1,29 @@ + + + + com.cablelabs.vcpe + evc + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + evcbase + jar + 1.0-SNAPSHOT + + + evcbase + + + + + com.cablelabs.vcpe + cosbase + 1.0-SNAPSHOT + + + + diff --git a/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.java b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.java new file mode 100644 index 0000000..25fae8b --- /dev/null +++ b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.java @@ -0,0 +1,149 @@ +package com.cablelabs.vcpe.evc.evcbase.client; + +import com.cablelabs.vcpe.evc.evcbase.model.Evc; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * Created by steve on 6/8/15. + */ +public class EvcClient { + + private Client client; // provided by Jersey + + public EvcClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public Evc create(Evc evc) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/evcmgr/webapi/"); + Response response = target.path("evc") + .request(MediaType.APPLICATION_JSON) + .post(Entity.entity(evc, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Evc.class); + } + + //-------------------------------------------------------- + public Evc update(Evc evc) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/evcmgr/webapi/"); + Response response = target.path("evc/"+evc.getId()) + .request(MediaType.APPLICATION_JSON) + .put(Entity.entity(evc, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Evc.class); + } + + //-------------------------------------------------------- + public Evc get(String evcId) + //-------------------------------------------------------- + // get Evc of specified ID + + { + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc/"+evcId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Evc.class); + } + + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + // get a list of all Evc instances + { + + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + // Can I do this with a Response, so that I can check for errors + List response = target.path("evc/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public void delete(String evcId) + //-------------------------------------------------------- + // delete Evc of specified ID + { + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + Response response = target.path("evc/"+evcId).request(MediaType.APPLICATION_JSON).delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + //-------------------------------------------------------- + public Evc testGet() + //-------------------------------------------------------- + // test marshaling of Evc class from server json + + { + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Evc.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + return response.readEntity(String.class); + } +} diff --git a/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/Evc.java b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/Evc.java new file mode 100644 index 0000000..f44af27 --- /dev/null +++ b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/Evc.java @@ -0,0 +1,235 @@ +package com.cablelabs.vcpe.evc.evcbase.model; + +import com.cablelabs.vcpe.common.Dbg; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class Evc +{ + // set up so that we can use the ENUM's as strings for REST calls & dbg prints + + public enum EvcType { + + UNASSIGNED ("UNASSIGNED"), + POINT_TO_POINT ("POINT_TO_POINT"), + MULTIPOINT_TO_MULTIPOINT ("MULTIPOINT_TO_MULTIPOINT"), + ROOTED_MULTIPOINT ("ROOTED_MULTIPOINT"); + private final String s; + private EvcType(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + public enum FrameDelivery { // may belong in more general location eventually + + UNASSIGNED ("UNASSIGNED"), + DISCARD ("DISCARD"), + UNCONDITIONAL ("UNCONDITIONAL"), + CONDITIONAL ("CONDITIONAL"); + private final String s; + private FrameDelivery(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + private String id; + private EvcType evcType; + private long maxUnis; + private FrameDelivery unicastFrameDelivery; + private FrameDelivery multicastFrameDelivery; + private FrameDelivery broadcastFrameDelivery; + private List uniIdList = null; + private List uniIpList = null; + private List uniMacList = null; + private boolean ceVLanIdPreservation; + private boolean ceVlanCosPreservation; + private long evcMaxSvcFrameSize; // at least 1522, should be > 1600 byte + private String cosId; // CoS Attributes serving as EVCPerformance attr for now + //private EvcPerf evcPerf = null; + + // EVC Perf params + private double oneWayFrameDelay; // milliseconds + private double oneWayFrameLossRatio; // percentage + private double oneWayAvailability; // percentage + + // zero argument constructor required for JAX-RS + public Evc() { + id = "unset"; + evcType = EvcType.UNASSIGNED; + maxUnis = -1; + unicastFrameDelivery = FrameDelivery.UNASSIGNED; + multicastFrameDelivery = FrameDelivery.UNASSIGNED;; + broadcastFrameDelivery = FrameDelivery.UNASSIGNED;; + uniIdList = null; + uniIpList = null; + uniMacList = null; + ceVLanIdPreservation = false; + ceVlanCosPreservation = false; + evcMaxSvcFrameSize = -1; + cosId = "unset"; + + //evcPerf = new EvcPerf(); + oneWayFrameDelay = -1.0; + oneWayFrameLossRatio = -1.0; + oneWayAvailability = -1.0; + } + + // Utility methods + + public void setAllNonPerfProps(String id, EvcType evcType, long maxUnis, + List uniIdList, List uniMacList, List uniIpList, + FrameDelivery unicastFrameDelivery, + FrameDelivery multicastFrameDelivery, + FrameDelivery broadcastFrameDelivery, + boolean ceVLanIdPreservation, boolean ceVlanCosPreservation, + long evcMaxSvcFrameSize, String cosId) { + this.id = id; + this.evcType = evcType; + this.uniIdList = uniIdList; + this.uniMacList = uniMacList; + this.uniIpList = uniIpList; + this.maxUnis = maxUnis; + this.unicastFrameDelivery = unicastFrameDelivery; + this.multicastFrameDelivery = multicastFrameDelivery; + this.broadcastFrameDelivery = broadcastFrameDelivery; + this.ceVLanIdPreservation = ceVLanIdPreservation; + this.ceVlanCosPreservation = ceVlanCosPreservation; + this.evcMaxSvcFrameSize = evcMaxSvcFrameSize; + this.cosId = cosId; + } + + public void setAllPerfProps( double oneWayFrameDelay, + double oneWayFrameLossRatio, + double oneWayAvailability ) + { + this.oneWayFrameDelay = oneWayFrameDelay; + this.oneWayFrameLossRatio = oneWayFrameLossRatio; + this.oneWayAvailability = oneWayAvailability; + } + + public void dump() { dump(0); } + public void dump(int tab) { + Dbg.p(tab, "id: " + this.id); + Dbg.p(tab, "cosId: " + this.cosId); + Dbg.p(tab, "evcType: " + this.evcType); + Dbg.p(tab, "maxUnis: " + this.maxUnis); + Dbg.p(tab, "Uni ID List:"); + for (String uniId : uniIdList) + Dbg.p(tab+1, uniId); + Dbg.p(tab, "Uni Mac List:"); + for (String macId : uniMacList) + Dbg.p(tab+1, macId); + Dbg.p(tab, "Uni IP List:"); + for (String ipAddr : uniIpList) + Dbg.p(tab+1, ipAddr); + Dbg.p(tab, "UnicastFrameDelivery: " + this.unicastFrameDelivery); + Dbg.p(tab, "MulticastFrameDelivery: " + this.multicastFrameDelivery); + Dbg.p(tab, "BroadcastFrameDelivery: " + this.broadcastFrameDelivery); + Dbg.p(tab, "CeVLanIdPreservation: " + this.ceVLanIdPreservation); + Dbg.p(tab, "CeVlanCosPreservation: " + this.ceVlanCosPreservation); + Dbg.p(tab, "EvcMaxSvcFrameSize: " + this.evcMaxSvcFrameSize); + Dbg.p(tab, "--- EVC Performance Params"); + Dbg.p(tab+1, "oneWayFrameDelay: " + this.oneWayFrameDelay); + Dbg.p(tab+1, "oneWayFrameLossRatio: " + this.oneWayFrameLossRatio); + Dbg.p(tab+1, "oneWayAvailability: " + this.oneWayAvailability); + } + + public static void dumpList(List evcList) { dumpList(0, evcList); } + public static void dumpList(int tab, List evcList) { + int numEvc = 0; + Dbg.p("----- Evc List : [" + evcList.size() + "] elements"); + for (Evc curEvc : evcList) { + numEvc++; + Dbg.p(tab+1, ""); + curEvc.dump(tab+2); + } + } + + // Getters & Setters + + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public EvcType getEvcType() { return evcType; } + public void setEvcType(EvcType evcType) { this.evcType = evcType; } + + public long getMaxUnis() { return maxUnis; } + + public void setMaxUnis(long maxUnis) { this.maxUnis = maxUnis; } + + public FrameDelivery getUnicastFrameDelivery() { return unicastFrameDelivery; } + public void setUnicastFrameDelivery(FrameDelivery unicastFrameDelivery) { + this.unicastFrameDelivery = unicastFrameDelivery; } + + public FrameDelivery getMulticastFrameDelivery() { return multicastFrameDelivery; } + public void setMulticastFrameDelivery(FrameDelivery multicastFrameDelivery) { + this.multicastFrameDelivery = multicastFrameDelivery; } + + public FrameDelivery getBroadcastFrameDelivery() { return broadcastFrameDelivery; } + public void setBroadcastFrameDelivery(FrameDelivery broadcastFrameDelivery) { + this.broadcastFrameDelivery = broadcastFrameDelivery; } + + public List getUniIdList() { return uniIdList; } + public void setUniIdList(List uniIdList) { this.uniIdList = uniIdList; } + + public List getUniMacList() { return uniMacList; } + public void setUniMacList(List uniMacList) { this.uniMacList = uniMacList; } + + + public List getUniIpList() { return uniIpList; } + public void setUniIpList(List uniIpList) { this.uniIpList = uniIpList; } + + public boolean isCeVLanIdPreservation() { return ceVLanIdPreservation; } + public void setCeVLanIdPreservation(boolean ceVLanIdPreservation) { + this.ceVLanIdPreservation = ceVLanIdPreservation; } + + public boolean isCeVlanCosPreservation() { return ceVlanCosPreservation; } + + public void setCeVlanCosPreservation(boolean ceVlanCosPreservation) { + this.ceVlanCosPreservation = ceVlanCosPreservation; } + + public long getEvcMaxSvcFrameSize() { return evcMaxSvcFrameSize; } + public void setEvcMaxSvcFrameSize(long evcMaxSvcFrameSize) { + this.evcMaxSvcFrameSize = evcMaxSvcFrameSize; } + + public String getCosId() { return cosId; } + public void setCosId(String cosId) { this.cosId = cosId; } + + public double getOneWayFrameDelay() { return oneWayFrameDelay; } + public void setOneWayFrameDelay(double oneWayFrameDelay) { this.oneWayFrameDelay = oneWayFrameDelay; } + + public double getOneWayFrameLossRatio() { return oneWayFrameLossRatio; } + public void setOneWayFrameLossRatio(double oneWayFrameLossRatio) { this.oneWayFrameLossRatio = oneWayFrameLossRatio; } + + public double getOneWayAvailability() { return oneWayAvailability; } + public void setOneWayAvailability(double oneWayAvailability) { this.oneWayAvailability = oneWayAvailability; } + + + // Someday might make sense to put all EVC Perf params in seperate class +// private class EvcPerf { +// private long oneWayFrameDelay; // milliseconds +// private long oneWayFrameDelayRange; // milliseconds +// +// +// public EvcPerf () { +// this.oneWayFrameDelay = -333; +// this.oneWayFrameDelayRange = -333; +// } +// +// public void setAllParams (long oneWayFrameDelay, long oneWayFrameDelayRange) { +// this.oneWayFrameDelay = oneWayFrameDelay; +// this.oneWayFrameDelayRange = oneWayFrameDelayRange; +// } +// +// public long getOneWayFrameDelay() { return oneWayFrameDelay; } +// public void setOneWayFrameDelay(long oneWayFrameDelay) { +// this.oneWayFrameDelay = oneWayFrameDelay; } +// +// public long getOneWayFrameDelayRange() { return oneWayFrameDelayRange; } +// public void setOneWayFrameDelayRange(long oneWayFrameDelayRange) { +// this.oneWayFrameDelayRange = oneWayFrameDelayRange; } +// } +} diff --git a/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.java b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.java new file mode 100644 index 0000000..e1bd19e --- /dev/null +++ b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.java @@ -0,0 +1,102 @@ +package com.cablelabs.vcpe.evc.evcbase.model; + +import com.cablelabs.vcpe.common.Dbg; + +/** + * Created by steve on 6/9/15. + */ +public class EvcPerformance { + + private String cosId; // associated CoS + private long oneWayFrameDelay; // milliseconds + private long oneWayFrameDelayRange; // milliseconds + private long oneWayMeanFrameDelay; // milliseconds + private long oneWayInterFrameDelayVariation; // milliseconds + private double oneWayFrameLossRatio; // percentage + private double oneWayAvailability; // percentage + private long oneWayResilHighLossIntervals; //count + private long oneWayResilConsecHighLossIntervals; //count + + // zero argument constructor required for JAX-RS + public EvcPerformance() { + oneWayFrameDelay = -1; + oneWayFrameDelayRange = -1; + oneWayMeanFrameDelay = -1; + oneWayInterFrameDelayVariation = -1; + oneWayFrameLossRatio = -1.0; + oneWayAvailability = -1.0; + oneWayResilHighLossIntervals = -1; + oneWayResilConsecHighLossIntervals = -1; + } + + public void setAllProps (String cosId, long oneWayFrameDelay, long oneWayFrameDelayRange, + long oneWayMeanFrameDelay, long oneWayInterFrameDelayVariation, + double oneWayFrameLossRatio, double oneWayAvailability, + long oneWayResilHighLossIntervals, long oneWayResilConsecHighLossIntervals) + { + this.cosId = cosId; + this.oneWayFrameDelay = oneWayFrameDelay; + this.oneWayFrameDelayRange = oneWayFrameDelayRange; + this.oneWayMeanFrameDelay = oneWayMeanFrameDelay; + this.oneWayInterFrameDelayVariation = oneWayInterFrameDelayVariation; + this.oneWayFrameLossRatio = oneWayFrameLossRatio; + this.oneWayAvailability = oneWayAvailability; + this.oneWayResilHighLossIntervals = oneWayResilHighLossIntervals; + this.oneWayResilConsecHighLossIntervals = oneWayResilConsecHighLossIntervals; + } + + + // util fxns + + public void dump() { dump(0); } + public void dump(int tab) { + Dbg.p(tab, "cosId: " + this.cosId); + Dbg.p(tab, "oneWayFrameDelay: " + this.oneWayFrameDelay); + Dbg.p(tab, "oneWayFrameDelayRange: " + this.oneWayFrameDelayRange); + Dbg.p(tab, "oneWayMeanFrameDelay: " + this.oneWayMeanFrameDelay); + Dbg.p(tab, "oneWayFrameLossRatio: " + this.oneWayFrameLossRatio); + Dbg.p(tab, "oneWayAvailability: " + this.oneWayAvailability); + Dbg.p(tab, "oneWayInterFrameDelayVariation: " + this.oneWayInterFrameDelayVariation); + Dbg.p(tab, "oneWayResilHighLossIntervals: " + this.oneWayResilHighLossIntervals); + Dbg.p(tab, "oneWayResilConsecHighLossIntervals: " + this.oneWayResilConsecHighLossIntervals); + } + + // Getters and setters + + public String getCosId() { return cosId; } + public void setCosId(String cosId) { this.cosId = cosId; } + + public long getOneWayFrameDelay() { return oneWayFrameDelay; } + public void setOneWayFrameDelay(long oneWayFrameDelay) { + this.oneWayFrameDelay = oneWayFrameDelay; } + + public long getOneWayFrameDelayRange() { return oneWayFrameDelayRange; } + public void setOneWayFrameDelayRange(long oneWayFrameDelayRange) { + this.oneWayFrameDelayRange = oneWayFrameDelayRange; } + + public long getOneWayMeanFrameDelay() { return oneWayMeanFrameDelay; } + public void setOneWayMeanFrameDelay(long oneWayMeanFrameDelay) { + this.oneWayMeanFrameDelay = oneWayMeanFrameDelay; } + + public long getOneWayInterFrameDelayVariation() { return oneWayInterFrameDelayVariation; } + public void setOneWayInterFrameDelayVariation(long oneWayInterFrameDelayVariation) { + this.oneWayInterFrameDelayVariation = oneWayInterFrameDelayVariation; } + + public double getOneWayFrameLossRatio() { return oneWayFrameLossRatio; } + public void setOneWayFrameLossRatio(double oneWayFrameLossRatio) { + this.oneWayFrameLossRatio = oneWayFrameLossRatio; } + + public double getOneWayAvailability() { return oneWayAvailability; } + public void setOneWayAvailability(double oneWayAvailability) { + this.oneWayAvailability = oneWayAvailability; } + + public long getOneWayResilHighLossIntervals() { return oneWayResilHighLossIntervals; } + public void setOneWayResilHighLossIntervals(long oneWayResilHighLossIntervals) { + this.oneWayResilHighLossIntervals = oneWayResilHighLossIntervals; } + + public long getOneWayResilConsecHighLossIntervals() { return oneWayResilConsecHighLossIntervals; } + public void setOneWayResilConsecHighLossIntervals(long oneWayResilConsecHighLossIntervals) { + this.oneWayResilConsecHighLossIntervals = oneWayResilConsecHighLossIntervals; } + + +} diff --git a/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.java b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.java new file mode 100644 index 0000000..80bebc7 --- /dev/null +++ b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.java @@ -0,0 +1,21 @@ +package com.cablelabs.vcpe.evc.evcbase.repository; + +import com.cablelabs.vcpe.evc.evcbase.model.Evc; + +import java.util.List; + +/** + * Created by steve on 5/25/15. + */ +public interface EvcRespository +{ + // TODO add exceptions + + Evc add(Evc evc); // returns null if already exists, otherwise returns stored evc + Evc get(String evcId); // returns null if not found, otherwise stored evc + Evc update(Evc evc); // returns null if did not exit, otherwise evc as it was previous to update (put in any case) + Evc delete(String evcId); // returns null if not found, otherwise evc as it was previous to delete + int count(); // number of Evc stored in the repo + public void dump(int tab); // print out contents of the repo + List getAll(); +} diff --git a/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.java b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.java new file mode 100644 index 0000000..158ae3f --- /dev/null +++ b/evc/evcbase/src/main/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.java @@ -0,0 +1,91 @@ +package com.cablelabs.vcpe.evc.evcbase.repository; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by steve on 5/24/15. + */ + + +/* + Singleton that contains a hashmap which holds instances of Evc objects, indexed by CiS ID + */ + +public enum EvcRespositoryInMem implements EvcRespository { + INSTANCE; // Singleton + + private Map evcDB = new ConcurrentHashMap<>(); + + @Override + //-------------------------------------------------------- + public Evc add(Evc evc) + //-------------------------------------------------------- + { + if ( this.get(evc.getId()) != null ) { + return null; + } + evcDB.put(evc.getId(), evc ); + return evc; + } + + @Override + //-------------------------------------------------------- + public Evc get(String evcId) { + return evcDB.get(evcId); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public Evc update(Evc evc) + //-------------------------------------------------------- + { + // put returns null if evc did not exist, other returns evc as it stood prior to put + return evcDB.put(evc.getId(), evc); + } + + @Override + //-------------------------------------------------------- + public Evc delete(String evcId) + //-------------------------------------------------------- + { + // remove returns null if evc did not exist, other returns evc as it stood prior to remove + return evcDB.remove(evcId); + } + + @Override + //-------------------------------------------------------- + public int count() { + return evcDB.size(); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + { + List evcList = new ArrayList(evcDB.values()); + return evcList; + } + + @Override + //-------------------------------------------------------- + public void dump(int tab) + //-------------------------------------------------------- + { + Dbg.p(tab, "Evc Repo: " + evcDB.size() + " entrie(s)"); + int numEvc = 0; + for (Evc curEvc : evcDB.values()) { + numEvc++; + Dbg.p(tab+1, ""); + curEvc.dump(tab+2); + } + } +} diff --git a/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.java b/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.java new file mode 100644 index 0000000..3f62320 --- /dev/null +++ b/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.java @@ -0,0 +1,163 @@ +package com.cablelabs.vcpe.evc.evcbase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.client.CoSClient; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; + +import org.junit.Test; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by steve on 6/8/15. + */ +public class EvcClientTest { + + @Test + public void testAll() throws Exception { + + // We have to have a CoS for Evc to referece + CoSClient coSClient = new CoSClient(); + + // Add gold service to CoS layer + CoS gold = new CoS(); + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + Dbg.p("gold svc being created in CoS"); + + gold = coSClient.create(gold); + assertNotNull(gold); + + Evc evc_1 = new Evc(); + + List uniIdList1 = new ArrayList(); + uniIdList1.add("unset-id-1"); + uniIdList1.add("unset-id-1"); + + List uniMacList1 = new ArrayList(); + uniMacList1.add("11:00:11:11:11:11"); + uniMacList1.add("11:00:22:22:22:22"); + + List ipList1 = new ArrayList(); + ipList1.add("192.168.1.1"); + ipList1.add("192.168.1.2"); + + evc_1.setAllNonPerfProps("id-unset-1", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList1, uniMacList1, ipList1, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 1600, gold.getId()); + + EvcClient evcClient = new EvcClient(); + Dbg.p(evc_1.getId()+" being created via evcmgr"); + evc_1.dump(1); + + evc_1 = evcClient.create(evc_1); + assertNotNull(evc_1); + + Evc retrievedEvc = evcClient.get(evc_1.getId()); + assertNotNull(retrievedEvc); + Dbg.p("evc just retrieved from Evc Service"); + retrievedEvc.dump(1); + retrievedEvc = null; + + evc_1.setBroadcastFrameDelivery(Evc.FrameDelivery.DISCARD); + Dbg.p("EVC["+ evc_1.getId()+ "] : about to be updated"); + evc_1.dump(1); + assertNotNull(evcClient.update(evc_1)); + retrievedEvc = evcClient.get(evc_1.getId()); + assertNotNull(retrievedEvc); + Dbg.p("EVC["+ evc_1.getId()+ "] : retrieved after the update"); + retrievedEvc.dump(1); + + Evc evc_2 = new Evc(); + Evc evc_3 = new Evc(); + + List uniIdList2 = new ArrayList(); + uniIdList2.add("unset-id-11"); + uniIdList2.add("unset-id-22"); + + List uniIdList3 = new ArrayList(); + uniIdList3.add("unset-id-111"); + uniIdList3.add("unset-id-222"); + + List uniMacList2 = new ArrayList(); + uniMacList2.add("22:00:11:11:11:11"); + uniMacList2.add("22:00:22:22:22:22"); + + List uniMacList3 = new ArrayList(); + uniMacList3.add("33:00:11:11:11:11"); + uniMacList3.add("33:00:22:22:22:22"); + + List ipList2 = new ArrayList(); + ipList2.add("192.168.2.1"); + ipList2.add("192.168.2.2"); + + List ipList3 = new ArrayList(); + ipList3.add("192.168.3.1"); + ipList3.add("192.168.3.2"); + + evc_2.setAllNonPerfProps("id-unset-2", + Evc.EvcType.ROOTED_MULTIPOINT, 2, uniIdList2, uniMacList2, ipList2, + Evc.FrameDelivery.CONDITIONAL, + Evc.FrameDelivery.CONDITIONAL, + Evc.FrameDelivery.CONDITIONAL, + true, false, 1111, gold.getId()); + + evc_3.setAllNonPerfProps("id-unset-3", + Evc.EvcType.MULTIPOINT_TO_MULTIPOINT, 2, uniIdList3, uniMacList2, ipList3, + Evc.FrameDelivery.DISCARD, + Evc.FrameDelivery.DISCARD, + Evc.FrameDelivery.DISCARD, + false, true, 2222, gold.getId()); + + evc_2 = evcClient.create(evc_2); + assertNotNull(evc_2); + + evc_3 = evcClient.create(evc_3); + assertNotNull(evc_3); + + List evcList = evcClient.getAll(); + assertNotNull(evcList); + assertEquals(evcList.size(), 3); + + Evc.dumpList(evcList); + + evcClient.delete(evc_3.getId()); + evcList = evcClient.getAll(); + assertNotNull(evcList); + assertEquals(evcList.size(),2); + Evc.dumpList(evcList); + + evcClient.delete(evc_2.getId()); + evcList = evcClient.getAll(); + assertNotNull(evcList); + assertEquals(evcList.size(),1); + Evc.dumpList(evcList); + + evcClient.delete(evc_1.getId()); + evcList = evcClient.getAll(); + assertNotNull(evcList); + assertEquals(evcList.size(),0); + Evc.dumpList(evcList); + } + + @Test + public void testTestGet() throws Exception { + EvcClient evcClient = new EvcClient(); + Evc evc = evcClient.testGet(); + evc.dump();; + } + + @Test + public void testPing() throws Exception { + + EvcClient evcClient = new EvcClient(); + String resp = evcClient.ping(); + Dbg.p(resp); + } +} diff --git a/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.java b/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.java new file mode 100644 index 0000000..402d20b --- /dev/null +++ b/evc/evcbase/src/test/java/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.java @@ -0,0 +1,120 @@ +package com.cablelabs.vcpe.evc.evcbase.repository; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; + +/** + * Created by steve on 5/25/15. + */ +public class EvcRepositoryTest +{ + + @Test + public void test() { + + // First, create a couple of CoS's to reference + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + // id CIR/MBS avail delay jitter frameloss + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + Evc evc_1 = new Evc(); + Evc evc_2 = new Evc(); + Evc evc_3 = new Evc(); + + List uniIdList = new ArrayList(); + uniIdList.add("UNI-1"); + uniIdList.add("UNI-2"); + + List uniMacList = new ArrayList(); + uniMacList.add("11:11:11:11:11:11"); + uniMacList.add("22:22:22:22:22:22"); + + List uniIpList = new ArrayList(); + uniIpList.add("192.168.1.1"); + uniIpList.add("192.168.1.2"); + + evc_1.setAllNonPerfProps("evc_1", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 1600, gold.getId()); + evc_2.setAllNonPerfProps("evc_2", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 1500, silver.getId()); + evc_3.setAllNonPerfProps("evc_3", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 1400, bronze.getId()); + + evc_1.dump(); + evc_2.dump(); + evc_3.dump(); + + EvcRespository repo = EvcRespositoryInMem.INSTANCE; + + assertNotNull(repo.add(evc_1)); + assertNotNull(repo.add(evc_2)); + assertNotNull(repo.add(evc_3)); + assertNull(repo.add(evc_3)); // duplicate + assertEquals(repo.count(), 3); + + assertNotNull(repo.get(evc_1.getId())); + assertNotNull(repo.get(evc_2.getId())); + assertNotNull(repo.get(evc_3.getId())); + + assertNotNull(repo.delete(evc_2.getId())); + assertNull(repo.delete(evc_2.getId())); + assertNull(repo.delete("not-in-repo")); + assertEquals(repo.count(), 2); + + assertEquals(repo.get(evc_1.getId()).getEvcMaxSvcFrameSize(), 1600); + assertNotEquals(repo.get(evc_3.getId()).getEvcMaxSvcFrameSize(), 1600); + + Evc evc_4 = new Evc(); + evc_4.setAllNonPerfProps("evc_4", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 1200, bronze.getId()); + + assertNull(repo.update(evc_4)); // update non-existent cos + assertEquals(repo.count(), 3); + assertEquals(repo.get("evc_4").getEvcMaxSvcFrameSize(), 1200); + + evc_4.setEvcMaxSvcFrameSize(1250); + assertNotNull(repo.update(evc_4)); // update existing evc, same object + assertEquals(repo.get(evc_4.getId()).getEvcMaxSvcFrameSize(), 1250); + + evc_4.dump(); + + Evc evc_4_2 = new Evc(); + evc_4_2.setAllNonPerfProps("evc_4", + Evc.EvcType.POINT_TO_POINT, 2, uniIdList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + Evc.FrameDelivery.UNCONDITIONAL, + true, true, 500, bronze.getId()); + + assertNotNull(repo.update(evc_4_2)); // update evc, new object + assertEquals(repo.get(evc_4_2.getId()).getEvcMaxSvcFrameSize(), 500); + } +} diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient$1.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient$1.class new file mode 100644 index 0000000..dc9831c Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient$1.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.class new file mode 100644 index 0000000..cd2b87f Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClient.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$EvcType.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$EvcType.class new file mode 100644 index 0000000..f08d7f9 Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$EvcType.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$FrameDelivery.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$FrameDelivery.class new file mode 100644 index 0000000..d0622b1 Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc$FrameDelivery.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc.class new file mode 100644 index 0000000..7f317d0 Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/Evc.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.class new file mode 100644 index 0000000..c377b6e Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/model/EvcPerformance.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.class new file mode 100644 index 0000000..9aee4c8 Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespository.class differ diff --git a/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.class b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.class new file mode 100644 index 0000000..5fc5a14 Binary files /dev/null and b/evc/evcbase/target/classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRespositoryInMem.class differ diff --git a/evc/evcbase/target/evcbase.jar b/evc/evcbase/target/evcbase.jar new file mode 100644 index 0000000..f4f5b3a Binary files /dev/null and b/evc/evcbase/target/evcbase.jar differ diff --git a/evc/evcbase/target/maven-archiver/pom.properties b/evc/evcbase/target/maven-archiver/pom.properties new file mode 100644 index 0000000..2831fc8 --- /dev/null +++ b/evc/evcbase/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:19 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=evcbase diff --git a/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.class b/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.class new file mode 100644 index 0000000..e7190fc Binary files /dev/null and b/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/client/EvcClientTest.class differ diff --git a/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.class b/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.class new file mode 100644 index 0000000..c9cf627 Binary files /dev/null and b/evc/evcbase/target/test-classes/com/cablelabs/vcpe/evc/evcbase/repository/EvcRepositoryTest.class differ diff --git a/evc/evcmgr/pom.xml b/evc/evcmgr/pom.xml new file mode 100644 index 0000000..1a16633 --- /dev/null +++ b/evc/evcmgr/pom.xml @@ -0,0 +1,39 @@ + + + + com.cablelabs.vcpe + evc + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + evcmgr + war + 1.0-SNAPSHOT + + + evcmgr + + + + + com.cablelabs.vcpe + evcbase + 1.0-SNAPSHOT + + + com.cablelabs.vcpe + cosbase + 1.0-SNAPSHOT + + + com.cablelabs.vcpe + unibase + 1.0-SNAPSHOT + + + + diff --git a/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.java b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.java new file mode 100644 index 0000000..c224252 --- /dev/null +++ b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.java @@ -0,0 +1,24 @@ +package com.cablelabs.vcpe.evc.evcmgr; + +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 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/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.java b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.java new file mode 100644 index 0000000..5d46297 --- /dev/null +++ b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.java @@ -0,0 +1,18 @@ +package com.cablelabs.vcpe.evc.evcmgr; + +import org.glassfish.jersey.server.ResourceConfig; + +// +// In order to avoid CORS issues, register our CORS Response filter +// + +public class EvcJaxRsApplication extends ResourceConfig { + + /** + * Register JAX-RS application components. + */ + public EvcJaxRsApplication() { + packages("com.cablelabs.vcpe.cos.cosmgr"); + register(CORSResponseFilter.class); + } +} \ No newline at end of file diff --git a/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcService.java b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcService.java new file mode 100644 index 0000000..a9943fd --- /dev/null +++ b/evc/evcmgr/src/main/java/com/cablelabs/vcpe/evc/evcmgr/EvcService.java @@ -0,0 +1,286 @@ +package com.cablelabs.vcpe.evc.evcmgr; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.cos.cosbase.client.CoSClient; +import com.cablelabs.vcpe.uni.unibase.client.EvcPathClient; +import com.cablelabs.vcpe.uni.unibase.model.EvcPath; +import com.cablelabs.vcpe.uni.unibase.model.Uni; +import com.cablelabs.vcpe.uni.unibase.client.UniClient; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; +import com.cablelabs.vcpe.evc.evcbase.repository.EvcRespositoryInMem; + +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 "evc" path) + */ + +//public class EvcService implements EvcServiceJAXRS { + +@Path("evc") +public class EvcService { + + // for proof of concept, evc ID will be unique via this counter. For projecution of course + // that does not scale, and does not survive restart, and another method will be needed + static private long evcIdCounter = 1; + static private long uniIdCounter = 1; + + + @POST + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response create(Evc evc) throws Exception + //-------------------------------------------------------- + { + if ( evc == null || + evc.getUniMacList() == null || + evc.getUniIdList() == null || + evc.getUniMacList().size() != 2 || + evc.getUniIdList().size() != 2 || + evc.getUniIpList().size() != 2 ) + { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + + Dbg.p("\nADDING [" + evc.getId() + "] to evc repo"); + + // Need to get cos params based on incoming cos ID + CoSClient cosClient = new CoSClient(); + CoS cos = cosClient.get(evc.getCosId()); + if (cos == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + // set the evc Perf properties according to CoS + evc.setAllPerfProps( cos.getFrameDelay(), + cos.getFrameLoss(), + cos.getAvailbility()); + + Dbg.p("... EVC SVC: retrieved following cos info"); + cos.dump(1); + + // We need a unique EVC ID, using internal counter for the prototype + evc.setId("evc-"+ evcIdCounter++); + + // + // Create the two unis in ODL + // + + Uni.SvcSpeed svcSpeed = Uni.cirToSvcSpeed( cos.getCommitedInfoRate()); + Uni.PhysMedium physMedium = Uni.svcSpeedToPhysMedium(svcSpeed ); // just for demo + // for production need to pull from host + Uni uni1 = new Uni(); + uni1.setAllProps("uni-" + uniIdCounter++, + svcSpeed, + evc.getUniIpList().get(0), + evc.getUniMacList().get(0), + physMedium, + Uni.MacLayer.IEEE_802_3, + Uni.SyncMode.ENABLED, + Uni.Type.UNITYPE, + 1600); + + Uni uni2 = new Uni(); + uni2.setAllProps("uni-" + uniIdCounter++, + svcSpeed, + evc.getUniIpList().get(1), + evc.getUniMacList().get(1), + physMedium, + Uni.MacLayer.IEEE_802_3, + Uni.SyncMode.ENABLED, + Uni.Type.UNITYPE, + 1600); + + // RESTCONF expecting PUT on create, so do an update instead of create + UniClient uniClient = new UniClient(); + uniClient.update(uni1); + uniClient.update(uni2); + + // Give ODL a chance to finish creating the UNIs before moving on + // NOTE: Should be fixed on ODL side eventually via synchronized message handling + try{ + Thread.sleep(1000); + } catch(InterruptedException ex) + {Thread.currentThread().interrupt(); + } + + // + // Create the evc path in ODL + // + + EvcPath evcPath = new EvcPath( evc.getId(), uni1, uni2, + svcSpeed, svcSpeed, cos.getId()); + EvcPathClient evcPathClient = new EvcPathClient(); + evcPathClient.update(evcPath); + + // + // Finish up with the evc + // + + // Set our UNI IDs for the EVC here + // eventually they will be generated and returned by ODL + evc.getUniIdList().set(0,uni1.getId()); + evc.getUniIdList().set(1,uni2.getId()); + + EvcRespositoryInMem.INSTANCE.add(evc); + EvcRespositoryInMem.INSTANCE.dump(0); + return Response.ok().entity(evc).build(); + } + + @PUT + @Path("{evcId}") + @Consumes(MediaType.APPLICATION_JSON) + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response update(Evc evc) + //-------------------------------------------------------- + { + Dbg.p("\nUPDATING [" + evc.getId()+"]"); + + // Need to get cos params based on incoming cos ID + CoSClient cosClient = new CoSClient(); + CoS cos = cosClient.get(evc.getCosId()); + if (cos == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + + evc.setOneWayFrameDelay(cos.getFrameDelay()); + evc.setOneWayFrameLossRatio(cos.getFrameLoss()); + evc.setOneWayAvailability(cos.getAvailbility()); + + EvcRespositoryInMem.INSTANCE.update(evc); + EvcRespositoryInMem.INSTANCE.dump(0); + return Response.ok().entity(evc).build(); + } + + @GET + @Path("{evcId}") + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response get( @PathParam("evcId") String evcId ) + //-------------------------------------------------------- + { + if ( evcId == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + Dbg.p("\nRETRIEVING ["+evcId+"]"); + Evc evc = EvcRespositoryInMem.INSTANCE.get(evcId); + if (evc == null) { + return Response.status(Response.Status.NOT_FOUND).build(); + } + evc.dump(1); + return Response.ok().entity(evc).build(); + } + + @GET + @Path("list") + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Response evcList() + //-------------------------------------------------------- + + // get a list of all Evc objects + { + Dbg.p("\nEVC GET ALL:"); + List evcList = EvcRespositoryInMem.INSTANCE.getAll(); + if (evcList == null ) + { + return Response.status(Response.Status.NOT_FOUND).build(); + } + return Response.ok().entity(new GenericEntity>(evcList) {}).build(); + } + + @DELETE + @Path("{evcId}") + //-------------------------------------------------------- + public Response delete(@PathParam("evcId") String evcId) + throws Exception + //-------------------------------------------------------- + { + if ( evcId == null) { + return Response.status(Response.Status.BAD_REQUEST).build(); + } + Dbg.p("\nDELETE:" + evcId); + + Evc evcToDel = EvcRespositoryInMem.INSTANCE.get(evcId); + List uniIdList = evcToDel.getUniIdList(); + + // Delete EvcPath first (unis can exists independent of EVC, but not vica-versa) + EvcPathClient evcPathClient = new EvcPathClient(); + evcPathClient.delete(evcToDel.getId()); + + // Give ODL a chance to finish deleting the evc Path + // NOTE: Should be fixed on ODL side eventually via synchronized message handling + try{ + Thread.sleep(1000); + } catch(InterruptedException ex) + {Thread.currentThread().interrupt(); + } + + // Delete the UNI's in ODL + UniClient uniClient = new UniClient(); + if ( uniIdList != null && uniIdList.size() > 0 ) + uniClient.delete(uniIdList.get(0)); + if ( uniIdList != null && uniIdList.size() > 1 ) + uniClient.delete(uniIdList.get(1)); + + // OK, now we can delete the EVC itself + EvcRespositoryInMem.INSTANCE.delete(evcId); + EvcRespositoryInMem.INSTANCE.dump(0); + return Response.ok().build(); + } + + @GET + @Produces(MediaType.APPLICATION_JSON) + //-------------------------------------------------------- + public Evc testGet() + //-------------------------------------------------------- + // simple get to check out json format + { + List uniList = new ArrayList(); + uniList.add("UNI-1"); + uniList.add("UNI-2"); + + List uniMacList = new ArrayList(); + uniMacList.add("11:00:11:11:11:11"); + uniMacList.add("11:00:22:22:22:22"); + + List uniIpList = new ArrayList(); + uniIpList.add("192.168.1.1"); + uniIpList.add("192.168.1.2"); + + + Evc evc = new Evc(); + evc.setAllNonPerfProps("Eve", // id + Evc.EvcType.POINT_TO_POINT, // evcType + 2, // maxUnis + uniList, uniMacList, uniIpList, + Evc.FrameDelivery.UNCONDITIONAL, // unicastFrameDelivery + Evc.FrameDelivery.UNCONDITIONAL, // multicastFrameDelivery + Evc.FrameDelivery.UNCONDITIONAL, // broadcastFrameDelivery + true, // ceVLanIdPreservation + true, // ceVlanCosPreservation + 1600, // evcMaxSvcFrameSize + "gold"); // cosId + return evc; + } + + @GET + @Produces(MediaType.TEXT_PLAIN) + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // simple ping to check connectivity + + { + Dbg.p("In Evc Service: ping test"); + return "... pingEvc reponse"; + } +} diff --git a/evc/evcmgr/src/main/webapp/WEB-INF/web.xml b/evc/evcmgr/src/main/webapp/WEB-INF/web.xml new file mode 100644 index 0000000..dfb5cd5 --- /dev/null +++ b/evc/evcmgr/src/main/webapp/WEB-INF/web.xml @@ -0,0 +1,22 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.evc + + + javax.ws.rs.Application + com.cablelabs.vcpe.evc.evcmgr.EvcJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + diff --git a/evc/evcmgr/src/main/webapp/index.jsp b/evc/evcmgr/src/main/webapp/index.jsp new file mode 100644 index 0000000..a064b45 --- /dev/null +++ b/evc/evcmgr/src/main/webapp/index.jsp @@ -0,0 +1,8 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class new file mode 100644 index 0000000..380cd0d Binary files /dev/null and b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class differ diff --git a/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class new file mode 100644 index 0000000..165390a Binary files /dev/null and b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class differ diff --git a/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class new file mode 100644 index 0000000..9b07071 Binary files /dev/null and b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class differ diff --git a/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class new file mode 100644 index 0000000..0d77695 Binary files /dev/null and b/evc/evcmgr/target/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class differ diff --git a/evc/evcmgr/target/evcmgr.war b/evc/evcmgr/target/evcmgr.war new file mode 100644 index 0000000..5afd5ec Binary files /dev/null and b/evc/evcmgr/target/evcmgr.war differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class new file mode 100644 index 0000000..380cd0d Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/CORSResponseFilter.class differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class new file mode 100644 index 0000000..165390a Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcJaxRsApplication.class differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class new file mode 100644 index 0000000..9b07071 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService$1.class differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class new file mode 100644 index 0000000..0d77695 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/classes/com/cablelabs/vcpe/evc/evcmgr/EvcService.class differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar new file mode 100644 index 0000000..9c1f40d Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar new file mode 100644 index 0000000..7d6963b Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..267b07a Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..d991659 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..f4f5b3a Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/guava-14.0.1.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/guava-14.0.1.jar new file mode 100644 index 0000000..3a3d925 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/guava-14.0.1.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar new file mode 100644 index 0000000..acec5bc Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar new file mode 100644 index 0000000..fb2687f Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar new file mode 100644 index 0000000..2c8df43 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar new file mode 100644 index 0000000..9ab39ff Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar new file mode 100644 index 0000000..21463e7 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar new file mode 100644 index 0000000..b7d364b Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-client-2.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-client-2.2.jar new file mode 100644 index 0000000..cab47b0 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-client-2.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-common-2.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-common-2.2.jar new file mode 100644 index 0000000..55d27ed Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-common-2.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar new file mode 100644 index 0000000..e03b5f9 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar new file mode 100644 index 0000000..786290a Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-server-2.2.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-server-2.2.jar new file mode 100644 index 0000000..37b3410 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/jersey-server-2.2.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar new file mode 100644 index 0000000..cff0ef8 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar new file mode 100644 index 0000000..832e18e Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar new file mode 100644 index 0000000..01bb838 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar new file mode 100644 index 0000000..29a1057 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar new file mode 100644 index 0000000..bd6aa17 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/unibase-1.0-SNAPSHOT.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/unibase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..46cc4d4 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/unibase-1.0-SNAPSHOT.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar b/evc/evcmgr/target/evcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar new file mode 100644 index 0000000..de85403 Binary files /dev/null and b/evc/evcmgr/target/evcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar differ diff --git a/evc/evcmgr/target/evcmgr/WEB-INF/web.xml b/evc/evcmgr/target/evcmgr/WEB-INF/web.xml new file mode 100644 index 0000000..dfb5cd5 --- /dev/null +++ b/evc/evcmgr/target/evcmgr/WEB-INF/web.xml @@ -0,0 +1,22 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.evc + + + javax.ws.rs.Application + com.cablelabs.vcpe.evc.evcmgr.EvcJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + diff --git a/evc/evcmgr/target/evcmgr/index.jsp b/evc/evcmgr/target/evcmgr/index.jsp new file mode 100644 index 0000000..a064b45 --- /dev/null +++ b/evc/evcmgr/target/evcmgr/index.jsp @@ -0,0 +1,8 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/evc/evcmgr/target/maven-archiver/pom.properties b/evc/evcmgr/target/maven-archiver/pom.properties new file mode 100644 index 0000000..26a731f --- /dev/null +++ b/evc/evcmgr/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:19 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=evcmgr diff --git a/evc/pom.xml b/evc/pom.xml new file mode 100644 index 0000000..0f73c1e --- /dev/null +++ b/evc/pom.xml @@ -0,0 +1,24 @@ + + + + com.cablelabs.vcpe + vcpe-services + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + evc + pom + 1.0-SNAPSHOT + + + evcbase + evcmgr + + + + + diff --git a/model/MEF-Classes.png b/model/MEF-Classes.png new file mode 100644 index 0000000..2e726c8 Binary files /dev/null and b/model/MEF-Classes.png differ diff --git a/model/MEF-Ref-Diagrams.png b/model/MEF-Ref-Diagrams.png new file mode 100644 index 0000000..8e278cc Binary files /dev/null and b/model/MEF-Ref-Diagrams.png differ diff --git a/model/README.md b/model/README.md new file mode 100644 index 0000000..1e4596f --- /dev/null +++ b/model/README.md @@ -0,0 +1,14 @@ +1. Download and install the modeling edition of eclipse + - https://eclipse.org/downloads/packages/eclipse-modeling-tools/lunasr2 +2. Upon first starting eclipse, goto the help menu, and select “Install Modeling Components”, check Papyrus and hit “Finish” + - Papyrus will download and install, and restart eclipse +3. After the Papyrus download, goto the help Menu and select “Install Papyrus Additional Components”, and select “”Diagram Generation” and “Papyrus Layers” and hit Finish + - These plugins will be installed, then restart eclipse +4. After these components are installed, create a Papyrus perspective by clicking on the “+” sigh in the perspective bar near the upper right (there will already be a Java Perspective created”) + - Select “Papyrus” and hit “OK” +5. Assuming that your eclipse working is ~/workspace: + - make a copy of the the folder “cl-mef-uml”, and (it contents) from the attached zip file in ~/workspace (so that you end up with a ~/workspace/cl-mef_uml” directory” +6. Activate the Papyrus perspective in eclipse, and goto the menu “File/New/Papyrus Project” + - give the new project the name “cl-mef-uml” and the files that you placed into your workspace directory will automatically be imported into the new project. +7. In the “Model” pane on the left, expand the “>Model” tree to see all of the the model components + - To view the detailed UML class digram click on “Diagram Data Model - Foundational Components” and the UML diagrams will become visible in the main pane. diff --git a/model/cl-mef-uml/.project b/model/cl-mef-uml/.project new file mode 100644 index 0000000..cd4477b --- /dev/null +++ b/model/cl-mef-uml/.project @@ -0,0 +1,11 @@ + + + cl-mef-uml + + + + + + + + diff --git a/model/cl-mef-uml/model.di b/model/cl-mef-uml/model.di new file mode 100644 index 0000000..bf9abab --- /dev/null +++ b/model/cl-mef-uml/model.di @@ -0,0 +1,2 @@ + + diff --git a/model/cl-mef-uml/model.notation b/model/cl-mef-uml/model.notation new file mode 100644 index 0000000..e79af4b --- /dev/null +++ b/model/cl-mef-uml/model.notation @@ -0,0 +1,1501 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/model/cl-mef-uml/model.uml b/model/cl-mef-uml/model.uml new file mode 100644 index 0000000..8477c40 --- /dev/null +++ b/model/cl-mef-uml/model.uml @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/pom.xml b/pom.xml new file mode 100644 index 0000000..c916a54 --- /dev/null +++ b/pom.xml @@ -0,0 +1,94 @@ + + + 4.0.0 + + com.cablelabs.vcpe + vcpe-services + pom + 1.0-SNAPSHOT + + + common + cos + uni + evc + svc + + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + 2.5.1 + true + + 1.7 + 1.7 + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.18.1 + + methods + 10 + + **/*IntegrationTest* + + true + + + + + + + + + + + org.glassfish.jersey + jersey-bom + ${jersey.version} + pom + import + + + + + + + + com.cablelabs.vcpe + common + 1.0-SNAPSHOT + + + org.glassfish.jersey.containers + jersey-container-servlet-core + + + org.glassfish.jersey.media + jersey-media-moxy + + + junit + junit + 4.12 + test + + + + + + + 2.2 + UTF-8 + + + + diff --git a/svc/pom.xml b/svc/pom.xml new file mode 100644 index 0000000..6e8f4de --- /dev/null +++ b/svc/pom.xml @@ -0,0 +1,30 @@ + + + + com.cablelabs.vcpe + vcpe-services + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + svc + pom + 1.0-SNAPSHOT + + + svcbase + svcmgr + + + + + com.cablelabs.vcpe + cosbase + 1.0-SNAPSHOT + + + + diff --git a/svc/svcbase/pom.xml b/svc/svcbase/pom.xml new file mode 100644 index 0000000..40982d6 --- /dev/null +++ b/svc/svcbase/pom.xml @@ -0,0 +1,29 @@ + + + + com.cablelabs.vcpe + svc + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + svcbase + jar + 1.0-SNAPSHOT + + + svcbase + + + + + com.cablelabs.vcpe + evcbase + 1.0-SNAPSHOT + + + + diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java new file mode 100644 index 0000000..9bc7368 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/client/EplClient.java @@ -0,0 +1,149 @@ +package com.cablelabs.vcpe.svc.svcbase.client; + +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; + +/** + * Created by steve on 6/8/15. + */ +public class EplClient { + + private Client client; // provided by Jersey + + public EplClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public Epl create(Epl epl) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl") + .request(MediaType.APPLICATION_JSON) + .post(Entity.entity(epl, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public Epl update(Epl epl) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl/"+ epl.getId()) + .request(MediaType.APPLICATION_JSON) + .put(Entity.entity(epl, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public Epl get(String eplId) + //-------------------------------------------------------- + // get Epl of specified ID + + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc"); + + Response response = target.path("epl/"+eplId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + // get a list of all Epl instances + { + + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + // Can I do this with a Response, so that I can check for errors + List response = target.path("epl/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public void delete(String eplId) + //-------------------------------------------------------- + // delete Epl of specified ID + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + Response response = target.path("epl/"+eplId).request(MediaType.APPLICATION_JSON).delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + //-------------------------------------------------------- + public Epl testGet() + //-------------------------------------------------------- + // test marshaling of Epl class from server json + + { + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + Response response = target.path("epl").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Epl.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/svcmgr/webapi/svc/"); + + Response response = target.path("epl").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + return response.readEntity(String.class); + } +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java new file mode 100644 index 0000000..254fb11 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/model/Epl.java @@ -0,0 +1,104 @@ +package com.cablelabs.vcpe.svc.svcbase.model; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.evc.evcbase.model.Evc; +import com.cablelabs.vcpe.evc.evcbase.client.EvcClient; + +import javax.xml.bind.annotation.XmlRootElement; +import java.util.List; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class Epl +{ + private String id; + private long numCustLocations; + private List custAddressList = null; + private List uniHostMacList = null; + private List uniHostIpList = null; + private String cos; + private String evcId; + + // zero argument constructor required for JAX-RS + public Epl() { + id = "unset"; + this.numCustLocations = -1; + this.custAddressList = null; + this.uniHostMacList = null; + this.uniHostIpList = null; + this.cos = "unset"; + this.evcId = "unset"; + } + + public void setAllProps (String id, long numCustLocations, + List custAddressList, + List uniHostMacList, List uniHostIpList, String cos, String evcId) { + this.id = id; + this.numCustLocations = numCustLocations; + this.custAddressList = custAddressList; + this.uniHostMacList = uniHostMacList; + this.uniHostIpList = uniHostIpList; + this.cos = cos; + this.evcId = evcId; + } + + public void dump() { dump(0); } + public void dump(int tab) { + + Dbg.p(tab, "id: " + this.id); + Dbg.p(tab, "numCustLocations: " + this.numCustLocations); + Dbg.p(tab, "Address List:"); + for (String addr : custAddressList) + Dbg.p(tab+1, addr); + Dbg.p(tab, "UNI Mac List:"); + for (String mac : uniHostMacList) + Dbg.p(tab+1, mac); + Dbg.p(tab, "UNI IP List:"); + for (String ip : uniHostIpList) + Dbg.p(tab+1, ip); + Dbg.p(tab, "cos: " + this.cos); + Dbg.p(tab, "Evc:" + this.evcId); +// if ( this.evcId != "unset") { // hacky +// EvcClient evcClient = new EvcClient(); +// Evc evc = evcClient.get(this.evcId); +// evc.dump(tab + 2); +// } + } + + public static void dumpList(List eplList) { dumpList(0, eplList); } + public static void dumpList(int tab, List eplList) { + int numSvc = 0; + Dbg.p("----- Epl List : [" + eplList.size() + "] elements"); + for (Epl curEpl : eplList) { + numSvc++; + Dbg.p(tab+1, ""); + curEpl.dump(tab+2); + } + } + + // Getters & Setters + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public long getNumCustLocations() { return numCustLocations; } + public void setNumCustLocations(long numCustLocations) { this.numCustLocations = numCustLocations; } + + public List getCustAddressList() { return custAddressList; } + public void setCustAddressList(List custAddressList) { this.custAddressList = custAddressList; } + + public List getUniHostMacList() { return uniHostMacList; } + public void setUniHostMacList(List uniHostMacList) { this.uniHostMacList = uniHostMacList; } + + + public List getUniHostIpList() { return uniHostIpList; } + public void setUniHostIpList(List uniHostIpList) { this.uniHostIpList = uniHostIpList; } + + public String getCos() { return cos; } + public void setCos(String cos) { this.cos = cos; } + + public String getEvcId() { return evcId; } + public void setEvcId(String evcId) { this.evcId = evcId; } +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java new file mode 100644 index 0000000..1142963 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.java @@ -0,0 +1,21 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import java.util.List; + +/** + * Created by steve on 5/25/15. + */ +public interface EplRespository +{ + // TODO add exceptions + + Epl add(Epl epl); // returns null if already exists, otherwise returns stored epl + Epl get(String svcId); // returns null if not found, otherwise stored svc + Epl update(Epl epl); // returns null if did not exit, otherwise epl as it was previous to update (put in any case) + Epl delete(String svcId); // returns null if not found, otherwise svc as it was previous to delete + int count(); // number of Epl stored in the repo + public void dump(int tab); // print out contents of the repo + List getAll(); +} diff --git a/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java new file mode 100644 index 0000000..af82c21 --- /dev/null +++ b/svc/svcbase/src/main/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.java @@ -0,0 +1,91 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by steve on 5/24/15. + */ + + +/* + Singleton that contains a hashmap which holds instances of Epl objects, indexed by CiS ID + */ + +public enum EplRespositoryInMem implements EplRespository { + INSTANCE; // Singleton + + private Map svcDB = new ConcurrentHashMap<>(); + + @Override + //-------------------------------------------------------- + public Epl add(Epl epl) + //-------------------------------------------------------- + { + if ( this.get(epl.getId()) != null ) { + return null; + } + svcDB.put(epl.getId(), epl); + return epl; + } + + @Override + //-------------------------------------------------------- + public Epl get(String svcId) { + return svcDB.get(svcId); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public Epl update(Epl epl) + //-------------------------------------------------------- + { + // put returns null if epl did not exist, other returns epl as it stood prior to put + return svcDB.put(epl.getId(), epl); + } + + @Override + //-------------------------------------------------------- + public Epl delete(String svcId) + //-------------------------------------------------------- + { + // remove returns null if svc did not exist, other returns svc as it stood prior to remove + return svcDB.remove(svcId); + } + + @Override + //-------------------------------------------------------- + public int count() { + return svcDB.size(); + } + //-------------------------------------------------------- + + @Override + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + { + List eplList = new ArrayList(svcDB.values()); + return eplList; + } + + @Override + //-------------------------------------------------------- + public void dump(int tab) + //-------------------------------------------------------- + { + Dbg.p(tab, "Epl Repo: " + svcDB.size() + " entrie(s)"); + int numSvc = 0; + for (Epl curEpl : svcDB.values()) { + numSvc++; + Dbg.p(tab+1, ""); + curEpl.dump(tab+2); + } + } +} diff --git a/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java new file mode 100644 index 0000000..f8950f9 --- /dev/null +++ b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.java @@ -0,0 +1,150 @@ +package com.cablelabs.vcpe.svc.svcbase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.cos.cosbase.client.CoSClient; +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import org.junit.Test; +import static org.junit.Assert.*; + +import java.util.ArrayList; +import java.util.List; + + +/** + * Created by steve on 6/8/15. + */ +public class EplClientTest { + + @Test + public void testAll() throws Exception { + + // First, create a couple of CoS's to reference + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + CoSClient coSClient = new CoSClient(); + + gold = coSClient.create(gold); + assertNotNull(gold); + silver = coSClient.create(silver); + assertNotNull(silver); + bronze = coSClient.create(bronze); + assertNotNull(bronze); + + List locList1 = new ArrayList(); + locList1.add("1 MEF Dr, Honolulu HI, USA"); + locList1.add("1 MEF Dr, Boston MA, MAS"); + List uniList1 = new ArrayList(); + uniList1.add("11:AA:00:00:00:00"); + uniList1.add("11:BB:00:00:00:00"); + List ipList1 = new ArrayList(); + ipList1.add("192.168.1.1"); + ipList1.add("192.168.1.2"); + + List locList2 = new ArrayList(); + locList2.add("22 MEF Dr, Honolulu HI, USA"); + locList2.add("22 MEF Dr, Boston MA, MAS"); + List uniList2 = new ArrayList(); + uniList2.add("22:AA:00:00:00:00"); + uniList2.add("22:BB:00:00:00:00"); + List ipList2 = new ArrayList(); + ipList2.add("192.168.2.1"); + ipList2.add("192.168.2.2"); + + List locList3 = new ArrayList(); + locList3.add("33 MEF Dr, Honolulu HI, USA"); + locList3.add("33 MEF Dr, Boston MA, MAS"); + List uniList3 = new ArrayList(); + uniList3.add("33:AA:00:00:00:00"); + uniList3.add("33:BB:00:00:00:00"); + List ipList3 = new ArrayList(); + ipList3.add("192.168.3.1"); + ipList3.add("192.168.3.2"); + + Epl epl_1 = new Epl(); + epl_1.setAllProps("epl-1", 2, locList1, uniList1, ipList1, gold.getId(), "unset"); + + EplClient eplClient = new EplClient(); + Dbg.p(epl_1.getId()+" being created via eplmgr"); + epl_1.dump(1); + + + // need to capture returned EPL in case it was modified by svc layer during creation + epl_1 = eplClient.create(epl_1); + assertNotNull(epl_1); + + Epl retrievedEpl = eplClient.get(epl_1.getId()); + assertNotNull(retrievedEpl); + Dbg.p("epl just retrieved from Epl Service"); + retrievedEpl.dump(1); + retrievedEpl = null; + + epl_1.setCos(bronze.getId()); + Dbg.p("EPL["+ epl_1.getId()+ "] : about to be updated"); + epl_1.dump(1); + assertNotNull(eplClient.update(epl_1)); + retrievedEpl = eplClient.get(epl_1.getId()); + assertNotNull(retrievedEpl); + Dbg.p("EPL["+ epl_1.getId()+ "] : retrieved after the update"); + retrievedEpl.dump(1); + + Epl epl_2 = new Epl(); + epl_2.setAllProps("epl-2", 2, locList2, uniList2, ipList2, silver.getId(), "unset"); + + Epl epl_3 = new Epl(); + epl_3.setAllProps("epl-3", 2, locList3, uniList3, ipList3, bronze.getId(), "unset"); + + // need to capture returned EPL in case it was modified by svc layer during creation + epl_2 = eplClient.create(epl_2); + assertNotNull(epl_2); + epl_3 = eplClient.create(epl_3); + assertNotNull(epl_3); + + List eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(), 3); + + Epl.dumpList(eplList); + + eplClient.delete(epl_3.getId()); + eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(),2); + Epl.dumpList(eplList); + + eplClient.delete(epl_2.getId()); + eplList = eplClient.getAll(); + Epl.dumpList(eplList); + assertNotNull(eplList); + assertEquals(eplList.size(),1); + Epl.dumpList(eplList); + + eplClient.delete(epl_1.getId()); + eplList = eplClient.getAll(); + assertNotNull(eplList); + assertEquals(eplList.size(),0); + Epl.dumpList(eplList); + } + + @Test + public void testTestGet() throws Exception { + EplClient eplClient = new EplClient(); + Epl epl = eplClient.testGet(); + epl.dump();; + } + + @Test + public void testPing() throws Exception { + + EplClient eplClient = new EplClient(); + String resp = eplClient.ping(); + Dbg.p(resp); + } +} diff --git a/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java new file mode 100644 index 0000000..ff8c892 --- /dev/null +++ b/svc/svcbase/src/test/java/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.java @@ -0,0 +1,126 @@ +package com.cablelabs.vcpe.svc.svcbase.repository; + +import com.cablelabs.vcpe.cos.cosbase.model.CoS; +import com.cablelabs.vcpe.svc.svcbase.model.Epl; + +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.*; + +/** + * Created by steve on 5/25/15. + */ +public class EplRepositoryTest +{ + + @Test + public void test() { + + // First, create a couple of CoS's to reference + CoS gold = new CoS(); + CoS silver = new CoS(); + CoS bronze = new CoS(); + + // id CIR/MBS avail delay jitter frameloss + gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + silver.setAllProps("silver", 50, 0.95, 27.43, 2.43, 0.02); + bronze.setAllProps("bronze", 25, 0.90, 37.43, 2.43, 0.03); + + // lets add these to the + + List locList1 = new ArrayList(); + locList1.add("1111 MEF Dr, Honolulu HI, USA"); + locList1.add("2222 MEF Dr, Honolulu HI, USA"); + List uniList1 = new ArrayList(); + uniList1.add("11:11:11:11:11:11"); + uniList1.add("22:22:22:22:22:22"); + List ipList1 = new ArrayList(); + ipList1.add("192.168.1.1"); + ipList1.add("192.168.1.2"); + + + List locList2 = new ArrayList(); + locList2.add("1111 MEF Dr, Honolulu HI, USA"); + locList2.add("2222 MEF Dr, Boston MA, MAS"); + List uniList2 = new ArrayList(); + uniList2.add("11:11:11:11:11:11"); + uniList2.add("22:22:22:22:22:22"); + List ipList2 = new ArrayList(); + ipList2.add("192.168.2.1"); + ipList2.add("192.168.2.2"); + + List locList3 = new ArrayList(); + locList3.add("1111 MEF Dr, Honolulu HI, USA"); + locList3.add("2222 MEF Dr, Boston MA, MAS"); + locList3.add("3333 MEF Dr, Boulder CO, USA"); + List uniList3 = new ArrayList(); + uniList3.add("11:11:11:11:11:11"); + uniList3.add("22:22:22:22:22:22"); + List ipList3 = new ArrayList(); + ipList3.add("192.168.3.1"); + ipList3.add("192.168.3.2"); + + List locList4 = new ArrayList(); + locList4.add("1111 MEF Dr, Honolulu HI, USA"); + locList4.add("2222 MEF Dr, Boston MA, MAS"); + locList4.add("3333 MEF Dr, Boulder CO, USA"); + locList4.add("4444 MEF Dr, Los Angeles, CA, USA"); + List uniList4 = new ArrayList(); + uniList4.add("11:11:11:11:11:11"); + uniList4.add("22:22:22:22:22:22"); + uniList4.add("33:33:33:33:33:33"); + uniList4.add("44:44:44:44:44:44"); + List ipList4 = new ArrayList(); + ipList4.add("192.168.4.1"); + ipList4.add("192.168.4.2"); + + + + Epl epl_1 = new Epl(); + Epl epl_2 = new Epl(); + Epl epl_3 = new Epl(); + Epl epl_4 = new Epl(); + + epl_1.setAllProps("epl-1", 1, locList1, uniList1, ipList1, gold.getId(), "unset"); + epl_2.setAllProps("epl-2", 2, locList2, uniList2, ipList2, silver.getId(), "unset"); + epl_3.setAllProps("epl-3", 3, locList3, uniList3, ipList3, bronze.getId(), "unset"); + epl_4.setAllProps("epl-4", 4, locList4, uniList4, ipList4, gold.getId(), "unset"); + + EplRespository repo = EplRespositoryInMem.INSTANCE; + + assertNotNull(repo.add(epl_1)); + assertNotNull(repo.add(epl_2)); + assertNotNull(repo.add(epl_3)); + assertNull(repo.add(epl_3)); // duplicate + assertEquals(repo.count(), 3); + + assertNotNull(repo.get(epl_1.getId())); + assertNotNull(repo.get(epl_2.getId())); + assertNotNull(repo.get(epl_3.getId())); + + assertNotNull(repo.delete(epl_2.getId())); + assertNull(repo.delete(epl_2.getId())); + assertNull(repo.delete("not-in-repo")); + assertEquals(repo.count(), 2); + + assertEquals(repo.get(epl_1.getId()).getNumCustLocations(), 1); + assertNotEquals(repo.get(epl_3.getId()).getNumCustLocations(), 1); + + + assertNull(repo.update(epl_4)); // update non-existent cos + assertEquals(repo.count(), 3); + assertEquals(repo.get("epl-4").getCos(), gold.getId()); + + epl_4.setCos(silver.getId()); + assertNotNull(repo.update(epl_4)); // update existing svc, same object + assertEquals(repo.get(epl_4.getId()).getCos(), silver.getId()); + + Epl epl_4_2 = new Epl(); + epl_4_2.setAllProps("epl-4", 4, locList4, uniList4, ipList4, bronze.getId(), "unset"); + assertNotNull(repo.update(epl_4_2)); // update svc, new object + assertEquals(repo.get(epl_4_2.getId()).getNumCustLocations(), 4); + } +} diff --git a/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient$1.class b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient$1.class new file mode 100644 index 0000000..bee6861 Binary files /dev/null and b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient$1.class differ diff --git a/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient.class b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient.class new file mode 100644 index 0000000..04b7db4 Binary files /dev/null and b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/client/EplClient.class differ diff --git a/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/model/Epl.class b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/model/Epl.class new file mode 100644 index 0000000..853209c Binary files /dev/null and b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/model/Epl.class differ diff --git a/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.class b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.class new file mode 100644 index 0000000..8d0d203 Binary files /dev/null and b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespository.class differ diff --git a/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.class b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.class new file mode 100644 index 0000000..bd2e9ef Binary files /dev/null and b/svc/svcbase/target/classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRespositoryInMem.class differ diff --git a/svc/svcbase/target/maven-archiver/pom.properties b/svc/svcbase/target/maven-archiver/pom.properties new file mode 100644 index 0000000..e6fee0f --- /dev/null +++ b/svc/svcbase/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:20 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=svcbase diff --git a/svc/svcbase/target/svcbase.jar b/svc/svcbase/target/svcbase.jar new file mode 100644 index 0000000..d3ef79a Binary files /dev/null and b/svc/svcbase/target/svcbase.jar differ diff --git a/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.class b/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.class new file mode 100644 index 0000000..e0df6f5 Binary files /dev/null and b/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/client/EplClientTest.class differ diff --git a/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.class b/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.class new file mode 100644 index 0000000..74b4913 Binary files /dev/null and b/svc/svcbase/target/test-classes/com/cablelabs/vcpe/svc/svcbase/repository/EplRepositoryTest.class differ diff --git a/svc/svcmgr/pom.xml b/svc/svcmgr/pom.xml new file mode 100644 index 0000000..2751749 --- /dev/null +++ b/svc/svcmgr/pom.xml @@ -0,0 +1,33 @@ + + + + com.cablelabs.vcpe + svc + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + svcmgr + war + 1.0-SNAPSHOT + + + svcmgr + + + + + com.cablelabs.vcpe + svcbase + 1.0-SNAPSHOT + + + com.cablelabs.vcpe + evcbase + 1.0-SNAPSHOT + + + 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 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 uniIdList = new ArrayList(); + uniIdList.add("unset"); + uniIdList.add("unset"); + + // Transfer EPLs mac list to EVC + List uniMacList = new ArrayList(); + 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 uniIpList = new ArrayList(); + 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>(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 locList = new ArrayList(); + locList.add("1111 MEF Dr, Honolulu HI, USA"); + locList.add("2222 MEF Dr, Boston MA, MAS"); + + List uniList = new ArrayList(); + uniList.add("00:0a:95:9d:68:16"); + uniList.add("00:A0:C9:14:C8:29"); + + List ipList = new ArrayList(); + 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 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.svc + + + javax.ws.rs.Application + com.cablelabs.vcpe.svc.svcmgr.SvcJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + 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 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class new file mode 100644 index 0000000..343c9df Binary files /dev/null and b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class differ diff --git a/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class new file mode 100644 index 0000000..957dcbb Binary files /dev/null and b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class differ diff --git a/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class new file mode 100644 index 0000000..1ca9218 Binary files /dev/null and b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class differ diff --git a/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class new file mode 100644 index 0000000..c8b5d87 Binary files /dev/null and b/svc/svcmgr/target/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class differ diff --git a/svc/svcmgr/target/maven-archiver/pom.properties b/svc/svcmgr/target/maven-archiver/pom.properties new file mode 100644 index 0000000..858608e --- /dev/null +++ b/svc/svcmgr/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:20 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=svcmgr diff --git a/svc/svcmgr/target/svcmgr.war b/svc/svcmgr/target/svcmgr.war new file mode 100644 index 0000000..507df06 Binary files /dev/null and b/svc/svcmgr/target/svcmgr.war differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class new file mode 100644 index 0000000..343c9df Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/CORSResponseFilter.class differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class new file mode 100644 index 0000000..957dcbb Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService$1.class differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class new file mode 100644 index 0000000..1ca9218 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/EplService.class differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class new file mode 100644 index 0000000..c8b5d87 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/classes/com/cablelabs/vcpe/svc/svcmgr/SvcJaxRsApplication.class differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar new file mode 100644 index 0000000..9c1f40d Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/asm-all-repackaged-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar new file mode 100644 index 0000000..7d6963b Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/cglib-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..267b07a Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/common-1.0-SNAPSHOT.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..d991659 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/cosbase-1.0-SNAPSHOT.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..f4f5b3a Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/evcbase-1.0-SNAPSHOT.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/guava-14.0.1.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/guava-14.0.1.jar new file mode 100644 index 0000000..3a3d925 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/guava-14.0.1.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar new file mode 100644 index 0000000..acec5bc Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-api-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar new file mode 100644 index 0000000..fb2687f Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-locator-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar new file mode 100644 index 0000000..2c8df43 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/hk2-utils-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar new file mode 100644 index 0000000..9ab39ff Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.annotation-api-1.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar new file mode 100644 index 0000000..21463e7 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.inject-2.2.0-b14.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar new file mode 100644 index 0000000..b7d364b Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/javax.ws.rs-api-2.0.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-client-2.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-client-2.2.jar new file mode 100644 index 0000000..cab47b0 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-client-2.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-common-2.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-common-2.2.jar new file mode 100644 index 0000000..55d27ed Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-common-2.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar new file mode 100644 index 0000000..e03b5f9 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-container-servlet-core-2.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar new file mode 100644 index 0000000..786290a Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-media-moxy-2.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-server-2.2.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-server-2.2.jar new file mode 100644 index 0000000..37b3410 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/jersey-server-2.2.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar new file mode 100644 index 0000000..cff0ef8 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.antlr-2.5.0.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar new file mode 100644 index 0000000..832e18e Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.asm-2.5.0.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar new file mode 100644 index 0000000..01bb838 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.core-2.5.0.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar new file mode 100644 index 0000000..29a1057 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/org.eclipse.persistence.moxy-2.5.0.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar new file mode 100644 index 0000000..bd6aa17 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/osgi-resource-locator-1.0.1.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/svcbase-1.0-SNAPSHOT.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/svcbase-1.0-SNAPSHOT.jar new file mode 100644 index 0000000..d3ef79a Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/svcbase-1.0-SNAPSHOT.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar b/svc/svcmgr/target/svcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar new file mode 100644 index 0000000..de85403 Binary files /dev/null and b/svc/svcmgr/target/svcmgr/WEB-INF/lib/validation-api-1.1.0.Final.jar differ diff --git a/svc/svcmgr/target/svcmgr/WEB-INF/web.xml b/svc/svcmgr/target/svcmgr/WEB-INF/web.xml new file mode 100644 index 0000000..06f0b7c --- /dev/null +++ b/svc/svcmgr/target/svcmgr/WEB-INF/web.xml @@ -0,0 +1,22 @@ + + + + + Jersey Web Application + org.glassfish.jersey.servlet.ServletContainer + + jersey.config.server.provider.packages + com.cablelabs.vcpe.svc + + + javax.ws.rs.Application + com.cablelabs.vcpe.svc.svcmgr.SvcJaxRsApplication + + 1 + + + Jersey Web Application + /webapi/* + + diff --git a/svc/svcmgr/target/svcmgr/index.jsp b/svc/svcmgr/target/svcmgr/index.jsp new file mode 100644 index 0000000..a064b45 --- /dev/null +++ b/svc/svcmgr/target/svcmgr/index.jsp @@ -0,0 +1,8 @@ + + +

Jersey RESTful Web Application!

+

Jersey resource +

Visit Project Jersey website + for more information on Jersey! + + diff --git a/uni/pom.xml b/uni/pom.xml new file mode 100644 index 0000000..a9d9fd2 --- /dev/null +++ b/uni/pom.xml @@ -0,0 +1,23 @@ + + + + com.cablelabs.vcpe + vcpe-services + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + uni + pom + 1.0-SNAPSHOT + + + unibase + + + + + diff --git a/uni/unibase/pom.xml b/uni/unibase/pom.xml new file mode 100644 index 0000000..839f4ad --- /dev/null +++ b/uni/unibase/pom.xml @@ -0,0 +1,23 @@ + + + + com.cablelabs.vcpe + uni + 1.0-SNAPSHOT + + + 4.0.0 + + com.cablelabs.vcpe + unibase + jar + 1.0-SNAPSHOT + + + unibase + + + + + diff --git a/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.java b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.java new file mode 100644 index 0000000..1bc41b5 --- /dev/null +++ b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.java @@ -0,0 +1,180 @@ +package com.cablelabs.vcpe.uni.unibase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.uni.unibase.model.EvcPath; +import com.cablelabs.vcpe.uni.unibase.model.Uni; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import javax.xml.bind.DatatypeConverter; +import java.util.List; + +/** + * Created by steve on 5/28/15. + */ + +public class EvcPathClient { + + private String evcMgrServer = "localhost"; + private String evcMgrPort = "8181"; + private String evcMgrCfgRESTPath = "/restconf/config/cl-vcpe-mef:evcs/"; + + private Client client; // provided by Jersey + + public EvcPathClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public Response create(EvcPath evcPath ) + //-------------------------------------------------------- + { + WebTarget target =client.target("http://"+evcMgrServer+":" + evcMgrPort + evcMgrCfgRESTPath); + + String json = evcPath.toJson(); + Dbg.p("\nEVC Create JSON:"); + Dbg.p(json); + + Response response = target.path("evc") + .request(MediaType.APPLICATION_JSON) + .post(Entity.entity(json, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + //return response.readEntity(EvcPath.class); + return response; + } + + //-------------------------------------------------------- + public Response update(EvcPath evcPath) throws Exception + //-------------------------------------------------------- + { + WebTarget target =client.target("http://"+evcMgrServer+":" + evcMgrPort + evcMgrCfgRESTPath); + + String json = evcPath.toJson(); + String unamepass = "admin:admin"; + String authorizationHeaderValue = "Basic " + DatatypeConverter.printBase64Binary(unamepass.getBytes("UTF-8")); + Dbg.p("\nEVC Create/Update JSON:"); + Dbg.p(json); + + Response response = target.path("evc/"+evcPath.getId()) + .request(MediaType.APPLICATION_JSON) + .header("Authorization", authorizationHeaderValue) + .put(Entity.entity(json, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response; + } + //-------------------------------------------------------- + public void delete(String evcPathId) throws Exception + //-------------------------------------------------------- + // delete EvcPath of specified ID + { + WebTarget target =client.target("http://"+evcMgrServer+":" + evcMgrPort + evcMgrCfgRESTPath); + + String uNameAndPass = "admin:admin"; + String authorizationHeaderValue = "Basic " + + DatatypeConverter.printBase64Binary(uNameAndPass.getBytes("UTF-8")); + + Response response = target.path("evc/" + evcPathId) + .request(MediaType.APPLICATION_JSON) + .header("Authorization", authorizationHeaderValue) + .delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + // + // Code from here below requires work in order to work with ODL + // + + //-------------------------------------------------------- + public EvcPath get(String evcPathId) + //-------------------------------------------------------- + // get EvcPath of specified ID + { + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc/"+evcPathId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + return response.readEntity(EvcPath.class); + } + + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + // get a list of all EvcPath instances + { + + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + // Can I do this with a Response, so that I can check for errors + List response = target.path("evc/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public EvcPath testGet() + //-------------------------------------------------------- + // test marshaling of EvcPath class from server json + { + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(EvcPath.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/evcmgr/webapi/"); + + Response response = target.path("evc").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + + return response.readEntity(String.class); + } +} diff --git a/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/UniClient.java b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/UniClient.java new file mode 100644 index 0000000..a1dcff4 --- /dev/null +++ b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/client/UniClient.java @@ -0,0 +1,188 @@ +package com.cablelabs.vcpe.uni.unibase.client; + +import com.cablelabs.vcpe.common.Dbg; +import com.cablelabs.vcpe.uni.unibase.model.Uni; + +import javax.ws.rs.client.Client; +import javax.ws.rs.client.ClientBuilder; +import javax.ws.rs.client.Entity; +import javax.ws.rs.client.WebTarget; +import javax.ws.rs.core.GenericType; +import javax.ws.rs.core.MediaType; +import javax.ws.rs.core.Response; +import java.util.List; +import javax.xml.bind.DatatypeConverter; + +/** + * Created by steve on 5/28/15. + */ + +public class UniClient { + + private String uniMgrServer = "localhost"; + private String uniMgrPort = "8181"; + private String uniMgrCfgRESTPath = "/restconf/config/cl-vcpe-mef:unis/"; + + private Client client; // provided by Jersey + + public UniClient() { + client = ClientBuilder.newClient(); + } + + //-------------------------------------------------------- + public Response create(Uni uni ) throws Exception + //-------------------------------------------------------- + // create Uni + { + WebTarget target =client.target("http://"+uniMgrServer+":" + uniMgrPort + uniMgrCfgRESTPath); + + String json = uni.toJson(); + Dbg.p("\nUNI Create JSON:"); + Dbg.p(json); + + String uNameAndPass = "admin:admin"; + String authorizationHeaderValue = "Basic " + + DatatypeConverter.printBase64Binary(uNameAndPass.getBytes("UTF-8")); + Response response = target.path("uni") + .request(MediaType.APPLICATION_JSON) + .header("Authorization", authorizationHeaderValue) + .post(Entity.entity(json, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + //return response.readEntity(Uni.class); + return response; + } + + //-------------------------------------------------------- + public Response update(Uni uni) throws Exception + //-------------------------------------------------------- + // create/update Uni. This seems to be how OLD expects uni creation + { + WebTarget target =client.target("http://"+uniMgrServer+":" + uniMgrPort + uniMgrCfgRESTPath); + + String json = uni.toJson(); + Dbg.p("\nUNI Create/Update JSON:"); + Dbg.p(json); + + String uNameAndPass = "admin:admin"; + String authorizationHeaderValue = "Basic " + + DatatypeConverter.printBase64Binary(uNameAndPass.getBytes("UTF-8")); + Response response = target.path("uni/"+uni.getId()) + .request(MediaType.APPLICATION_JSON) + .header("Authorization", authorizationHeaderValue) + .put(Entity.entity(json, MediaType.APPLICATION_JSON)); + + if (response.getStatus() != 200 ) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public void delete(String uniId) throws Exception + //-------------------------------------------------------- + // delete Uni of specified ID + { + WebTarget target =client.target("http://"+uniMgrServer+":" + uniMgrPort + uniMgrCfgRESTPath); + + String uNameAndPass = "admin:admin"; + String authorizationHeaderValue = "Basic " + + DatatypeConverter.printBase64Binary(uNameAndPass.getBytes("UTF-8")); + + Response response = target.path("uni/" + uniId) + .request(MediaType.APPLICATION_JSON) + .header("Authorization", authorizationHeaderValue) + .delete(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + } + + // + // Code from here below requires work in order to work with ODL + // + + //-------------------------------------------------------- + public Uni get(String uniId) + //-------------------------------------------------------- + // get Uni of specified ID + { + WebTarget target = client.target("http://localhost:9090/unimgr/webapi/"); + + Response response = target.path("uni/"+uniId).request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Uni.class); + } + + //-------------------------------------------------------- + public List getAll() + //-------------------------------------------------------- + // get a list of all Uni instances + { + + WebTarget target = client.target("http://localhost:9090/unimgr/webapi/"); + + // Can I do this with a Response, so that I can check for errors + List response = target.path("uni/list") + .request(MediaType.APPLICATION_JSON) + .get(new GenericType>() { + }); + if (response == null) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException("there was an error on the server."); + } + return response; + } + + //-------------------------------------------------------- + public Uni testGet() + //-------------------------------------------------------- + // test marshaling of Uni class from server json + { + WebTarget target = client.target("http://localhost:9090/unimgr/webapi/"); + + Response response = target.path("uni").request(MediaType.APPLICATION_JSON).get(Response.class); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + //return response; + return response.readEntity(Uni.class); + } + + //-------------------------------------------------------- + public String ping() + //-------------------------------------------------------- + // test connectivity + { + + WebTarget target = client.target("http://localhost:9090/unimgr/webapi/"); + + Response response = target.path("uni").request(MediaType.TEXT_PLAIN).get(); + if (response.getStatus() != 200) // figure out how to use Status.OK + { + // in production you can be more specific based on reponse code, id, etc + throw new RuntimeException(response.getStatus() + ": there was an error on the server."); + } + + + return response.readEntity(String.class); + } +} diff --git a/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/EvcPath.java b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/EvcPath.java new file mode 100644 index 0000000..6556fbb --- /dev/null +++ b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/EvcPath.java @@ -0,0 +1,112 @@ +package com.cablelabs.vcpe.uni.unibase.model; + +/** + * Created by steve on 7/24/15. + */ +public class EvcPath { + + String id = "unset"; + Uni uni1 = null; + Uni uni2 = null; + String cos; + Uni.SvcSpeed ingressBW = Uni.SvcSpeed.UNASSIGNED; + Uni.SvcSpeed egressBW = Uni.SvcSpeed.UNASSIGNED; + + public EvcPath(String id, Uni uni1, Uni uni2, + Uni.SvcSpeed ingressBW, + Uni.SvcSpeed egressBW, + String cos) + { + this.id = id; + this.uni1 = uni1; + this.uni2 = uni2; + this.cos = cos; + this.ingressBW = ingressBW; + this.egressBW = egressBW; + } + + public String toJson() { + +//{ +// "evc": +// { +// "evc:id": "822f8284-2b35-11e5-b345-feff819cdc9f", +// "evc:uni-dest": +// [ +// { +// "order": 0, +// "uni": "822f7eec-2b35-11e5-b345-feff819cdc9f" +// } +// ], +// "evc:uni-source": +// [ +// { +// "order": 0, +// "uni": "111f7eec-2c35-11e5-b345-feff819cdc9f" +// } +// ], +// "evc:cos-id": "string", +// "evc:ingress-bw": +// { +// "speed-1G": {} +// }, +// "evc:egress-bw": +// { +// "speed-1G": {} +// } +// } +//} + + String json = "{\n"+ + " \"evc\":\n"+ + " {\n"+ + " \"evc:id\": \""+ this.getId() +"\",\n"+ + " \"evc:uni-dest\":\n"+ + " [\n"+ + " {\n"+ + " \"order\": 0,\n"+ + " \"uni\": \""+ this.uni1.getId() +"\"\n"+ + " }\n"+ + " ],\n"+ + " \"evc:uni-source\":\n"+ + " [\n"+ + " {\n"+ + " \"order\": 0,\n"+ + " \"uni\": \""+ this.uni2.getId() +"\"\n"+ + " }\n"+ + " ],\n"+ + " \"evc:cos-id\": \""+ this.getCos() +"\",\n"+ + " \"evc:ingress-bw\":\n"+ + " {\n"+ +// " \"speed-1G\": {}\n"+ + " \"" + this.getIngressBW() + "\": {}\n"+ + " },\n"+ + " \"evc:egress-bw\":\n"+ + " {\n"+ +// " \"speed-1G\": {}\n"+ + " \"" + this.getEgressBW() + "\": {}\n"+ + " }\n"+ + " }\n"+ + "}"; + return json; + } + + + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public Uni getUn1() { return uni1; } + public void setUn1(Uni uni1) { this.uni1 = uni1; } + + public Uni getUn2() { return uni2; } + public void setUn2(Uni uni2) { this.uni2 = uni2; } + + public String getCos() { return cos; } + public void setCos(String cos) { this.cos = cos; } + + public Uni.SvcSpeed getIngressBW() { return ingressBW; } + public void setIngressBW(Uni.SvcSpeed ingressBW) { this.ingressBW = ingressBW; } + + public Uni.SvcSpeed getEgressBW() { return egressBW; } + public void setEgressBW(Uni.SvcSpeed egressBW) { this.egressBW = egressBW; } +} diff --git a/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/Uni.java b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/Uni.java new file mode 100644 index 0000000..6d1b9c0 --- /dev/null +++ b/uni/unibase/src/main/java/com/cablelabs/vcpe/uni/unibase/model/Uni.java @@ -0,0 +1,230 @@ +package com.cablelabs.vcpe.uni.unibase.model; + +import com.cablelabs.vcpe.common.Dbg; + +import javax.xml.bind.annotation.*; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; + +/** + * Created by steve on 5/24/15. + */ + +@XmlRootElement +public class Uni +{ + + public enum SvcSpeed { + UNASSIGNED ("UNASSIGNED"), + TEN_MEG ("speed-10M"), + HUNDRED_MEG ("speed-100M"), + ONE_GIG ("speed-1G"), + TEN_GIG ("speed-10G"); + private final String s; + private SvcSpeed(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + public enum PhysMedium { // just a sampling of 802.3 phys layers + UNASSIGNED ("UNASSIGNED"), + TEN_BASE_T ("10BASE‑T"), + HUNDERED_BASE_T("100BASE‑T"), + GIG_BASE_T ("1000BASE‑T"), + TEN_GIG_BASE_T ("10GBASE‑T"); + private final String s; + private PhysMedium(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + public enum MacLayer { + UNASSIGNED ("UNASSIGNED"), + IEEE_802_3 ("IEEE 802.3-2005"); + private final String s; + private MacLayer(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + public enum SyncMode { + UNASSIGNED ("UNASSIGNED"), + ENABLED ("syncEnabled"), + DISABLED ("syncDisabled"); + private final String s; + private SyncMode(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + public enum Type { // not sure what this is + UNASSIGNED ("UNASSIGNED"), + UNITYPE ("UNITYPE"); + private final String s; + private Type(final String s) {this.s = s;} + @Override public String toString() { return s; } + } + + @XmlElement(name="id") + private String id; + + @XmlTransient // This does not get written to JSON body + private SvcSpeed speed; + + @XmlElement(name="ip-address") + private String ipAddress; + + @XmlElement(name="mac-address") + private String macAddress; + + @XmlElement(name="physical-medium") + private PhysMedium physicalMedium; + + @XmlElement(name="mac-layer") + private MacLayer macLayer; + + @XmlElement(name="mode") + private SyncMode mode; + + @XmlElement(name="type") + private Type type; + + @XmlElement(name="mtu-size") + private long mtuSize; + + // no argument constructor required for JAX-RS + public Uni() { + this.id = "unset"; + this.speed = SvcSpeed.UNASSIGNED; + this.ipAddress = "unset"; + this.macAddress = "unset"; + this.physicalMedium = PhysMedium.UNASSIGNED; + this.macLayer = MacLayer.UNASSIGNED; + this.mode = SyncMode.UNASSIGNED; + this.type = Type.UNASSIGNED; + this.mtuSize = -1; + } + + public void setAllProps (String id, SvcSpeed speed, String ipAddress, + String macAddress, PhysMedium physicalMedium, + MacLayer macLayer, SyncMode mode, Type type, long mtuSize) { + this.id = id; + this.speed = speed; + this.ipAddress = ipAddress; + this.macAddress = macAddress; + this.physicalMedium = physicalMedium; + this.macLayer = macLayer; + this.mode = mode; + this.type = type; + this.mtuSize = mtuSize; + } + + public void dump() { dump(0); } + public void dump(int tab) { + Dbg.p(tab, "id: " + this.id); + Dbg.p(tab, "speed: " + this.speed); + Dbg.p(tab, "ipAddress: " + this.ipAddress); + Dbg.p(tab, "macAddress: " + this.macAddress); + Dbg.p(tab, "physicalMedium: " + this.physicalMedium); + Dbg.p(tab, "macLayer: " + this.macLayer); + Dbg.p(tab, "mode: " + this.mode); + Dbg.p(tab, "type: " + this.type); + Dbg.p(tab, "mtuSize: " + this.mtuSize); + } + + public String toJson() { + + String json = "{\n"+ + " \"uni\":\n"+ + " {\n"+ + " \"uni:id\": \""+ this.getId() +"\",\n"+ + " \"speed\":\n" + + " {\n" + + " \"" + this.getSpeed() + "\": "+"\"1\"\n"+ + " },\n"+ + " \"uni:mac-layer\": \""+ this.getMacLayer() +"\",\n"+ + " \"uni:physical-medium\": \""+ this.getPhysicalMedium() +"\",\n"+ + " \"uni:mtu-size\": \""+ this.getMtuSize() +"\",\n"+ + " \"uni:type\": \"\",\n"+ + " \"uni:mac-address\": \""+ this.getMacAddress() +"\",\n"+ + " \"uni:ip-address\": \""+ this.getIpAddress() +"\",\n"+ + " \"uni:mode\": \""+ this.getMode() +"\"\n"+ + " }\n"+ + "}"; + + return json; + } + + + public static SvcSpeed cirToSvcSpeed (long cir) { + + // find closest + SvcSpeed svcSpeed = SvcSpeed.UNASSIGNED; + if ( cir <= 10000 ) + svcSpeed = SvcSpeed.TEN_MEG; + else if ( cir <= 100000 ) + svcSpeed = SvcSpeed.HUNDRED_MEG; + else if ( cir <= 1000000 ) + svcSpeed = SvcSpeed.ONE_GIG; + else + svcSpeed = SvcSpeed.TEN_GIG; + + return svcSpeed; + } + + public static PhysMedium svcSpeedToPhysMedium (SvcSpeed svcSpeed) { + + + // just for demo, this really needs to come from host, when hosts are modeled + switch (svcSpeed) { + case TEN_MEG: + return PhysMedium.TEN_BASE_T; + case HUNDRED_MEG: + return PhysMedium.HUNDERED_BASE_T; + case ONE_GIG: + return PhysMedium.GIG_BASE_T; + case TEN_GIG: + return PhysMedium.TEN_GIG_BASE_T; + default: + return PhysMedium.UNASSIGNED; + } + } + + public static void dumpList(List uniList) { dumpList(0, uniList); } + public static void dumpList(int tab, List uniList) { + int numUni = 0; + Dbg.p("----- Uni List : [" + uniList.size() + "] elements"); + for (Uni curUni : uniList) { + numUni++; + Dbg.p(tab+1, ""); + curUni.dump(tab+2); + } + } + + // getters & setters + + public String getId() { return id; } + public void setId(String id) { this.id = id; } + + public SvcSpeed getSpeed() { return speed; } + public void setSpeed(SvcSpeed speed) { this.speed = speed; } + + public String getIpAddress() { return ipAddress; } + public void setIpAddress(String ipAddress) { this.ipAddress = ipAddress; } + + public String getMacAddress() { return macAddress; } + public void setMacAddress(String macAddress) { this.macAddress = macAddress; } + + public PhysMedium getPhysicalMedium() { return physicalMedium; } + public void setPhysicalMedium(PhysMedium physicalMedium) { this.physicalMedium = physicalMedium; } + + public MacLayer getMacLayer() { return macLayer; } + public void setMacLayer(MacLayer macLayer) { this.macLayer = macLayer; } + + public SyncMode getMode() { return mode; } + public void setMode(SyncMode mode) { this.mode = mode; } + + public Type getType() { return type; } + public void setType(Type type) { this.type = type; } + + public long getMtuSize() { return mtuSize; } + public void setMtuSize(long mtuSize) { this.mtuSize = mtuSize; } +} diff --git a/uni/unibase/src/test/java/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.java b/uni/unibase/src/test/java/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.java new file mode 100644 index 0000000..0160190 --- /dev/null +++ b/uni/unibase/src/test/java/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.java @@ -0,0 +1,50 @@ +package com.cablelabs.vcpe.uni.unibase.client; + +import com.cablelabs.vcpe.uni.unibase.model.EvcPath; + +//import com.cablelabs.vcpe.cos.cosbase.client.CoSClient; +//import com.cablelabs.vcpe.cos.cosbase.model.CoS; + +import com.cablelabs.vcpe.uni.unibase.model.Uni; +import org.junit.Test; + +/** + * Created by steve on 5/28/15. + */ + +public class UniClientTest { + + @Test + public void testAll() throws Exception { + +// CoS gold = new CoS(); +// gold.setAllProps("gold", 100, 0.99, 17.43, 2.43, 0.01); + + + UniClient uniClient = new UniClient(); + + Uni uni1 = new Uni(); + uni1.setAllProps("uni-1", Uni.SvcSpeed.ONE_GIG, + "192.168.1.100", "11:AA:00:00:00:00", + Uni.PhysMedium.GIG_BASE_T, Uni.MacLayer.IEEE_802_3, + Uni.SyncMode.ENABLED, Uni.Type.UNITYPE, 1600); + uniClient.update(uni1); + + Uni uni2 = new Uni(); + uni2.setAllProps("uni-2", Uni.SvcSpeed.HUNDRED_MEG, + "192.168.1.101", "11:BB:00:00:00:00", + Uni.PhysMedium.HUNDERED_BASE_T, Uni.MacLayer.IEEE_802_3, + Uni.SyncMode.ENABLED, Uni.Type.UNITYPE, 1600); + + uniClient.update(uni1); + uniClient.update(uni2); + + + EvcPathClient evcPathClient = new EvcPathClient(); + EvcPath evcPath = new EvcPath( "new-evc", uni1, uni2, + Uni.SvcSpeed.ONE_GIG, + Uni.SvcSpeed.TEN_GIG, + "Gold" ); + evcPathClient.update(evcPath); + } +} \ No newline at end of file diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient$1.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient$1.class new file mode 100644 index 0000000..a0424c4 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient$1.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.class new file mode 100644 index 0000000..7a5d975 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/EvcPathClient.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient$1.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient$1.class new file mode 100644 index 0000000..c27fe95 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient$1.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient.class new file mode 100644 index 0000000..2299402 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/client/UniClient.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/EvcPath.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/EvcPath.class new file mode 100644 index 0000000..665f9a9 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/EvcPath.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$1.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$1.class new file mode 100644 index 0000000..60bbc96 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$1.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$MacLayer.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$MacLayer.class new file mode 100644 index 0000000..a01569d Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$MacLayer.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$PhysMedium.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$PhysMedium.class new file mode 100644 index 0000000..d1aafca Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$PhysMedium.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SvcSpeed.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SvcSpeed.class new file mode 100644 index 0000000..ea1f246 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SvcSpeed.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SyncMode.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SyncMode.class new file mode 100644 index 0000000..bd49b42 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$SyncMode.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$Type.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$Type.class new file mode 100644 index 0000000..bf73e35 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni$Type.class differ diff --git a/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni.class b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni.class new file mode 100644 index 0000000..f982446 Binary files /dev/null and b/uni/unibase/target/classes/com/cablelabs/vcpe/uni/unibase/model/Uni.class differ diff --git a/uni/unibase/target/maven-archiver/pom.properties b/uni/unibase/target/maven-archiver/pom.properties new file mode 100644 index 0000000..84d59f2 --- /dev/null +++ b/uni/unibase/target/maven-archiver/pom.properties @@ -0,0 +1,5 @@ +#Generated by Maven +#Thu Aug 06 14:01:19 PDT 2015 +version=1.0-SNAPSHOT +groupId=com.cablelabs.vcpe +artifactId=unibase diff --git a/uni/unibase/target/test-classes/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.class b/uni/unibase/target/test-classes/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.class new file mode 100644 index 0000000..79bb6e4 Binary files /dev/null and b/uni/unibase/target/test-classes/com/cablelabs/vcpe/uni/unibase/client/UniClientTest.class differ diff --git a/uni/unibase/target/unibase.jar b/uni/unibase/target/unibase.jar new file mode 100644 index 0000000..46cc4d4 Binary files /dev/null and b/uni/unibase/target/unibase.jar differ diff --git a/uni/unimgr/dbg.js b/uni/unimgr/dbg.js new file mode 100644 index 0000000..f4d3416 --- /dev/null +++ b/uni/unimgr/dbg.js @@ -0,0 +1,84 @@ +(function(){ + + var dbgFlag = true; + var pre = "" + + var on = function() { dbgFlag = true; }; + var off = function() { dbgFlag = false; }; + + var p = function(str, tab) { + if ( dbgFlag ) + { + var tabStr = ""; + if (tab) { + for (var i = 0; i < tab; i++ ) + tabStr += " "; + } + console.log(pre + tabStr + str); + } + }; + + var pj = function(obj) { + if ( dbgFlag ) + console.log(JSON.stringify(obj,null,3)) ; + }; + + var e = function(eMsg) { + console.log("!! ERROR: " + eMsg); + } + + var w = function(eMsg) { + console.log("** WARNIING: " + eMsg); + } + + // for testing. Write regaurdless of dbgFlag + var t = function(str, tab) { + var tabStr = ""; + if (tab) { + for (var i = 0; i < tab; i++ ) + tabStr += " "; + } + console.log(pre + tabStr + str); + } + +function curTime() { + + var date = new Date(); + + var hour = date.getHours(); + hour = (hour < 10 ? "0" : "") + hour; + + var min = date.getMinutes(); + min = (min < 10 ? "0" : "") + min; + + var sec = date.getSeconds(); + sec = (sec < 10 ? "0" : "") + sec; + + // var year = date.getFullYear(); + + // var month = date.getMonth() + 1; + // month = (month < 10 ? "0" : "") + month; + + // var day = date.getDate(); + // day = (day < 10 ? "0" : "") + day; + + // return year + ":" + month + ":" + day + ":" + hour + ":" + min + ":" + sec; + + return hour + ":" + min + ":" + sec; + + +} + + module.exports.curTime = curTime; // returns str w current time + + module.exports.on = on; // enable DBG printing + module.exports.off = off; // squelch DBG printing + module.exports.p = p; // print a debug string + module.exports.pj = pj; // print JSON version of an object + module.exports.w = w; // print an warning msg + module.exports.e = e; // print an error msg + module.exports.t = t; // print an error msg + + + +}()); \ No newline at end of file diff --git a/uni/unimgr/package.json b/uni/unimgr/package.json new file mode 100644 index 0000000..9c2c9f6 --- /dev/null +++ b/uni/unimgr/package.json @@ -0,0 +1,10 @@ +{ + "name": "unimgr-emulator", + "version": "0.0.1", + "description": "recieves and prints unimgr REST calls", + "author": "steve@sentosatech.com", + "dependencies": { + "express" : "latest", + "body-parser": "*" + } +} \ No newline at end of file diff --git a/uni/unimgr/uniMgrEmu.js b/uni/unimgr/uniMgrEmu.js new file mode 100644 index 0000000..f5ecb88 --- /dev/null +++ b/uni/unimgr/uniMgrEmu.js @@ -0,0 +1,247 @@ + +// Create express HTTP server app +var express = require('express'); +var app = express(); + +// have express parse http request JSON bodies into POJO's +var bodyParser = require('body-parser'); +app.use(bodyParser.json()); + +// local modules +var dbg = require('./dbg.js'); + +// enable cross domain requests +app.all('*', function(req, res, next) { + res.header("Access-Control-Allow-Origin", "*"); + res.header("Access-Control-Allow-Headers", "X-Requested-With"); + res.header('Access-Control-Allow-Headers', 'Content-Type'); + res.header('Access-Control-Allow-Headers', 'Authorization'); + res.header('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS'); + next(); +}); + + +// --------------------------------------------- +// UNI Manager Services +// --------------------------------------------- +// PUT: Create/update UNI +// /restconf/config/cl-vcpe-mef:unis/uni/ +// BODY: +// { +// "uni": { +// "uni:id": "822f7eec-2b35-11e5-b345-feff819cdc9f", +// "speed": { +// "speed-1G": 1 +// }, +// "uni:mac-layer": "IEEE 802.3-2005", +// "uni:physical-medium": "UNI TypeFull Duplex 2 Physical Interface", +// "uni:mtu-size": 0, +// "uni:type": "", +// "uni:mac-address": "68:5b:35:bb:f8:3e", +// "uni:ip-address": "192.168.0.22", +// "uni:mode": "Full Duplex" +// } +// } +// +// GET: Query UNI +// /restconf/operational/cl-vcpe-mef:unis/uni/ +// RESPONSE: +// { +// "uni": [ +// { +// "id": "822f7eec-2b35-11e5-b345-feff819cdc9f", +// "type": "", +// "speed": { +// "speed-1G": [ +// null +// ] +// }, +// "ip-address": "192.168.1.30", +// "physical-medium": "UNI TypeFull Duplex 2 Physical Interface", +// "mode": "Full Duplex", +// "mac-address": "08:00:27:35:64:90", +// "mtu-size": 0, +// "mac-layer": "IEEE 802.3-2005" +// } +// ] +// } +// +// +// DELETE: Delete a UNI +// /restconf/config/cl-vcpe-mef:unis/uni/ +// +// --------------------------------------------- + + +var uniMgrOpPath = "/restconf/operational/cl-vcpe-mef:unis/uni/"; +var uniMgrOpId = uniMgrOpPath+":uniId" + +var uniMgrCfgPath = "/restconf/config/cl-vcpe-mef:unis/uni/"; +var uniMgrCfgId = uniMgrCfgPath+":uniId" + +dbg.p("uni Op REST path : " + uniMgrOpPath); +dbg.p("uni Op REST id : " + uniMgrOpId); +dbg.p("uni Cfg REST path : " + uniMgrCfgPath); +dbg.p("uni Cfg REST id : " + uniMgrCfgId); + + +// We will maintain a map of UNI's created +var uniMap = {}; + + +var removeUniNameSpace = function(uniIn ) { + //dbg.p("in removeUniNameSpace()"); + var uniOut = {}; + + // remove pesky ODL namespace qualifiers, as they are not present in ODL responses + uniOut["uni"] = + [ + { + "id" : uniIn["uni"]["uni:id"], + "speed" : uniIn["uni"]["speed"], + "mac-layer" : uniIn["uni"]["uni:mac-layer"], + "physical-medium" : uniIn["uni"]["uni:physical-medium"], + "mtu-size" : uniIn["uni"]["uni:mtu-size"], + "type" : uniIn["uni"]["uni:type"], + "mac-address" : uniIn["uni"]["uni:mac-address"], + "ip-address" : uniIn["uni"]["uni:ip-address"], + "mode" : uniIn["uni"]["uni:mode"] + } + ] + + // dbg.p("Clean uni"); dbg.pj(uniOut); + return uniOut; +} + +// Create/update a UNI +// --------------------------------------------- +app.put( uniMgrCfgId, function(req, resp){ + dbg.p ("... [" + dbg.curTime() + "] made it to PUT: " + uniMgrCfgPath + req.params.uniId ); + + var uni = req.body; + dbg.p("Creating /Updating Uni: "); + dbg.pj(uni); + + uniClean = removeUniNameSpace(uni); + uniMap[uniClean.uni[0].id] = uniClean; + + // dbg.p("uni map after push of clean"); dbg.pj(uniMap); + resp.send( { "message": + "... made it to PUT: " + uniMgrCfgId } ); +}); + + + +// Query UNI Info +// --------------------------------------------- +app.get( uniMgrOpId, function(req, resp){ + + var uniId = req.params.uniId; + dbg.p ("... [" + dbg.curTime() + "] made it to GET: " + uniMgrOpPath + uniId ); + + var uniToReturn = null; + if ( uniMap[uniId] ) + uniToReturn = uniMap[uniId]; + else + uniToReturn = { "error" : "uni not in the DB: " + uniId } + + resp.send( uniToReturn ); +}); + +// Delete UNI +// --------------------------------------------- +app.delete( uniMgrCfgId, function(req, resp){ + var uniId = req.params.uniId; + dbg.p ("... [" + dbg.curTime() + "] made it to DELETE: " + uniMgrCfgPath + uniId ); + + // dbg.p("uni map prior to delete"); + // dbg.pj(uniMap); + delete uniMap[uniId]; + // dbg.p("-----------------------------------"); + // dbg.p("uni map after delete"); + // dbg.pj(uniMap); + + resp.send( { "message": + "... made it to DELETE: " + uniMgrCfgPath + uniId } ); +}); + +// --------------------------------------------- +// EVC Path Services +// --------------------------------------------- +// POST/PUT: Create/update UNI +// /restconf/operational/cl-vcpe-mef:evcs/evc/ +// BODY: +// { +// "evc": +// { +// "evc:id": "822f8284-2b35-11e5-b345-feff819cdc9f", +// "evc:uni-dest": +// [ +// { +// "order": 0, +// "uni": "822f7eec-2b35-11e5-b345-feff819cdc9f" +// } +// ], +// "evc:uni-source": +// [ +// { +// "order": 0, +// "uni": "111f7eec-2c35-11e5-b345-feff819cdc9f" +// } +// ], +// "evc:cos-id": "string", +// "evc:ingress-bw": +// { +// "speed-1G": {} +// }, +// "evc:egress-bw": +// { +// "speed-1G": {} +// } +// } +// } +// +// --------------------------------------------- + +var evcMgrCfgPath = "/restconf/config/cl-vcpe-mef:evcs/evc/"; +var evcMgrCfgId = evcMgrCfgPath+":evcId" +dbg.p("evc cfg REST path : " + evcMgrCfgPath); +dbg.p("evc cfg REST id : " + evcMgrCfgId); + +// We will maintain a map of EVCs created +var evcMap = {}; + + +// Create/update EVC Path +// --------------------------------------------- +app.put( evcMgrCfgId, function(req, resp){ + var evcId = req.params.evcId; + dbg.p ("... [" + dbg.curTime() + "] made it to PUT: " + evcMgrCfgPath + evcId ); + dbg.p("req body = "); + dbg.pj(req.body); + dbg.p("----------------------------------------------------") + resp.send( { "message": + "... made it to PUT: " + evcMgrCfgId } ); +}); + + +// Query EVC Info +// --------------------------------------------- +// TBD + + +// Delete EVC +// --------------------------------------------- +app.delete( evcMgrCfgId, function(req, resp){ + var evcId = req.params.evcId; + dbg.p ("... [" + dbg.curTime() + "] made it to DELETE: " + evcMgrCfgPath + evcId ); + + // currently not keeping a map of EVCs, just acknowledge recept of REST msg + resp.send( { "message": + "... made it to DELETE: " + evcMgrCfgPath + evcId } ); +}); + + +var PORT = 8181; +app.listen(PORT); +console.log('Running on http://localhost:' + PORT); -- cgit 1.2.3-korg