MicroserviceController up 07/103107/1
authorDominik Mizyn <d.mizyn@samsung.com>
Thu, 5 Mar 2020 09:26:33 +0000 (10:26 +0100)
committerDominik Mizyn <d.mizyn@samsung.com>
Thu, 5 Mar 2020 09:26:35 +0000 (10:26 +0100)
MicroserviceController up and all needed services

Issue-ID: PORTAL-710
Change-Id: I9cdfda5cc41726bf4eb91622aab39123bfd03063
Signed-off-by: Dominik Mizyn <d.mizyn@samsung.com>
portal-BE/src/main/java/org/onap/portal/controller/MicroserviceController.java [new file with mode: 0644]
portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpMicroserviceParameter.java
portal-BE/src/main/java/org/onap/portal/restTemplates/PortalWMSTemplate.java
portal-BE/src/main/java/org/onap/portal/service/microservice/EpMicroserviceService.java
portal-BE/src/main/java/org/onap/portal/service/microserviceParameter/EpMicroserviceParameterService.java

diff --git a/portal-BE/src/main/java/org/onap/portal/controller/MicroserviceController.java b/portal-BE/src/main/java/org/onap/portal/controller/MicroserviceController.java
new file mode 100644 (file)
index 0000000..b20452b
--- /dev/null
@@ -0,0 +1,148 @@
+/*-
+ * ============LICENSE_START==========================================
+ * ONAP Portal
+ * ===================================================================
+ * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
+ * ===================================================================
+ *
+ * Unless otherwise specified, all software contained herein is licensed
+ * under the Apache License, Version 2.0 (the "License");
+ * you may not use this software 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.
+ *
+ * Unless otherwise specified, all documentation contained herein is licensed
+ * under the Creative Commons License, Attribution 4.0 Intl. (the "License");
+ * you may not use this documentation except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *             https://creativecommons.org/licenses/by/4.0/
+ *
+ * Unless required by applicable law or agreed to in writing, documentation
+ * 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.portal.controller;
+
+import java.util.List;
+import java.util.stream.Collectors;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import org.onap.portal.domain.db.ep.EpMicroservice;
+import org.onap.portal.domain.dto.PortalRestResponse;
+import org.onap.portal.domain.dto.PortalRestStatusEnum;
+import org.onap.portal.domain.dto.ecomp.WidgetCatalog;
+import org.onap.portal.restTemplates.PortalWMSTemplate;
+import org.onap.portal.service.microservice.EpMicroserviceService;
+import org.onap.portal.validation.DataValidator;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.EnableAspectJAutoProxy;
+import org.springframework.core.ParameterizedTypeReference;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.PathVariable;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RestController;
+
+@SuppressWarnings("unchecked")
+@RestController
+@Configuration
+@EnableAspectJAutoProxy
+public class MicroserviceController {
+
+    private final DataValidator dataValidator = new DataValidator();
+
+    private final PortalWMSTemplate template;
+    private final EpMicroserviceService microserviceService;
+
+    @Autowired
+    public MicroserviceController(PortalWMSTemplate template, EpMicroserviceService microserviceService) {
+        this.template = template;
+        this.microserviceService = microserviceService;
+    }
+
+    @RequestMapping(value = {"/portalApi/microservices"}, method = RequestMethod.POST)
+    public PortalRestResponse<String> createMicroservice(HttpServletRequest request, HttpServletResponse response,
+        @Valid @RequestBody EpMicroservice newServiceData) {
+        if (newServiceData == null) {
+            return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "FAILURE",
+                "MicroserviceData cannot be null or empty");
+        } else {
+            if (!dataValidator.isValid(newServiceData)) {
+                return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+                    "ERROR", "MicroserviceData is not valid");
+            }
+        }
+        EpMicroservice serviceId = microserviceService.saveOne(newServiceData);
+        try {
+            microserviceService.saveServiceParameters(serviceId.getId(), newServiceData.getEpMicroserviceParameters());
+        } catch (Exception e) {
+            return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+        }
+        return new PortalRestResponse<>(PortalRestStatusEnum.OK, "SUCCESS", "");
+    }
+
+    @RequestMapping(value = {"/portalApi/microservices"}, method = RequestMethod.GET)
+    public List<EpMicroservice> getMicroservice(HttpServletRequest request, HttpServletResponse response) {
+        return microserviceService.getAll();
+    }
+
+    @RequestMapping(value = {"/portalApi/microservices/{serviceId}"}, method = RequestMethod.PUT)
+    public PortalRestResponse<String> updateMicroservice(HttpServletRequest request, HttpServletResponse response,
+        @PathVariable("serviceId") long serviceId, @Valid @RequestBody EpMicroservice newServiceData) {
+
+        if (newServiceData == null) {
+            return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "FAILURE",
+                "MicroserviceData cannot be null or empty");
+        } else {
+            if (!dataValidator.isValid(newServiceData)) {
+                return new PortalRestResponse<>(PortalRestStatusEnum.ERROR,
+                    "ERROR", "MicroserviceData is not valid");
+            }
+        }
+        try {
+            microserviceService.updateMicroservice(serviceId, newServiceData);
+        } catch (Exception e) {
+            return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+        }
+        return new PortalRestResponse<>(PortalRestStatusEnum.OK, "SUCCESS", "");
+    }
+
+    @RequestMapping(value = {"/portalApi/microservices/{serviceId}"}, method = RequestMethod.DELETE)
+    public PortalRestResponse<String> deleteMicroservice(HttpServletRequest request, HttpServletResponse response,
+        @PathVariable("serviceId") long serviceId) {
+        try {
+            ParameterizedTypeReference<List<WidgetCatalog>> typeRef = new ParameterizedTypeReference<List<WidgetCatalog>>() {
+            };
+            // If this service is assoicated with widgets, cannnot be deleted
+            ResponseEntity<List<WidgetCatalog>> ans = template.getWidgets(serviceId, typeRef);
+            List<WidgetCatalog> widgets = ans.getBody();
+            if (widgets.size() == 0) {
+                microserviceService.deleteById(serviceId);
+            } else {
+                String sb = widgets.stream().map(WidgetCatalog::getName).collect(Collectors.joining("' "));
+                return new PortalRestResponse<>(PortalRestStatusEnum.WARN, "SOME WIDGETS ASSOICATE WITH THIS SERVICE",
+                    sb);
+            }
+        } catch (Exception e) {
+            return new PortalRestResponse<>(PortalRestStatusEnum.ERROR, "FAILURE", e.getMessage());
+        }
+        return new PortalRestResponse<>(PortalRestStatusEnum.OK, "SUCCESS", "");
+    }
+}
index 74b051f..a4180a2 100644 (file)
@@ -80,10 +80,10 @@ CREATE TABLE `ep_microservice_parameter` (
 @NamedQueries({
         @NamedQuery(
                 name = "EpMicroserviceParameter.deleteByServiceId",
-                query = "DELETE FROM EpMicroserviceParameter WHERE service_id =:SERVICEID"),
+                query = "DELETE FROM EpMicroserviceParameter WHERE serviceId.id =:SERVICEID"),
         @NamedQuery(
                 name = "EpMicroserviceParameter.getParametersById",
-                query = "FROM EpMicroserviceParameter WHERE service_id =:SERVICEID")
+                query = "FROM EpMicroserviceParameter WHERE serviceId.id =:SERVICEID")
 })
 
 @Table(name = "ep_microservice_parameter", indexes = {
index 7470744..5b99e48 100644 (file)
@@ -1,10 +1,13 @@
 package org.onap.portal.restTemplates;
 
+import java.util.List;
+import org.onap.portal.domain.dto.ecomp.WidgetCatalog;
 import org.onap.portal.domain.dto.ecomp.WidgetServiceHeaders;
 import org.onap.portal.service.WidgetMService;
 import org.onap.portal.utils.EcompPortalUtils;
 import org.onap.portalsdk.core.util.SystemProperties;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.ParameterizedTypeReference;
 import org.springframework.http.HttpEntity;
 import org.springframework.http.HttpMethod;
 import org.springframework.http.ResponseEntity;
@@ -15,7 +18,6 @@ import org.springframework.web.client.RestTemplate;
 public class PortalWMSTemplate {
 
     private final RestTemplate template = new RestTemplate();
-
     private final WidgetMService widgetMService;
 
     @Autowired
@@ -33,4 +35,14 @@ public class PortalWMSTemplate {
                 + "/widget/microservices/widgetCatalog/parameters/" + widgetId,
             HttpMethod.GET, new HttpEntity(WidgetServiceHeaders.getInstance()), Long.class);
     }
+
+    public ResponseEntity<List<WidgetCatalog>> getWidgets(long serviceId,
+        ParameterizedTypeReference<List<WidgetCatalog>> typeRef)
+        throws Exception {
+        return template.exchange(
+            EcompPortalUtils.widgetMsProtocol() + "://" + widgetMService
+                .getServiceLocation("widgets-service", SystemProperties.getProperty("microservices.widget.local.port"))
+                + "/widget/microservices/widgetCatalog/service/" + serviceId,
+            HttpMethod.GET, new HttpEntity(WidgetServiceHeaders.getInstance()), typeRef);
+    }
 }
index e93ca85..0885b8c 100644 (file)
@@ -1,7 +1,14 @@
 package org.onap.portal.service.microservice;
 
 import java.util.Optional;
+import java.util.Set;
 import org.onap.portal.domain.db.ep.EpMicroservice;
+import org.onap.portal.domain.db.ep.EpMicroserviceParameter;
+import org.onap.portal.service.microserviceParameter.EpMicroserviceParameterService;
+import org.onap.portal.utils.EPCommonSystemProperties;
+import org.onap.portalsdk.core.logging.logic.EELFLoggerDelegate;
+import org.onap.portalsdk.core.onboarding.util.CipherUtil;
+import org.onap.portalsdk.core.util.SystemProperties;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 
@@ -10,11 +17,16 @@ import java.util.List;
 @Service
 public class EpMicroserviceService {
 
+    EELFLoggerDelegate logger = EELFLoggerDelegate.getLogger(EpMicroserviceService.class);
+
     private final EpMicroserviceDao epMicroserviceDao;
+    private final EpMicroserviceParameterService epMicroserviceParameterService;
 
     @Autowired
-    public EpMicroserviceService(EpMicroserviceDao epMicroserviceDao) {
+    public EpMicroserviceService(EpMicroserviceDao epMicroserviceDao,
+        EpMicroserviceParameterService epMicroserviceParameterService) {
         this.epMicroserviceDao = epMicroserviceDao;
+        this.epMicroserviceParameterService = epMicroserviceParameterService;
     }
 
     public List<EpMicroservice> saveAll(List<EpMicroservice> epMicroservices) {
@@ -24,4 +36,77 @@ public class EpMicroserviceService {
     public Optional<EpMicroservice> getById(long serviceId) {
         return epMicroserviceDao.findById(serviceId);
     }
+
+    public EpMicroservice saveOne(EpMicroservice newServiceData) {
+        return epMicroserviceDao.save(newServiceData);
+    }
+
+    public List<EpMicroservice> getAll() {
+        return epMicroserviceDao.findAll();
+    }
+
+    public void deleteById(long serviceId) {
+        epMicroserviceDao.deleteById(serviceId);
+    }
+
+    @SuppressWarnings("OptionalGetWithoutIsPresent")
+    public void updateMicroservice(long serviceId, EpMicroservice newServiceData) throws Exception {
+        EpMicroservice newService = getById(serviceId).get();
+        try {
+            newService.setId(serviceId);
+            if (newService.getPassword() != null) {
+                if (newService.getPassword().equals(EPCommonSystemProperties.APP_DISPLAY_PASSWORD)) {
+                    EpMicroservice oldMS = getById(serviceId).get();
+                    newService.setPassword(oldMS.getPassword()); // keep the old password
+                } else {
+                    newService.setPassword(encryptedPassword(newService.getPassword())); //new password
+                }
+            }
+            saveOne(newService);
+            List<EpMicroserviceParameter> oldService = epMicroserviceParameterService.getByServiceId(serviceId);
+            boolean foundParam;
+            for (EpMicroserviceParameter microserviceParameter : oldService) {
+                foundParam = false;
+                for (EpMicroserviceParameter service : newService.getEpMicroserviceParameters()) {
+                    if (service.getId().equals(microserviceParameter.getId())) {
+                        foundParam = true;
+                        break;
+                    }
+                }
+                if (!foundParam) {
+                    epMicroserviceParameterService.deleteOne(microserviceParameter);
+                }
+            }
+            for (EpMicroserviceParameter param : newService.getEpMicroserviceParameters()) {
+                param.setServiceId(newService);
+                epMicroserviceParameterService.save(param);
+            }
+        } catch (Exception e) {
+            logger.error(EELFLoggerDelegate.errorLogger, "updateMicroservice failed", e);
+            throw e;
+        }
+        saveServiceParameters(newService.getId(), newService.getEpMicroserviceParameters());
+    }
+
+    public void saveServiceParameters(Long newServiceId, Set<EpMicroserviceParameter> list) {
+        EpMicroservice newService = getById(newServiceId).get();
+        for (EpMicroserviceParameter para : list) {
+            para.setServiceId(newService);
+            epMicroserviceParameterService.save(para);
+        }
+    }
+
+    private String encryptedPassword(String decryptedPwd) throws Exception {
+        String result = "";
+        if (decryptedPwd != null && !decryptedPwd.isEmpty()) {
+            try {
+                result = CipherUtil.encryptPKC(decryptedPwd,
+                    SystemProperties.getProperty(SystemProperties.Decryption_Key));
+            } catch (Exception e) {
+                logger.error(EELFLoggerDelegate.errorLogger, "encryptedPassword failed", e);
+                throw e;
+            }
+        }
+        return result;
+    }
 }
index f4359c5..076e183 100644 (file)
@@ -77,6 +77,10 @@ public class EpMicroserviceParameterService {
               return list;
        }
 
+       public List<EpMicroserviceParameter> getByServiceId(long serviceId) {
+              return epMicroserviceParameterDao.getParametersById(serviceId);
+       }
+
        private MicroserviceParameter epWidgetCatalogParameterToMicroserviceParameter(
                final EpMicroserviceParameter microservice) {
               return new MicroserviceParameter(microservice.getId(), microservice.getServiceId().getId(),
@@ -105,4 +109,8 @@ public class EpMicroserviceParameterService {
        public List<EpMicroserviceParameter> saveAll(List<EpMicroserviceParameter> epMicroserviceParameters) {
               return epMicroserviceParameterDao.saveAll(epMicroserviceParameters);
        }
+
+       public void deleteOne(EpMicroserviceParameter microserviceParameter) {
+              epMicroserviceParameterDao.delete(microserviceParameter);
+       }
 }