diff options
author | Kuleshov, Elena <evn@att.com> | 2020-04-16 11:02:28 -0400 |
---|---|---|
committer | Benjamin, Max (mb388a) <mb388a@att.com> | 2020-04-16 11:02:29 -0400 |
commit | d255e437b624bb88eab336b1c0b74372e821e99c (patch) | |
tree | 2c76c81fb8d87a8b5ea5265bff1f451a82a73e50 /adapters/mso-catalog-db-adapter/src | |
parent | b0f5ac59c297f81b7f17c1f367e64257ef7be2d2 (diff) |
Implement processing_flags table and corresponding
Implement processing_flags table and corresponding interfaces.
Implement rest interface for processingFlags table to toggle the value.
Correct hashcode calculation for ProcessingFlags bean.
Use newFabricConfigurationApi flag for managing FabricConfiguration BB
logic.
Remove readOnly specification from updating the processing_flags table
Make sure update_timestamp field updates automatically.
Issue-ID: SO-2814
Signed-off-by: Benjamin, Max (mb388a) <mb388a@att.com>
Change-Id: I00697f8edf62c2d3d725daa710c17f03595eac51
Diffstat (limited to 'adapters/mso-catalog-db-adapter/src')
5 files changed, 178 insertions, 3 deletions
diff --git a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java index 98abf15645..f283af1ba6 100644 --- a/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java +++ b/adapters/mso-catalog-db-adapter/src/main/java/org/onap/so/adapters/catalogdb/rest/CatalogDbAdapterRest.java @@ -27,6 +27,7 @@ package org.onap.so.adapters.catalogdb.rest; import java.util.ArrayList; import java.util.List; import javax.ws.rs.GET; +import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -46,8 +47,34 @@ import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceMacroHolder; import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceNetworks; import org.onap.so.adapters.catalogdb.catalogrest.QueryServiceVnfs; import org.onap.so.adapters.catalogdb.catalogrest.QueryVfModule; -import org.onap.so.db.catalog.beans.*; -import org.onap.so.db.catalog.data.repository.*; +import org.onap.so.db.catalog.beans.AllottedResource; +import org.onap.so.db.catalog.beans.AllottedResourceCustomization; +import org.onap.so.db.catalog.beans.InstanceGroup; +import org.onap.so.db.catalog.beans.NetworkResource; +import org.onap.so.db.catalog.beans.NetworkResourceCustomization; +import org.onap.so.db.catalog.beans.ProcessingFlags; +import org.onap.so.db.catalog.beans.Recipe; +import org.onap.so.db.catalog.beans.Service; +import org.onap.so.db.catalog.beans.ToscaCsar; +import org.onap.so.db.catalog.beans.VfModule; +import org.onap.so.db.catalog.beans.VfModuleCustomization; +import org.onap.so.db.catalog.beans.VnfRecipe; +import org.onap.so.db.catalog.beans.VnfResource; +import org.onap.so.db.catalog.beans.VnfResourceCustomization; +import org.onap.so.db.catalog.data.repository.AllottedResourceCustomizationRepository; +import org.onap.so.db.catalog.data.repository.AllottedResourceRepository; +import org.onap.so.db.catalog.data.repository.ArRecipeRepository; +import org.onap.so.db.catalog.data.repository.InstanceGroupRepository; +import org.onap.so.db.catalog.data.repository.NetworkRecipeRepository; +import org.onap.so.db.catalog.data.repository.NetworkResourceCustomizationRepository; +import org.onap.so.db.catalog.data.repository.NetworkResourceRepository; +import org.onap.so.db.catalog.data.repository.ProcessingFlagsRepository; +import org.onap.so.db.catalog.data.repository.ServiceRepository; +import org.onap.so.db.catalog.data.repository.ToscaCsarRepository; +import org.onap.so.db.catalog.data.repository.VFModuleRepository; +import org.onap.so.db.catalog.data.repository.VnfCustomizationRepository; +import org.onap.so.db.catalog.data.repository.VnfRecipeRepository; +import org.onap.so.db.catalog.data.repository.VnfResourceRepository; import org.onap.so.db.catalog.rest.beans.ServiceMacroHolder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,6 +129,9 @@ public class CatalogDbAdapterRest { @Autowired private InstanceGroupRepository instanceGroupRepository; + @Autowired + private ProcessingFlagsRepository processingFlagsRepo; + private static final String NO_MATCHING_PARAMETERS = "no matching parameters"; public Response respond(String version, int respStatus, boolean isArray, CatalogQuery qryResp) { @@ -547,4 +577,82 @@ public class CatalogDbAdapterRest { .entity(new GenericEntity<CatalogQueryException>(excResp) {}).build(); } } + + @GET + @Path("processingFlags/{flag}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Transactional(readOnly = true) + public Response getProcessingFlags(@PathParam("flag") String flag) { + return getProcessingFlagsImpl(flag); + } + + public Response getProcessingFlagsImpl(String flag) { + ProcessingFlags processingFlags = null; + logger.debug("Flag is: " + flag); + int respStatus = HttpStatus.SC_OK; + try { + processingFlags = processingFlagsRepo.findByFlag(flag); + if (processingFlags == null) { + logger.debug("ProcessingFlag not found"); + respStatus = HttpStatus.SC_NOT_FOUND; + + } else { + + logger.debug("ProcessingFlags processingFlags = {}", processingFlags.toString()); + } + return Response.status(respStatus).entity(processingFlags) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).build(); + } catch (Exception e) { + logger.error("Exception - queryProcesssingFlags", e); + CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), + CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<CatalogQueryException>(excResp) {}).build(); + } + } + + @PUT + @Path("processingFlags/{flag}") + @Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON}) + @Transactional + public Response updateProcessingFlagsValue(@PathParam("flag") String flag, ProcessingFlags updatedProcessingFlag) { + return updateProcessingFlagsValueImpl(flag, updatedProcessingFlag); + } + + public Response updateProcessingFlagsValueImpl(String flag, ProcessingFlags updatedProcessingFlag) { + ProcessingFlags processingFlags = null; + logger.debug("Flag is: " + flag); + int respStatus = HttpStatus.SC_OK; + try { + if (updatedProcessingFlag == null) { + logger.debug("No valid updatedProcessingFlag is provided"); + throw new RuntimeException("No valid updatedProcessingFlag is provided"); + } + String value = updatedProcessingFlag.getValue(); + if (value == null || (!value.equalsIgnoreCase("YES") && !value.equalsIgnoreCase("NO"))) { + logger.debug("Value " + value + " is invalid, only yes/no are allowed"); + throw new RuntimeException("Invalid value specified"); + } + processingFlags = processingFlagsRepo.findByFlag(flag); + if (processingFlags == null) { + logger.debug("ProcessingFlag not found"); + respStatus = HttpStatus.SC_NOT_FOUND; + } else { + logger.debug("ProcessingFlags processingFlags = {}", processingFlags.toString()); + processingFlags.setValue(value); + processingFlagsRepo.saveAndFlush(processingFlags); + return Response.status(respStatus).entity(null) + .header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON).build(); + } + } catch (Exception e) { + logger.error("Exception - queryProcesssingFlags", e); + CatalogQueryException excResp = new CatalogQueryException(e.getMessage(), + CatalogQueryExceptionCategory.INTERNAL, Boolean.FALSE, null); + return Response.status(HttpStatus.SC_INTERNAL_SERVER_ERROR) + .entity(new GenericEntity<CatalogQueryException>(excResp) {}).build(); + } + + return Response.status(HttpStatus.SC_NOT_FOUND).header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON) + .build(); + } } diff --git a/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V8.7__AddProcessingFlags.sql b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V8.7__AddProcessingFlags.sql new file mode 100644 index 0000000000..2686df13a3 --- /dev/null +++ b/adapters/mso-catalog-db-adapter/src/main/resources/db/migration/V8.7__AddProcessingFlags.sql @@ -0,0 +1,13 @@ +use catalogdb; + +CREATE TABLE IF NOT EXISTS `processing_flags` ( + `ID` INT(11) NOT NULL AUTO_INCREMENT, + `FLAG` varchar(200) NOT NULL, + `VALUE` varchar(200) NOT NULL, + `ENDPOINT` varchar(200) NOT NULL, + `DESCRIPTION` longtext NOT NULL, + `CREATION_TIMESTAMP` timestamp NULL DEFAULT current_timestamp(), + `UPDATE_TIMESTAMP` timestamp DEFAULT current_timestamp() ON UPDATE current_timestamp(), + PRIMARY KEY (`ID`), + UNIQUE KEY `UK_processing_flags` (`FLAG`) +) ENGINE=InnoDB DEFAULT CHARSET=latin1;
\ No newline at end of file diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java index 69a23a0eba..04161e9df9 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/adapters/catalogdb/catalogrest/CatalogDBRestTest.java @@ -27,6 +27,7 @@ import javax.ws.rs.core.Response; import org.json.JSONException; import org.junit.Test; import org.onap.so.adapters.catalogdb.CatalogDbAdapterBaseTest; +import org.onap.so.db.catalog.beans.ProcessingFlags; import org.onap.so.db.catalog.beans.ServiceRecipe; import org.skyscreamer.jsonassert.JSONAssert; import org.skyscreamer.jsonassert.JSONCompareMode; @@ -36,6 +37,7 @@ import org.springframework.http.HttpHeaders; import org.springframework.http.HttpMethod; import org.springframework.http.ResponseEntity; import org.springframework.web.util.UriComponentsBuilder; +import com.fasterxml.jackson.databind.ObjectMapper; public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { @@ -55,6 +57,8 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { private static final String ECOMP_MSO_CATALOG_V2_SERVICE_RESOURCES = "ecomp/mso/catalog/v2/serviceResources"; + private static final String ECOMP_MSO_CATALOG_PROCESSING_FLAGS = "ecomp/mso/catalog/v2/processingFlags"; + TestRestTemplate restTemplate = new TestRestTemplate("test", "test"); HttpHeaders headers = new HttpHeaders(); @@ -805,6 +809,44 @@ public class CatalogDBRestTest extends CatalogDbAdapterBaseTest { assertEquals(Response.Status.CREATED.getStatusCode(), response.getStatusCode().value()); } + @Test + public void testGetProcessingFlagsByFlag() throws Exception { + HttpEntity<String> entity = new HttpEntity<String>(null, headers); + headers.set("Accept", MediaType.APPLICATION_JSON); + + UriComponentsBuilder builder = UriComponentsBuilder + .fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_PROCESSING_FLAGS)).pathSegment("TESTFLAG"); + + ResponseEntity<String> response = + restTemplate.exchange(builder.toUriString(), HttpMethod.GET, entity, String.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + ObjectMapper mapper = new ObjectMapper(); + ProcessingFlags processingFlagsResponse = mapper.readValue(response.getBody(), ProcessingFlags.class); + + assertEquals(processingFlagsResponse.getFlag(), "TESTFLAG"); + assertEquals(processingFlagsResponse.getValue(), "NO"); + assertEquals(processingFlagsResponse.getEndpoint(), "TESTENDPOINT"); + assertEquals(processingFlagsResponse.getDescription(), "TEST FLAG"); + } + + @Test + public void testSetProcessingFlagsFlagValue() throws JSONException { + ProcessingFlags updatedProcessingFlag = new ProcessingFlags(); + updatedProcessingFlag.setFlag("TESTFLAG"); + updatedProcessingFlag.setValue("YES"); + HttpEntity<ProcessingFlags> entity = new HttpEntity<ProcessingFlags>(updatedProcessingFlag, headers); + headers.set("Accept", MediaType.APPLICATION_JSON); + + UriComponentsBuilder builder = UriComponentsBuilder + .fromHttpUrl(createURLWithPort(ECOMP_MSO_CATALOG_PROCESSING_FLAGS)).pathSegment("TESTFLAG"); + + ResponseEntity<String> response = + restTemplate.exchange(builder.toUriString(), HttpMethod.PUT, entity, String.class); + + assertEquals(Response.Status.OK.getStatusCode(), response.getStatusCode().value()); + } + private String createURLWithPort(String uri) { return "http://localhost:" + port + uri; } diff --git a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java index 03ef24ded0..d6f2c6dbcc 100644 --- a/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java +++ b/adapters/mso-catalog-db-adapter/src/test/java/org/onap/so/db/catalog/client/CatalogDbClientTest.java @@ -43,6 +43,7 @@ import org.onap.so.db.catalog.beans.InstanceGroup; import org.onap.so.db.catalog.beans.NetworkResourceCustomization; import org.onap.so.db.catalog.beans.PnfResource; import org.onap.so.db.catalog.beans.PnfResourceCustomization; +import org.onap.so.db.catalog.beans.ProcessingFlags; import org.onap.so.db.catalog.beans.ServerType; import org.onap.so.db.catalog.beans.Service; import org.onap.so.db.catalog.beans.ServiceRecipe; @@ -771,5 +772,12 @@ public class CatalogDbClientTest extends CatalogDbAdapterBaseTest { } + @Test + public void testGetProcessingFlagsFromFlag() { + ProcessingFlags processingFlags = client.findProcessingFlagsByFlag("TESTFLAG"); + assertNotNull(processingFlags); + assertEquals(processingFlags.getEndpoint(), "TESTENDPOINT"); + } + } diff --git a/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql b/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql index 8fd171bf64..31a4f126e8 100644 --- a/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql +++ b/adapters/mso-catalog-db-adapter/src/test/resources/db/migration/afterMigrate.sql @@ -253,4 +253,8 @@ insert into workflow(artifact_uuid, artifact_name, name, operation_name, version ('5b0c4322-643d-4c9f-b184-4516049e99b1', 'testingWorkflow.bpmn', 'testingWorkflow', 'create', 1, 'Test Workflow', null, 'vnf', 'sdc'); insert into vnf_resource_to_workflow(vnf_resource_model_uuid, workflow_id) values -('ff2ae348-214a-11e7-93ae-92361f002671', '1');
\ No newline at end of file +('ff2ae348-214a-11e7-93ae-92361f002671', '1'); + +insert into processing_flags (flag,value,endpoint,description) values +('TESTFLAG', 'NO', 'TESTENDPOINT', 'TEST FLAG'); + |