From: Dominik Mizyn Date: Thu, 5 Mar 2020 09:26:33 +0000 (+0100) Subject: MicroserviceController up X-Git-Tag: 3.2.0~15^2 X-Git-Url: https://gerrit.onap.org/r/gitweb?p=portal.git;a=commitdiff_plain;h=8d84790f07aad48bebcbae1e53d6c7e99e697d5b MicroserviceController up MicroserviceController up and all needed services Issue-ID: PORTAL-710 Change-Id: I9cdfda5cc41726bf4eb91622aab39123bfd03063 Signed-off-by: Dominik Mizyn --- 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 index 00000000..b20452b0 --- /dev/null +++ b/portal-BE/src/main/java/org/onap/portal/controller/MicroserviceController.java @@ -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 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 getMicroservice(HttpServletRequest request, HttpServletResponse response) { + return microserviceService.getAll(); + } + + @RequestMapping(value = {"/portalApi/microservices/{serviceId}"}, method = RequestMethod.PUT) + public PortalRestResponse 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 deleteMicroservice(HttpServletRequest request, HttpServletResponse response, + @PathVariable("serviceId") long serviceId) { + try { + ParameterizedTypeReference> typeRef = new ParameterizedTypeReference>() { + }; + // If this service is assoicated with widgets, cannnot be deleted + ResponseEntity> ans = template.getWidgets(serviceId, typeRef); + List 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", ""); + } +} diff --git a/portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpMicroserviceParameter.java b/portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpMicroserviceParameter.java index 74b051fe..a4180a27 100644 --- a/portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpMicroserviceParameter.java +++ b/portal-BE/src/main/java/org/onap/portal/domain/db/ep/EpMicroserviceParameter.java @@ -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 = { diff --git a/portal-BE/src/main/java/org/onap/portal/restTemplates/PortalWMSTemplate.java b/portal-BE/src/main/java/org/onap/portal/restTemplates/PortalWMSTemplate.java index 74707445..5b99e48a 100644 --- a/portal-BE/src/main/java/org/onap/portal/restTemplates/PortalWMSTemplate.java +++ b/portal-BE/src/main/java/org/onap/portal/restTemplates/PortalWMSTemplate.java @@ -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> getWidgets(long serviceId, + ParameterizedTypeReference> 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); + } } diff --git a/portal-BE/src/main/java/org/onap/portal/service/microservice/EpMicroserviceService.java b/portal-BE/src/main/java/org/onap/portal/service/microservice/EpMicroserviceService.java index e93ca857..0885b8c7 100644 --- a/portal-BE/src/main/java/org/onap/portal/service/microservice/EpMicroserviceService.java +++ b/portal-BE/src/main/java/org/onap/portal/service/microservice/EpMicroserviceService.java @@ -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 saveAll(List epMicroservices) { @@ -24,4 +36,77 @@ public class EpMicroserviceService { public Optional getById(long serviceId) { return epMicroserviceDao.findById(serviceId); } + + public EpMicroservice saveOne(EpMicroservice newServiceData) { + return epMicroserviceDao.save(newServiceData); + } + + public List 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 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 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; + } } diff --git a/portal-BE/src/main/java/org/onap/portal/service/microserviceParameter/EpMicroserviceParameterService.java b/portal-BE/src/main/java/org/onap/portal/service/microserviceParameter/EpMicroserviceParameterService.java index f4359c5d..076e1834 100644 --- a/portal-BE/src/main/java/org/onap/portal/service/microserviceParameter/EpMicroserviceParameterService.java +++ b/portal-BE/src/main/java/org/onap/portal/service/microserviceParameter/EpMicroserviceParameterService.java @@ -77,6 +77,10 @@ public class EpMicroserviceParameterService { return list; } + public List 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 saveAll(List epMicroserviceParameters) { return epMicroserviceParameterDao.saveAll(epMicroserviceParameters); } + + public void deleteOne(EpMicroserviceParameter microserviceParameter) { + epMicroserviceParameterDao.delete(microserviceParameter); + } }