summaryrefslogtreecommitdiffstats
path: root/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java')
-rw-r--r--mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java257
1 files changed, 257 insertions, 0 deletions
diff --git a/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java b/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java
new file mode 100644
index 0000000..9cf46e6
--- /dev/null
+++ b/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/basemicroservice/MsServiceImpl.java
@@ -0,0 +1,257 @@
+/*
+ * ============LICENSE_START=======================================================
+ * org.onap.dcae
+ * ================================================================================
+ * Copyright (c) 2020 AT&T Intellectual Property. 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.
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.dcaegen2.platform.mod.web.service.basemicroservice;
+
+import org.onap.dcaegen2.platform.mod.model.basemicroservice.BaseMicroservice;
+import org.onap.dcaegen2.platform.mod.model.basemicroservice.BaseMsStatus;
+import org.onap.dcaegen2.platform.mod.model.common.AuditFields;
+import org.onap.dcaegen2.platform.mod.model.exceptions.ErrorMessages;
+import org.onap.dcaegen2.platform.mod.model.exceptions.ResourceConflictException;
+import org.onap.dcaegen2.platform.mod.model.exceptions.basemicroservice.BaseMicroserviceNotFoundException;
+import org.onap.dcaegen2.platform.mod.model.microserviceinstance.MsInstance;
+import org.onap.dcaegen2.platform.mod.model.restapi.MicroserviceCreateRequest;
+import org.onap.dcaegen2.platform.mod.model.restapi.MicroserviceUpdateRequest;
+import org.onap.dcaegen2.platform.mod.web.service.microserviceinstance.MsInstanceService;
+import lombok.Setter;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * MsService implementation
+ */
+@Service
+public class MsServiceImpl implements MsService {
+
+ @Autowired
+ @Setter
+ private BaseMicroserviceGateway repository;
+
+ @Autowired
+ @Setter
+ private MsInstanceService msInstanceService;
+
+ /**
+ * creates Microservice record
+ * @param microserviceRequest
+ * @return
+ */
+ @Override
+ public BaseMicroservice createMicroservice(MicroserviceCreateRequest microserviceRequest) {
+ checkIfThereAreAnyConflicts(microserviceRequest); //TODO: Make fields unique in entity itself
+ BaseMicroservice microservice = new BaseMsCreator().create(microserviceRequest);
+ return repository.save(microservice);
+ }
+
+ /**
+ * name, tag and serviceName are unique for the given ms. This method make sure that.
+ * */
+ private void checkIfThereAreAnyConflicts(MicroserviceCreateRequest microserviceRequest) {
+ checkIfMsNameAlreadyExists(microserviceRequest.getName());
+ checkIfMsTagAlreadyExists(microserviceRequest.getTag());
+ checkiIfServiceNameAlreadyExists(microserviceRequest.getServiceName());
+ }
+
+ private void checkIfMsNameAlreadyExists(String msName) {
+ if (repository.findByName(msName).isPresent())
+ throw new ResourceConflictException(ErrorMessages.MICROSERVICE_NAME_CONFLICT_MESSAGE);
+ }
+
+ private void checkIfMsTagAlreadyExists(String msTag) {
+ if (repository.findByTag(msTag).isPresent())
+ throw new ResourceConflictException(ErrorMessages.MICROSERVICE_TAG_CONFLICT_MESSAGE);
+ }
+
+ private void checkiIfServiceNameAlreadyExists(String serviceName) {
+ boolean serviceNameIsEmpty = serviceName == null || serviceName.isEmpty();
+ if(serviceNameIsEmpty)
+ return;
+ if (repository.findByServiceName(serviceName).isPresent())
+ throw new ResourceConflictException(ErrorMessages.MS_SERVICE_NAME_CONFLICT_MESSAGE);
+ }
+
+ /**
+ * lists all microservice records
+ * @return
+ */
+ @Override
+ public List<BaseMicroservice> getAllMicroservices() {
+ return repository.findAll();
+ }
+
+ /**
+ * gets a Mioroservice by id
+ * @param baseMsId
+ * @return
+ */
+ @Override
+ public BaseMicroservice getMicroserviceById(String baseMsId) {
+ return repository.findById(baseMsId).orElseThrow(() ->
+ new BaseMicroserviceNotFoundException(String.format("Microservice with id %s not found", baseMsId)));
+ }
+
+ /**
+ * gets a Microservice by name
+ * @param msName
+ * @return
+ */
+ @Override
+ public BaseMicroservice getMicroserviceByName(String msName) {
+ return repository.findByName(msName).orElseThrow(() ->
+ new BaseMicroserviceNotFoundException(String.format("Microservice with name %s not found", msName)));
+ }
+
+ /**
+ * updates a Microservice
+ * @param requestedMsId
+ * @param updateRequest
+ */
+ @Override
+ public void updateMicroservice(String requestedMsId, MicroserviceUpdateRequest updateRequest) {
+ BaseMicroservice microservice = getMicroserviceById(requestedMsId);
+ updateMetadata(updateRequest, microservice);
+ updateOtherFields(updateRequest, microservice);
+ repository.save(microservice);
+ msInstanceService.updateMicroserviceReference(microservice);
+ }
+
+ //TODO: Get rid of nulls!
+ private void updateMetadata(MicroserviceUpdateRequest updateRequest, BaseMicroservice microservice) {
+ if(updateRequest.getUser() != null){
+ microservice.getMetadata().setUpdatedBy(updateRequest.getUser());
+ }
+ if(updateRequest.getMetadata() != null && updateRequest.getMetadata().containsKey("notes")){
+ microservice.getMetadata().setNotes((String) updateRequest.getMetadata().get("notes"));
+ }
+ if(updateRequest.getMetadata() != null && updateRequest.getMetadata().containsKey("labels")){
+ microservice.getMetadata().setLabels((List<String>) updateRequest.getMetadata().get("labels"));
+ }
+ microservice.getMetadata().setUpdatedOn(new Date());
+ }
+
+ private void updateOtherFields(MicroserviceUpdateRequest updateRequest, BaseMicroservice microservice) {
+ if(updateRequest.getName() != null){
+ updateName(updateRequest, microservice);
+ }
+ if(updateRequest.getType() != null){
+ microservice.setType(updateRequest.getType());
+ }
+ if(updateRequest.getLocation() != null){
+ microservice.setLocation(updateRequest.getLocation());
+ }
+ if(updateRequest.getServiceName() != null){
+ updateServiceName(updateRequest, microservice);
+ }
+ if(updateRequest.getNamespace() != null){
+ microservice.setNamespace(updateRequest.getNamespace());
+ }
+ }
+
+ /**
+ * If name requested in the updateRequest doesn't match the name of the ms record which is being worked on,
+ * then only check for the uniqueness.
+ */
+ private void updateName(MicroserviceUpdateRequest updateRequest, BaseMicroservice microservice) {
+ boolean notMatchesWithCurrentName = !updateRequest.getName().equals(microservice.getName());
+ if(notMatchesWithCurrentName)
+ checkIfMsNameAlreadyExists(updateRequest.getName());
+ microservice.setName(updateRequest.getName());
+ }
+
+ /**
+ * If serviceName requested in the updateRequest doesn't match the serviceName of the ms record which is
+ * being worked on, then only check for the uniqueness.
+ */
+ private void updateServiceName(MicroserviceUpdateRequest updateRequest, BaseMicroservice microservice) {
+ boolean notMatchesWithCurrentServiceName = !updateRequest.getServiceName().equals(microservice.getServiceName());
+ if(notMatchesWithCurrentServiceName)
+ checkiIfServiceNameAlreadyExists(updateRequest.getServiceName());
+ microservice.setServiceName(updateRequest.getServiceName());
+ }
+
+ /**
+ * saves msInstance reference in a given Microservice
+ * @param microservice
+ * @param msInstance
+ */
+ @Override
+ public void saveMsInstanceReferenceToMs(BaseMicroservice microservice, MsInstance msInstance) {
+ microservice.getMsInstances().add(getMsInstanceReference(msInstance));
+ repository.save(microservice);
+ }
+
+ /**
+ * updates MsIntstance ref in Microservice record
+ * @param msInstance
+ */
+ @Override
+ public void updateMsInstanceRef(MsInstance msInstance) {
+ BaseMicroservice microservice = getMicroserviceById((String) msInstance.getMsInfo().get("id"));
+ List<Map<String, String>> msInstancesRef = microservice.getMsInstances();
+ msInstancesRef.forEach((ref) -> {
+ if(ref.get("id").equals(msInstance.getId()))
+ ref.put("name", msInstance.getName());
+ });
+ repository.save(microservice);
+ }
+
+ private Map<String, String> getMsInstanceReference(MsInstance msInstance) {
+ Map<String,String> msInstanceInfo = new HashMap<>();
+ msInstanceInfo.put("id", msInstance.getId());
+ msInstanceInfo.put("name", msInstance.getName());
+ return msInstanceInfo;
+ }
+
+ private class BaseMsCreator {
+
+ BaseMicroservice create(MicroserviceCreateRequest createRequest) {
+ BaseMicroservice microservice = new BaseMicroservice();
+ microservice.setLocation(createRequest.getLocation());
+ microservice.setName(createRequest.getName());
+ microservice.setTag(createRequest.getTag());
+ microservice.setServiceName(createRequest.getServiceName());
+ microservice.setNamespace(createRequest.getNamespace());
+ microservice.setStatus(BaseMsStatus.ACTIVE);
+ microservice.setType(createRequest.getType());
+ microservice.setMetadata(getMetadataFields(createRequest));
+ return microservice;
+ }
+
+ private AuditFields getMetadataFields(MicroserviceCreateRequest request) {
+ AuditFields auditFields = AuditFields.builder().build();
+ auditFields.setCreatedBy(request.getUser());
+ auditFields.setCreatedOn(new Date());
+
+ if (request.getMetadata().containsKey("notes"))
+ auditFields.setNotes((String) request.getMetadata().get("notes"));
+ if (request.getMetadata().containsKey("labels"))
+// auditFields.setLabels((List<String>) request.getMetadata().get("labels"));
+ auditFields.setLabels(request.getMetadata().get("labels"));
+
+ return auditFields;
+
+ }
+ }
+}