Added VNFM Simulator project
Change-Id: I9b84164dc189128eed8d09b6ce69fc5d5fd78348
Issue-ID: SO-1618
Signed-off-by: rokenny <ronan.kenny@est.tech>
diff --git a/vnfm-simulator/vnf-service/pom.xml b/vnfm-simulator/vnf-service/pom.xml
new file mode 100644
index 0000000..9a6825c
--- /dev/null
+++ b/vnfm-simulator/vnf-service/pom.xml
@@ -0,0 +1,78 @@
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.vnfm</groupId>
+ <artifactId>vnfm-simulator</artifactId>
+ <version>0.0.1-SNAPSHOT</version>
+ </parent>
+ <artifactId>vnf-service</artifactId>
+
+
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <java.version>1.8</java.version>
+ </properties>
+
+ <dependencies>
+
+ <dependency>
+ <groupId>org.onap.vnfm</groupId>
+ <artifactId>vnfm-api</artifactId>
+ <version>${project.version}</version>
+
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-web</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-actuator</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.springframework.boot</groupId>
+ <artifactId>spring-boot-starter-test</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.swagger</groupId>
+ <artifactId>swagger-jaxrs</artifactId>
+ <version>1.5.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.directory.studio</groupId>
+ <artifactId>org.apache.commons.io</artifactId>
+ <version>2.4</version>
+ </dependency>
+ <dependency>
+ <groupId>com.googlecode.json-simple</groupId>
+ <artifactId>json-simple</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger-ui</artifactId>
+ <version>2.6.1</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>io.springfox</groupId>
+ <artifactId>springfox-swagger2</artifactId>
+ <version>2.6.1</version>
+ <scope>compile</scope>
+ </dependency>
+ <dependency>
+ <groupId>com.fasterxml.jackson.core</groupId>
+ <artifactId>jackson-databind</artifactId>
+ <version>2.9.8</version>
+ </dependency>
+
+ </dependencies>
+</project>
\ No newline at end of file
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java
new file mode 100644
index 0000000..b9703b3
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmController.java
@@ -0,0 +1,69 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.svnfm.simulator.controller;
+
+import javax.ws.rs.core.MediaType;
+
+import org.onap.svnfm.simulator.services.SvnfmService;
+import org.onap.vnfm.v1.model.CreateVnfRequest;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+/**
+ * This class contains the VNF life cycle management operations
+ *
+ * @author ronan.kenny@est.tech
+ *
+ */
+
+/**
+ * TO DO
+ *
+ * Implement Exception handling Implement VNFM adaptor call Identify the Create
+ * VNF response Test itwith the VNFM Adaptor
+ */
+
+@RestController
+@RequestMapping("/svnfm")
+
+public class SvnfmController {
+
+ @Autowired
+ private SvnfmService svnfmService;
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmController.class);
+
+ @RequestMapping(method = RequestMethod.POST, value = "/vnf_instances")
+ public ResponseEntity<Object> createVNFInstance(@RequestBody final CreateVnfRequest createVNFRequest) {
+ LOGGER.info("Start createVNFInstance");
+ HttpHeaders headers = new HttpHeaders();
+ headers.add("Content-Type", MediaType.APPLICATION_JSON);
+ return new ResponseEntity<>(svnfmService.createVNF(), headers, HttpStatus.CREATED);
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java
new file mode 100644
index 0000000..e6f55f6
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/controller/SvnfmHealthcheck.java
@@ -0,0 +1,58 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.svnfm.simulator.controller;
+
+import org.onap.svnfm.simulator.exception.InvalidRestRequestException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+
+/**
+ * TO DO
+ *
+ * Implement Exception handling
+ * Implement VNFM adaptor call
+ * Identify the Create VNF response
+ * Test it with the VNFM Adaptor
+ */
+
+@RestController
+@RequestMapping("/svnfm")
+public class SvnfmHealthcheck {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(SvnfmHealthcheck.class);
+
+ @RequestMapping(method = RequestMethod.GET, value = "/healthcheck")
+ public ResponseEntity<String> healthCheck() {
+ try {
+ return new ResponseEntity<>(HttpStatus.OK);
+ } catch (final InvalidRestRequestException extensions) {
+ final String message = "Not Found";
+ LOGGER.error(message);
+ return new ResponseEntity<>(message, HttpStatus.NOT_FOUND);
+ }
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java
new file mode 100644
index 0000000..a06f2d2
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/GlobalExceptionHandler.java
@@ -0,0 +1,27 @@
+package org.onap.svnfm.simulator.exception;
+
+import org.springframework.http.HttpHeaders;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.http.converter.HttpMessageNotReadableException;
+import org.springframework.web.HttpMediaTypeNotSupportedException;
+import org.springframework.web.bind.annotation.ControllerAdvice;
+import org.springframework.web.context.request.WebRequest;
+import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler;
+
+@ControllerAdvice
+public class GlobalExceptionHandler extends ResponseEntityExceptionHandler {
+ @Override
+ protected ResponseEntity<Object> handleHttpMessageNotReadable(HttpMessageNotReadableException ex,
+ HttpHeaders headers, HttpStatus status, WebRequest request) {
+ String error = "Malformed JSON request";
+ return new ResponseEntity<>(error, HttpStatus.BAD_REQUEST);
+ }
+
+ @Override
+ protected ResponseEntity<Object> handleHttpMediaTypeNotSupported(HttpMediaTypeNotSupportedException ex,
+ HttpHeaders headers, HttpStatus status, WebRequest request) {
+ String error = "Media type Not Supported";
+ return new ResponseEntity<>(error, HttpStatus.UNSUPPORTED_MEDIA_TYPE);
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java
new file mode 100644
index 0000000..eabd4ec
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/InvalidRestRequestException.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.svnfm.simulator.exception;
+
+/**
+ * @author ronan.kenny@est.tech
+ *
+ */
+public class InvalidRestRequestException extends RuntimeException {
+
+ private static final long serialVersionUID = 3977807111893986938L;
+
+ public InvalidRestRequestException(final String message) {
+ super(message);
+ }
+
+ public InvalidRestRequestException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java
new file mode 100644
index 0000000..c84416e
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/exception/RestProcessingException.java
@@ -0,0 +1,37 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Nordix Foundation.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.svnfm.simulator.exception;
+
+/**
+ * @author ronan.kenny@est.tech
+ *
+ */
+public class RestProcessingException extends RuntimeException {
+
+ private static final long serialVersionUID = 16862313537198441L;
+
+ public RestProcessingException(final String message) {
+ super(message);
+ }
+
+ public RestProcessingException(final String message, final Throwable cause) {
+ super(message, cause);
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java
new file mode 100644
index 0000000..e2dc43a
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/java/org/onap/svnfm/simulator/services/SvnfmService.java
@@ -0,0 +1,60 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * Copyright (C) 2019 Ericsson. All rights reserved.
+ * ================================================================================
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+package org.onap.svnfm.simulator.services;
+
+import java.io.IOException;
+
+import org.apache.commons.io.IOUtils;
+import org.onap.svnfm.simulator.notifications.VnfmAdapterCreationNotification;
+import org.onap.vnfm.v1.model.InlineResponse201;
+import org.springframework.stereotype.Service;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+
+/**
+ * This class handles the logic of VNF lifecycle
+ *
+ * @author Lathishbabu Ganesan (lathishbabu.ganesan@est.tech)
+ *
+ */
+@Service
+public class SvnfmService {
+
+ /**
+ * This method read the create VNF response from the json file and return it
+ * to the VNFM Adaptor
+ *
+ * @return
+ */
+ public InlineResponse201 createVNF() {
+ Thread creationNodtification = new Thread(new VnfmAdapterCreationNotification());
+ creationNodtification.start();
+ ObjectMapper mapper = new ObjectMapper();
+ InlineResponse201 inlineResponse201 = null;
+ try {
+ inlineResponse201 = mapper.readValue(
+ IOUtils.toString(getClass().getClassLoader().getResource("json/createVNFResponse.json")),
+ InlineResponse201.class);
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+ return inlineResponse201;
+ }
+}
diff --git a/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json b/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json
new file mode 100644
index 0000000..a66bcc1
--- /dev/null
+++ b/vnfm-simulator/vnf-service/src/main/resources/json/createVNFResponse.json
@@ -0,0 +1,19 @@
+{
+ "id": "147d9468-4646-11e9-80af-fa163e169afd",
+ "vnfInstanceName": "MME85_8.EricssonMMEVSPV2_0",
+ "vnfInstanceDescription": "2f3e21dd-99ba-45b1-b4da-1f71283c46f6",
+ "vnfdId": "sgsn-mme_onapmme01_cxp9025898_4r85d01",
+ "vnfProvider": "Ericsson",
+ "vnfProductName": "SGSN-MME",
+ "vnfSoftwareVersion": "1.24 (CXS101289_R85D01)",
+ "vnfdVersion": "onapmme01_cxp9025898_4r85d01",
+ "vnfPkgId": null,
+ "vnfConfigurableProperties": null,
+ "vimConnectionInfo": null,
+ "instantiationState": "NOT_INSTANTIATED",
+ "instantiatedVnfInfo": null,
+ "metadata": null,
+ "extensions": null,
+ "links": null
+
+}