From b835031b83230c36649c6e77787867a465e0ac47 Mon Sep 17 00:00:00 2001 From: "andre.schmid" Date: Mon, 21 Jun 2021 22:25:28 +0100 Subject: Create REST endpoint to retrieve models MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Change-Id: Ifca0095d84d5da4ab4b055942d893e9c6a259eb7 Issue-ID: SDC-3622 Signed-off-by: André Schmid --- .../exception/ModelOperationExceptionSupplier.java | 6 +++ .../be/model/operations/impl/ModelOperation.java | 55 +++++++++++++++++----- .../model/operations/impl/ModelOperationTest.java | 36 ++++++++++++++ 3 files changed, 84 insertions(+), 13 deletions(-) (limited to 'catalog-model') diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/exception/ModelOperationExceptionSupplier.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/exception/ModelOperationExceptionSupplier.java index c2ad071d13..6622bf5bd8 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/exception/ModelOperationExceptionSupplier.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/jsonjanusgraph/operations/exception/ModelOperationExceptionSupplier.java @@ -21,6 +21,7 @@ package org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception; import java.util.function.Supplier; import org.openecomp.sdc.be.dao.api.ActionStatus; +import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus; /** * Supplies operation exception needed by the the Model logic @@ -47,4 +48,9 @@ public class ModelOperationExceptionSupplier { return () -> new OperationException(ActionStatus.MODEL_ALREADY_EXISTS, modelName); } + public static Supplier failedToRetrieveModels(final JanusGraphOperationStatus janusGraphOperationStatus) { + var errorMsg = String.format("Failed to retrieve models. Status '%s'", janusGraphOperationStatus); + return () -> new OperationException(ActionStatus.GENERAL_ERROR, errorMsg); + } + } diff --git a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java index ccc18e57dd..ddc0367a44 100644 --- a/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java +++ b/catalog-model/src/main/java/org/openecomp/sdc/be/model/operations/impl/ModelOperation.java @@ -20,6 +20,7 @@ package org.openecomp.sdc.be.model.operations.impl; import fj.data.Either; import java.nio.charset.StandardCharsets; +import java.util.Collections; import java.util.EnumMap; import java.util.List; import java.util.Map; @@ -99,18 +100,11 @@ public class ModelOperation { final Map props = new EnumMap<>(GraphPropertyEnum.class); props.put(GraphPropertyEnum.NAME, name); props.put(GraphPropertyEnum.UNIQUE_ID, UniqueIdBuilder.buildModelUid(name)); - final Either, JanusGraphOperationStatus> result = janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, props); - if (result.isRight()) { - final JanusGraphOperationStatus janusGraphOperationStatus = result.right().value(); - if (janusGraphOperationStatus == JanusGraphOperationStatus.NOT_FOUND) { - return Optional.empty(); - } - log.error(EcompLoggerErrorCode.DATA_ERROR, this.getClass().getName(), - String.format("Problem while getting model %s. reason %s", name, janusGraphOperationStatus)); - throw new OperationException(ActionStatus.GENERAL_ERROR, - String.format("Failed to get model %s on JanusGraph with %s error", name, janusGraphOperationStatus)); + final List modelVerticesList = findModelVerticesByCriteria(props); + if (modelVerticesList.isEmpty()) { + return Optional.empty(); } - return Optional.ofNullable(result.left().value().get(0)); + return Optional.ofNullable(modelVerticesList.get(0)); } public Optional findModelByName(final String name) { @@ -123,8 +117,7 @@ public class ModelOperation { } final GraphVertex graphVertex = modelVertexOpt.get(); - final var model = new Model((String) graphVertex.getMetadataProperty(GraphPropertyEnum.NAME)); - return Optional.of(model); + return Optional.of(convertToModel(graphVertex)); } public void createModelImports(final String modelId, final Map zipContent) { @@ -144,6 +137,42 @@ public class ModelOperation { }).collect(Collectors.toList()); toscaModelImportCassandraDao.importAll(modelId, toscaImportByModelList); } + + /** + * Finds all the models. + * + * @return the list of models + */ + public List findAllModels() { + return findModelsByCriteria(Collections.emptyMap()); + } + + private List findModelsByCriteria(final Map propertyCriteria) { + final List modelVerticesByCriteria = findModelVerticesByCriteria(propertyCriteria); + if (modelVerticesByCriteria.isEmpty()) { + return Collections.emptyList(); + } + + return modelVerticesByCriteria.stream().map(this::convertToModel).collect(Collectors.toList()); + } + + private List findModelVerticesByCriteria(final Map propertyCriteria) { + final Either, JanusGraphOperationStatus> result = janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, propertyCriteria); + if (result.isRight()) { + final var janusGraphOperationStatus = result.right().value(); + if (janusGraphOperationStatus == JanusGraphOperationStatus.NOT_FOUND) { + return Collections.emptyList(); + } + final var operationException = ModelOperationExceptionSupplier.failedToRetrieveModels(janusGraphOperationStatus).get(); + log.error(EcompLoggerErrorCode.DATA_ERROR, this.getClass().getName(), operationException.getMessage()); + throw operationException; + } + return result.left().value(); + } + + private Model convertToModel(final GraphVertex modelGraphVertex) { + return new Model((String) modelGraphVertex.getMetadataProperty(GraphPropertyEnum.NAME)); + } } diff --git a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java index 620c7f76a6..c48a1524b8 100644 --- a/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java +++ b/catalog-model/src/test/java/org/openecomp/sdc/be/model/operations/impl/ModelOperationTest.java @@ -20,6 +20,7 @@ package org.openecomp.sdc.be.model.operations.impl; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; @@ -55,6 +56,7 @@ import org.openecomp.sdc.be.data.model.ToscaImportByModel; import org.openecomp.sdc.be.datatypes.enums.GraphPropertyEnum; import org.openecomp.sdc.be.model.Model; import org.openecomp.sdc.be.model.ModelTestBase; +import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.ModelOperationExceptionSupplier; import org.openecomp.sdc.be.model.jsonjanusgraph.operations.exception.OperationException; import org.openecomp.sdc.be.resources.data.ModelData; import org.springframework.test.context.ContextConfiguration; @@ -225,4 +227,38 @@ class ModelOperationTest extends ModelTestBase { assertTrue(modelOperation.findModelByName(null).isEmpty()); } + @Test + void findAllModelsSuccessTest() { + final GraphVertex expectedVertex = mock(GraphVertex.class); + when(expectedVertex.getMetadataProperty(GraphPropertyEnum.NAME)).thenReturn(modelName); + when(janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, Collections.emptyMap())).thenReturn(Either.left(List.of(expectedVertex))); + final List actualModelList = modelOperation.findAllModels(); + assertFalse(actualModelList.isEmpty()); + assertEquals(1, actualModelList.size()); + assertEquals(modelName, actualModelList.get(0).getName()); + } + + @Test + void findAllModelsTest_noModelsFound() { + when(janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, Collections.emptyMap())).thenReturn(Either.left(Collections.emptyList())); + final List actualModelList = modelOperation.findAllModels(); + assertTrue(actualModelList.isEmpty()); + } + + @Test + void findAllModelsTest_janusGraphNotFound() { + when(janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, Collections.emptyMap())) + .thenReturn(Either.right(JanusGraphOperationStatus.NOT_FOUND)); + final List actualModelList = modelOperation.findAllModels(); + assertTrue(actualModelList.isEmpty()); + } + + @Test + void findAllModelsTest_janusGraphError() { + when(janusGraphDao.getByCriteria(VertexTypeEnum.MODEL, Collections.emptyMap())) + .thenReturn(Either.right(JanusGraphOperationStatus.GENERAL_ERROR)); + final var actualException = assertThrows(OperationException.class, () -> modelOperation.findAllModels()); + final var expectedException = ModelOperationExceptionSupplier.failedToRetrieveModels(JanusGraphOperationStatus.GENERAL_ERROR).get(); + assertEquals(expectedException.getMessage(), actualException.getMessage()); + } } -- cgit 1.2.3-korg