summaryrefslogtreecommitdiffstats
path: root/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java
diff options
context:
space:
mode:
Diffstat (limited to 'mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java')
-rw-r--r--mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java138
1 files changed, 138 insertions, 0 deletions
diff --git a/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java b/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java
new file mode 100644
index 0000000..7869801
--- /dev/null
+++ b/mod2/catalog-service/src/main/java/org/onap/dcaegen2/platform/mod/web/service/specification/SpecificationServiceImpl.java
@@ -0,0 +1,138 @@
+/*
+ * ============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.specification;
+
+import org.onap.dcaegen2.platform.mod.model.microserviceinstance.MsInstance;
+import org.onap.dcaegen2.platform.mod.model.microserviceinstance.MsInstanceStatus;
+import org.onap.dcaegen2.platform.mod.model.restapi.SpecificationRequest;
+import org.onap.dcaegen2.platform.mod.model.specification.Specification;
+import org.onap.dcaegen2.platform.mod.model.specification.SpecificationStatus;
+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 org.springframework.transaction.annotation.Transactional;
+
+import java.util.Date;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * Specification Service implementation
+ */
+@Service
+@Setter
+public class SpecificationServiceImpl implements SpecificationService {
+
+ @Autowired
+ private SpecificationGateway specificationGateway;
+
+ @Autowired
+ private MsInstanceService msInstanceService;
+
+ @Autowired
+ private SpecificationValidatorService specificationValidatorService;
+
+ /**
+ * Lists all Ms Instances
+ * @param id
+ * @return
+ */
+ @Override
+ public List<Specification> getAllSpecsByMsInstanceId(String id) {
+ return specificationGateway.getSpecificationByMsInstanceId(id);
+ }
+
+ /**
+ * creates a Specification
+ * @param msInstanceId
+ * @param request
+ * @return
+ */
+ @Override
+ @Transactional
+ public Specification createSpecification(String msInstanceId, SpecificationRequest request) {
+ MsInstance msInstance = msInstanceService.getMsInstanceById(msInstanceId);
+ specificationValidatorService.validateSpecForRelease(request, msInstance.getRelease());
+ Specification newSpec = createSpecification(request, msInstance);
+ makePreviousSpecInactive(msInstance);
+ Specification savedSpec = specificationGateway.save(newSpec);
+ updateMsInstance(msInstance, savedSpec);
+ return savedSpec;
+ }
+
+ private Specification createSpecification(SpecificationRequest request, MsInstance msInstance) {
+ return Specification.builder()
+ .status(SpecificationStatus.ACTIVE)
+ .specContent(request.getSpecContent())
+ .policyJson(request.getPolicyJson())
+ .type(request.getType())
+ .metadata(getMetadata(request))
+ .msInstanceInfo(buildMsInstanceInfo(msInstance))
+ .build();
+ }
+
+ private void updateMsInstance(MsInstance msInstance, Specification savedSpecification) {
+ msInstance.setActiveSpec(savedSpecification);
+ msInstance.setStatus(MsInstanceStatus.IN_DEV);
+ msInstanceService.updateMsInstance(msInstance);
+ }
+
+ private void makePreviousSpecInactive(MsInstance msInstance) {
+ if (msInstance.getActiveSpec() != null) {
+ msInstance.getActiveSpec().setStatus(SpecificationStatus.INACTIVE);
+ specificationGateway.save(msInstance.getActiveSpec());
+ }
+ }
+
+ private Map<String, Object> getMetadata(SpecificationRequest request) {
+ Map<String, Object> metadata = request.getMetadata();
+ metadata.put("createdBy", request.getUser());
+ metadata.put("createdOn", new Date());
+ return metadata;
+ }
+
+ private Map<String, Object> buildMsInstanceInfo(MsInstance msInstance) {
+ Map<String, Object> msInstanceInfo = new HashMap<>();
+ msInstanceInfo.put("id", msInstance.getId());
+ msInstanceInfo.put("name", msInstance.getName());
+ msInstanceInfo.put("release", msInstance.getRelease());
+ return msInstanceInfo;
+ }
+
+ /**
+ * Updates a MsInstance reference in a Specification record
+ * @param msInstance
+ */
+ @Override
+ @Transactional
+ public void updateMsInstanceRef(MsInstance msInstance) {
+ List<Specification> specifications = getAllSpecsByMsInstanceId(msInstance.getId());
+ specifications.forEach((specification) ->{
+ specification.getMsInstanceInfo().put("name", msInstance.getName());
+ specification.getMsInstanceInfo().put("release", msInstance.getRelease());
+ specificationGateway.save(specification);
+ });
+ }
+
+
+}