aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJvD_Ericsson <jeff.van.dam@est.tech>2023-01-19 14:43:33 +0000
committerMichael Morris <michael.morris@est.tech>2023-01-23 15:44:25 +0000
commit7457ecefb624682f6dddc558111b1d38f2a2ca83 (patch)
tree52cbc05f95c23ac2c8d2b9be97a8ac19eec38ad3
parent3da7d9867ab91b58f2a765d24731b45a3f43841c (diff)
Fix ability to add property to data type of different model
Issue-ID: SDC-4339 Signed-off-by: JvD_Ericsson <jeff.van.dam@est.tech> Change-Id: Ibc5b57a042ffc4e7f914d46ad264a0e16081b863
-rw-r--r--catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java14
-rw-r--r--catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperation.java16
-rw-r--r--catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperationTest.java33
-rw-r--r--catalog-ui/src/app/ng2/pages/type-workspace/type-workspace-properties/type-workspace-properties.component.ts3
4 files changed, 65 insertions, 1 deletions
diff --git a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java
index e081110486..8139237e38 100644
--- a/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java
+++ b/catalog-be/src/main/java/org/openecomp/sdc/be/servlets/DataTypeServlet.java
@@ -144,6 +144,20 @@ public class DataTypeServlet extends BeGenericServlet {
public Response createProperty(@Parameter(in = ParameterIn.PATH, required = true, description = "The data type id")
@PathParam("id") final String id,
@RequestBody(description = "Property to add", required = true) final PropertyDefinitionDto propertyDefinitionDto) {
+ Optional<DataTypeDataDefinition> dataType = dataTypeOperation.getDataTypeByUid(id);
+ dataType.ifPresentOrElse(dt -> {
+ String model = dt.getModel();
+ Optional<DataTypeDataDefinition> propertyDataType = dataTypeOperation.getDataTypeByNameAndModel(propertyDefinitionDto.getType(), model);
+ if (propertyDataType.isEmpty()) {
+ if (model == null || model.isEmpty()) {
+ model = "SDC AID";
+ }
+ throw new OperationException(ActionStatus.INVALID_MODEL,
+ String.format("Property model is not the same as the data type model. Must be be '%s'", model));
+ }
+ }, () -> {
+ throw new OperationException(ActionStatus.DATA_TYPE_NOT_FOUND, String.format("Failed to find data type '%s'", id));
+ });
final PropertyDefinitionDto property = dataTypeOperation.createProperty(id, propertyDefinitionDto);
dataTypeBusinessLogic.updateApplicationDataTypeCache(id);
return Response.status(Status.CREATED).entity(property).build();
diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperation.java
index d75302fc5d..36dcaf44ba 100644
--- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperation.java
+++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperation.java
@@ -189,6 +189,22 @@ public class DataTypeOperation extends AbstractOperation {
return Optional.of(dataTypeEither.left().value().getDataTypeDataDefinition());
}
+ public Optional<DataTypeDataDefinition> getDataTypeByNameAndModel(final String name, String model) {
+ final Either<DataTypeData, JanusGraphOperationStatus> dataTypeEither = janusGraphGenericDao
+ .getNode("name", name, DataTypeData.class, model);
+ if (dataTypeEither.isRight()) {
+ if (JanusGraphOperationStatus.NOT_FOUND.equals(dataTypeEither.right().value())) {
+ return Optional.empty();
+ }
+ final StorageOperationStatus storageOperationStatus
+ = DaoStatusConverter.convertJanusGraphStatusToStorageStatus(dataTypeEither.right().value());
+ LOGGER.warn("Failed to fetch data type '{}' from JanusGraph. Status is: {}", name, storageOperationStatus);
+ throw new OperationException(ActionStatus.GENERAL_ERROR,
+ String.format("Failed to fetch data type '%s' from JanusGraph. Status is: %s", name, storageOperationStatus));
+ }
+ return Optional.of(dataTypeEither.left().value().getDataTypeDataDefinition());
+ }
+
public List<PropertyDefinition> findAllProperties(final String uniqueId) {
final Either<Map<String, PropertyDefinition>, JanusGraphOperationStatus> propertiesEither =
propertyOperation.findPropertiesOfNode(NodeTypeEnum.DataType, uniqueId);
diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperationTest.java
index 034269b715..5d68bf9bd9 100644
--- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperationTest.java
+++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/DataTypeOperationTest.java
@@ -114,6 +114,39 @@ class DataTypeOperationTest {
}
@Test
+ void getDataTypeByNameAndModelEtsiTest() {
+ final DataTypeData dataType = dataTypesWithModel.get(0);
+ final String dataTypeName = dataType.getDataTypeDataDefinition().getName();
+ final String dataTypeUid = dataType.getDataTypeDataDefinition().getUniqueId();
+ when(janusGraphGenericDao.getNode("name", dataTypeName, DataTypeData.class, modelName))
+ .thenReturn(Either.left(dataType));
+ final var dataTypeFound = dataTypeOperation.getDataTypeByNameAndModel(dataTypeName, model.getName());
+ assertTrue(dataTypeFound.isPresent());
+ DataTypeDataDefinition foundDataType = dataTypeFound.get();
+ assertEquals(modelName ,foundDataType.getModel());
+ assertEquals(dataTypeUid ,foundDataType.getUniqueId());
+ }
+
+ @Test
+ void getDataTypeByNameAndModelNotFoundTest() {
+ when(janusGraphGenericDao.getNode("name", "notReal", DataTypeData.class, modelName))
+ .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
+ final var dataTypesFound = dataTypeOperation.getDataTypeByNameAndModel("notReal", modelName);
+ assertTrue(dataTypesFound.isEmpty());
+ }
+
+ @Test
+ void getDataTypeByNameAndModelGeneralErrorTest() {
+ when(janusGraphGenericDao.getNode("name", "notReal", DataTypeData.class, modelName))
+ .thenReturn(Either.right(JanusGraphOperationStatus.GENERAL_ERROR));
+ final OperationException actualException =
+ assertThrows(OperationException.class, () -> dataTypeOperation.getDataTypeByNameAndModel("notReal", modelName));
+ final OperationException expectedException =
+ DataTypeOperationExceptionSupplier.unexpectedErrorWhileFetchingProperties("notReal").get();
+ assertEquals(expectedException.getMessage(), actualException.getMessage());
+ }
+
+ @Test
void getAllDataTypeNodesWithValidationErrorTest() {
when(janusGraphGenericDao.getByCriteria(NodeTypeEnum.DataType, null, DataTypeData.class))
.thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND));
diff --git a/catalog-ui/src/app/ng2/pages/type-workspace/type-workspace-properties/type-workspace-properties.component.ts b/catalog-ui/src/app/ng2/pages/type-workspace/type-workspace-properties/type-workspace-properties.component.ts
index 90bc89ae08..f53ad5b376 100644
--- a/catalog-ui/src/app/ng2/pages/type-workspace/type-workspace-properties/type-workspace-properties.component.ts
+++ b/catalog-ui/src/app/ng2/pages/type-workspace/type-workspace-properties/type-workspace-properties.component.ts
@@ -173,7 +173,8 @@ export class TypeWorkspacePropertiesComponent implements OnInit {
this.modalService.addDynamicContentToModalAndBindInputs(modal, AddPropertyComponent, {
'readOnly': readOnly,
- 'property': property
+ 'property': property,
+ 'model': this.dataType.model
});
modal.instance.dynamicContent.instance.onValidityChange.subscribe((validationEvent: PropertyValidationEvent) => {
disableSaveButtonFlag = !validationEvent.isValid;