From: Sébastien Determe Date: Mon, 8 Apr 2019 16:34:27 +0000 (+0000) Subject: Merge "Update cadi to 2.1.10 and updated keystore" X-Git-Tag: 4.0.0~38 X-Git-Url: https://gerrit.onap.org/r/gitweb?a=commitdiff_plain;h=21842a5fe883fb1a6f5795b85dbf58f10267e0bb;hp=989f40665366b23937d06ebddc5d7c42b2e75f9f;p=clamp.git Merge "Update cadi to 2.1.10 and updated keystore" --- diff --git a/extra/sql/bulkload/create-tables.sql b/extra/sql/bulkload/create-tables.sql index 29e0facd..3c261eb4 100644 --- a/extra/sql/bulkload/create-tables.sql +++ b/extra/sql/bulkload/create-tables.sql @@ -35,7 +35,6 @@ create table micro_service_policies ( name varchar(255) not null, - blueprint_name varchar(255) not null, json_representation json not null, model_type varchar(255) not null, policy_tosca MEDIUMTEXT not null, diff --git a/pom.xml b/pom.xml index 71c9f298..911ffc60 100644 --- a/pom.xml +++ b/pom.xml @@ -64,8 +64,8 @@ 1.8 1.0.0 - 2.22.1 - 2.0.6.RELEASE + 2.23.1 + 2.1.4.RELEASE jacoco ${project.build.directory}/surefire-reports @@ -284,6 +284,10 @@ ${tomcat.version} + + org.apache.camel + camel-http4 + org.apache.camel camel-spring-boot-starter @@ -405,6 +409,7 @@ com.googlecode.json-simple json-simple + 1.1.1 org.apache.commons diff --git a/src/main/java/org/onap/clamp/clds/config/spring/CldsConfiguration.java b/src/main/java/org/onap/clamp/clds/config/spring/CldsConfiguration.java index 8372e3f5..8e1c75bb 100644 --- a/src/main/java/org/onap/clamp/clds/config/spring/CldsConfiguration.java +++ b/src/main/java/org/onap/clamp/clds/config/spring/CldsConfiguration.java @@ -5,20 +5,20 @@ * Copyright (C) 2017-2018 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. + * 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 + * + * 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.clamp.clds.config.spring; @@ -28,10 +28,8 @@ import javax.xml.transform.TransformerConfigurationException; import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.config.EncodedPasswordBasicDataSource; -import org.onap.clamp.clds.dao.CldsDao; import org.onap.clamp.clds.transform.XslTransformer; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.config.PropertiesFactoryBean; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.ApplicationContext; @@ -50,7 +48,7 @@ public class CldsConfiguration { /** * Clds Identity database DataSource configuration - * + * * @return */ @Bean(name = "cldsDataSource") @@ -66,13 +64,6 @@ public class CldsConfiguration { return bean; } - @Bean(name = "cldsDao") - public CldsDao getCldsDao(@Qualifier("cldsDataSource") DataSource dataSource) { - CldsDao cldsDao = new CldsDao(); - cldsDao.setDataSource(dataSource); - return cldsDao; - } - @Bean(name = "cldsBpmnTransformer") public XslTransformer getCldsBpmnXslTransformer() throws TransformerConfigurationException { XslTransformer xslTransformer = new XslTransformer(); diff --git a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java index 5da26b19..0cf68ea1 100644 --- a/src/main/java/org/onap/clamp/clds/dao/CldsDao.java +++ b/src/main/java/org/onap/clamp/clds/dao/CldsDao.java @@ -26,7 +26,6 @@ package org.onap.clamp.clds.dao; import com.att.eelf.configuration.EELFLogger; import com.att.eelf.configuration.EELFManager; -import java.io.InputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; @@ -35,7 +34,6 @@ import java.util.Map; import javax.sql.DataSource; -import org.onap.clamp.clds.model.CldsDbServiceCache; import org.onap.clamp.clds.model.CldsDictionary; import org.onap.clamp.clds.model.CldsDictionaryItem; import org.onap.clamp.clds.model.CldsEvent; @@ -43,11 +41,11 @@ import org.onap.clamp.clds.model.CldsModel; import org.onap.clamp.clds.model.CldsModelInstance; import org.onap.clamp.clds.model.CldsModelProp; import org.onap.clamp.clds.model.CldsMonitoringDetails; -import org.onap.clamp.clds.model.CldsServiceData; import org.onap.clamp.clds.model.CldsTemplate; import org.onap.clamp.clds.model.CldsToscaModel; import org.onap.clamp.clds.model.ValueItem; -import org.springframework.dao.EmptyResultDataAccessException; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.jdbc.core.namedparam.MapSqlParameterSource; import org.springframework.jdbc.core.namedparam.SqlParameterSource; @@ -86,14 +84,17 @@ public class CldsDao { /** * Log message when instantiating. */ - public CldsDao() { + @Autowired + public CldsDao(@Qualifier("cldsDataSource") DataSource dataSource) { logger.info("CldsDao instantiating..."); + setDataSource(dataSource); } /** * When dataSource is provided, instantiate spring jdbc objects. * - * @param dataSource the data source + * @param dataSource + * the data source */ public void setDataSource(DataSource dataSource) { this.jdbcTemplateObject = new JdbcTemplate(dataSource); @@ -117,7 +118,8 @@ public class CldsDao { /** * Get a model from the database given the model name. * - * @param modelName the model name + * @param modelName + * the model name * @return the model */ public CldsModel getModel(String modelName) { @@ -138,16 +140,19 @@ public class CldsDao { /** * Get a model from the database given the controlNameUuid. * - * @param controlNameUuid the control name uuid + * @param controlNameUuid + * the control name uuid * @return the model by uuid */ public CldsModel getModelByUuid(String controlNameUuid) { return getModel(null, controlNameUuid); } + /** * Get a model and template information from the database given the model name. * - * @param modelName the model name + * @param modelName + * the model name * @return model model template */ @@ -179,8 +184,10 @@ public class CldsDao { * Update model in the database using parameter values and return updated model * object. * - * @param model the model - * @param userid the userid + * @param model + * the model + * @param userid + * the userid * @return model */ public CldsModel setModel(CldsModel model, String userid) { @@ -208,8 +215,10 @@ public class CldsDao { * Inserts new modelInstance in the database using parameter values and return * updated model object. * - * @param model the model - * @param modelInstancesList the model instances list + * @param model + * the model + * @param modelInstancesList + * the model instances list */ public void insModelInstance(CldsModel model, List modelInstancesList) { // Delete all existing model instances for given controlNameUUID @@ -241,10 +250,14 @@ public class CldsDao { * Insert an event in the database - require either modelName or * controlNamePrefix/controlNameUuid. * - * @param modelName the model name - * @param controlNamePrefix the control name prefix - * @param controlNameUuid the control name uuid - * @param cldsEvent the clds event + * @param modelName + * the model name + * @param controlNamePrefix + * the control name prefix + * @param controlNameUuid + * the control name uuid + * @param cldsEvent + * the clds event * @return clds event */ public CldsEvent insEvent(String modelName, String controlNamePrefix, String controlNameUuid, CldsEvent cldsEvent) { @@ -268,8 +281,10 @@ public class CldsDao { /** * Update event with process instance id. * - * @param eventId the event id - * @param processInstanceId the process instance id + * @param eventId + * the event id + * @param processInstanceId + * the process instance id */ public void updEvent(String eventId, String processInstanceId) { SqlParameterSource in = new MapSqlParameterSource().addValue("v_event_id", eventId) @@ -291,8 +306,10 @@ public class CldsDao { * Update template in the database using parameter values and return updated * template object. * - * @param template the template - * @param userid the userid + * @param template + * the template + * @param userid + * the userid */ public void setTemplate(CldsTemplate template, String userid) { SqlParameterSource in = new MapSqlParameterSource().addValue("v_template_name", template.getName()) @@ -322,7 +339,8 @@ public class CldsDao { /** * Get a template from the database given the model name. * - * @param templateName the template name + * @param templateName + * the template name * @return model template */ public CldsTemplate getTemplate(String templateName) { @@ -367,7 +385,7 @@ public class CldsDao { public List getDeployedModelProperties() { List cldsModelPropList = new ArrayList<>(); String modelsSql = "select m.model_id, m.model_name, mp.model_prop_id, mp.model_prop_text FROM model m, " - + "model_properties mp, event e " + + "model_properties mp, event e " + "WHERE m.model_prop_id = mp.model_prop_id and m.event_id = e.event_id and e.action_cd = 'DEPLOY'"; List> rows = jdbcTemplateObject.queryForList(modelsSql); CldsModelProp cldsModelProp = null; @@ -421,7 +439,8 @@ public class CldsDao { /** * Method to delete model from database. * - * @param modelName the model name + * @param modelName + * the model name */ public void deleteModel(String modelName) { SqlParameterSource in = new MapSqlParameterSource().addValue("v_model_name", modelName); @@ -461,7 +480,8 @@ public class CldsDao { /** * Method to retrieve a tosca models by Policy Type from database. * - * @param policyType the policy type + * @param policyType + * the policy type * @return List of CldsToscaModel */ public List getToscaModelByPolicyType(String policyType) { @@ -471,7 +491,8 @@ public class CldsDao { /** * Method to retrieve a tosca models by toscaModelName, version from database. * - * @param toscaModelName the tosca model name + * @param toscaModelName + * the tosca model name * @return List of CldsToscaModel */ public List getToscaModelByName(String toscaModelName) { @@ -486,8 +507,7 @@ public class CldsDao { String toscaModelSql = "SELECT tm.tosca_model_name, tm.tosca_model_id, tm.policy_type, " + "tmr.tosca_model_revision_id, tmr.tosca_model_json, tmr.version, tmr.user_id, tmr.createdTimestamp, " - + "tmr.lastUpdatedTimestamp " - + ((toscaModelName != null) ? (", tmr.tosca_model_yaml ") : " ") + + "tmr.lastUpdatedTimestamp " + ((toscaModelName != null) ? (", tmr.tosca_model_yaml ") : " ") + "FROM tosca_model tm, tosca_model_revision tmr WHERE tm.tosca_model_id = tmr.tosca_model_id " + ((toscaModelName != null) ? (" AND tm.tosca_model_name = '" + toscaModelName + "'") : " ") + ((policyType != null) ? (" AND tm.policy_type = '" + policyType + "'") : " ") @@ -520,8 +540,10 @@ public class CldsDao { /** * Method to upload a new version of Tosca Model Yaml in Database. * - * @param cldsToscaModel the clds tosca model - * @param userId the user id + * @param cldsToscaModel + * the clds tosca model + * @param userId + * the user id * @return CldsToscaModel clds tosca model */ public CldsToscaModel updateToscaModelWithNewVersion(CldsToscaModel cldsToscaModel, String userId) { @@ -537,8 +559,10 @@ public class CldsDao { /** * Method to upload a new Tosca model Yaml in DB. Default version is 1.0 * - * @param cldsToscaModel the clds tosca model - * @param userId the user id + * @param cldsToscaModel + * the clds tosca model + * @param userId + * the user id * @return CldsToscaModel clds tosca model */ public CldsToscaModel insToscaModel(CldsToscaModel cldsToscaModel, String userId) { @@ -558,7 +582,8 @@ public class CldsDao { /** * Method to insert a new Dictionary in Database. * - * @param cldsDictionary the clds dictionary + * @param cldsDictionary + * the clds dictionary */ public void insDictionary(CldsDictionary cldsDictionary) { SqlParameterSource in = new MapSqlParameterSource() @@ -571,9 +596,12 @@ public class CldsDao { /** * Method to update Dictionary with new info in Database. * - * @param dictionaryId the dictionary id - * @param cldsDictionary the clds dictionary - * @param userId the user id + * @param dictionaryId + * the dictionary id + * @param cldsDictionary + * the clds dictionary + * @param userId + * the user id */ public void updateDictionary(String dictionaryId, CldsDictionary cldsDictionary, String userId) { @@ -586,8 +614,10 @@ public class CldsDao { /** * Method to get list of Dictionaries from the Database. * - * @param dictionaryId the dictionary id - * @param dictionaryName the dictionary name + * @param dictionaryId + * the dictionary id + * @param dictionaryName + * the dictionary name * @return dictionary */ public List getDictionary(String dictionaryId, String dictionaryName) { @@ -620,8 +650,10 @@ public class CldsDao { /** * Method to insert a new Dictionary Element for given dictionary in Database. * - * @param cldsDictionaryItem the clds dictionary item - * @param userId the user id + * @param cldsDictionaryItem + * the clds dictionary item + * @param userId + * the user id */ public void insDictionarElements(CldsDictionaryItem cldsDictionaryItem, String userId) { SqlParameterSource in = new MapSqlParameterSource() @@ -638,9 +670,12 @@ public class CldsDao { * Method to update Dictionary Elements with new info for a given dictionary in * Database. * - * @param dictionaryElementId the dictionary element id - * @param cldsDictionaryItem the clds dictionary item - * @param userId the user id + * @param dictionaryElementId + * the dictionary element id + * @param cldsDictionaryItem + * the clds dictionary item + * @param userId + * the user id */ public void updateDictionaryElements(String dictionaryElementId, CldsDictionaryItem cldsDictionaryItem, String userId) { @@ -659,9 +694,12 @@ public class CldsDao { * Method to get list of all dictionary elements for a given dictionary in the * Database. * - * @param dictionaryName the dictionary name - * @param dictionaryId the dictionary id - * @param dictElementShortName the dict element short name + * @param dictionaryName + * the dictionary name + * @param dictionaryId + * the dictionary id + * @param dictElementShortName + * the dict element short name * @return dictionary elements */ public List getDictionaryElements(String dictionaryName, String dictionaryId, @@ -701,7 +739,8 @@ public class CldsDao { * Method to get Map of all dictionary elements with key as dictionary short * name and value as the full name. * - * @param dictionaryElementType the dictionary element type + * @param dictionaryElementType + * the dictionary element type * @return Map of dictionary elements as key value pair */ public Map getDictionaryElementsByType(String dictionaryElementType) { diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java index 7447fbae..93374fe1 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/BlueprintParser.java @@ -27,7 +27,6 @@ import com.google.gson.Gson; import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonObject; -import com.google.gson.JsonParser; import java.util.Collections; import java.util.HashSet; @@ -88,7 +87,8 @@ public class BlueprintParser { } } String msName = theBiggestMicroServiceKey.toLowerCase().contains(HOLMES_PREFIX) ? HOLMES : TCA; - return Collections.singletonList(new MicroService(msName, "", "", "", "")); + return Collections + .singletonList(new MicroService(msName, "onap.policy.monitoring.cdap.tca.hi.lo.ap", "", "", "")); } String getName(Entry entry) { @@ -124,7 +124,7 @@ public class BlueprintParser { if (properties.has(POLICYID)) { JsonObject policyIdObj = properties.get(POLICYID).getAsJsonObject(); if (policyIdObj.has(POLICY_TYPEID)) { - return policyIdObj.get(POLICY_TYPEID).getAsString(); + return policyIdObj.get(POLICY_TYPEID).getAsString(); } } } diff --git a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java index b65a994a..65d5592a 100644 --- a/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java +++ b/src/main/java/org/onap/clamp/clds/sdc/controller/installer/CsarHandler.java @@ -42,6 +42,7 @@ import java.util.zip.ZipEntry; import java.util.zip.ZipFile; import org.apache.commons.io.IOUtils; +import org.codehaus.plexus.util.StringUtils; import org.onap.clamp.clds.exception.sdc.controller.CsarHandlerException; import org.onap.clamp.clds.exception.sdc.controller.SdcArtifactInstallerException; import org.onap.sdc.api.notification.IArtifactInfo; @@ -71,6 +72,8 @@ public class CsarHandler { public static final String RESOURCE_INSTANCE_NAME_PREFIX = "/Artifacts/Resources/"; public static final String RESOURCE_INSTANCE_NAME_SUFFIX = "/Deployment/"; public static final String POLICY_DEFINITION_NAME_SUFFIX = "Definitions/policies.yml"; + public static final String DATA_DEFINITION_NAME_SUFFIX = "Definitions/data.yml"; + public static final String DATA_DEFINITION_KEY = "data_types:"; public CsarHandler(INotificationData iNotif, String controller, String clampCsarPath) throws CsarHandlerException { this.sdcNotification = iNotif; @@ -159,6 +162,10 @@ public class CsarHandler { return csarFilePath; } + public String setFilePath(String newPath) { + return csarFilePath = newPath; + } + public synchronized ISdcCsarHelper getSdcCsarHelper() { return sdcCsarHelper; } @@ -171,12 +178,26 @@ public class CsarHandler { return mapOfBlueprints; } + /** + * Get the whole policy model Yaml. It combines the content of policies.yaml and data.yaml. + * @return The whole policy model yaml + * @throws IOException The IO Exception + */ public Optional getPolicyModelYaml() throws IOException { String result = null; try (ZipFile zipFile = new ZipFile(csarFilePath)) { ZipEntry entry = zipFile.getEntry(POLICY_DEFINITION_NAME_SUFFIX); if (entry != null) { - result = IOUtils.toString(zipFile.getInputStream(entry), StandardCharsets.UTF_8); + ZipEntry data = zipFile.getEntry(DATA_DEFINITION_NAME_SUFFIX); + if (data != null) { + String dataStr = IOUtils.toString(zipFile.getInputStream(data), StandardCharsets.UTF_8); + String dataStrWithoutHeader = dataStr.substring(dataStr.indexOf(DATA_DEFINITION_KEY)); + String policyStr = IOUtils.toString(zipFile.getInputStream(entry), StandardCharsets.UTF_8); + StringUtils.chomp(policyStr); + result = policyStr.concat(dataStrWithoutHeader); + } else { + result = IOUtils.toString(zipFile.getInputStream(entry), StandardCharsets.UTF_8); + } } else { logger.info("Policy model not found inside the CSAR file: " + csarFilePath); } diff --git a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java index 05d5c480..9bb9e01e 100644 --- a/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java +++ b/src/main/java/org/onap/clamp/loop/CsarInstallerImpl.java @@ -163,8 +163,9 @@ public class CsarInstallerImpl implements CsarInstaller { Policy.generatePolicyName(microService.getName(), csar.getSdcNotification().getServiceName(), csar.getSdcNotification().getServiceVersion(), blueprintArtifact.getResourceAttached().getResourceInstanceName(), - blueprintArtifact.getBlueprintArtifactName()), microService.getModelType(), - csar.getPolicyModelYaml().orElse(""), false, new HashSet<>(Arrays.asList(newLoop)), microService.getBlueprintName()); + blueprintArtifact.getBlueprintArtifactName()), + microService.getModelType(), csar.getPolicyModelYaml().orElse(""), false, + new HashSet<>(Arrays.asList(newLoop))); newSet.add(microServicePolicy); microService.setMappedNameJpa(microServicePolicy.getName()); diff --git a/src/main/java/org/onap/clamp/loop/Loop.java b/src/main/java/org/onap/clamp/loop/Loop.java index e62874a8..a24d3449 100644 --- a/src/main/java/org/onap/clamp/loop/Loop.java +++ b/src/main/java/org/onap/clamp/loop/Loop.java @@ -134,7 +134,7 @@ public class Loop implements Serializable { this.name = name; } - String getDcaeDeploymentId() { + public String getDcaeDeploymentId() { return dcaeDeploymentId; } @@ -142,7 +142,7 @@ public class Loop implements Serializable { this.dcaeDeploymentId = dcaeDeploymentId; } - String getDcaeDeploymentStatusUrl() { + public String getDcaeDeploymentStatusUrl() { return dcaeDeploymentStatusUrl; } @@ -150,7 +150,7 @@ public class Loop implements Serializable { this.dcaeDeploymentStatusUrl = dcaeDeploymentStatusUrl; } - String getSvgRepresentation() { + public String getSvgRepresentation() { return svgRepresentation; } @@ -158,7 +158,7 @@ public class Loop implements Serializable { this.svgRepresentation = svgRepresentation; } - String getBlueprint() { + public String getBlueprint() { return blueprint; } @@ -166,7 +166,7 @@ public class Loop implements Serializable { this.blueprint = blueprint; } - LoopState getLastComputedState() { + public LoopState getLastComputedState() { return lastComputedState; } @@ -174,7 +174,7 @@ public class Loop implements Serializable { this.lastComputedState = lastComputedState; } - Set getOperationalPolicies() { + public Set getOperationalPolicies() { return operationalPolicies; } @@ -182,7 +182,7 @@ public class Loop implements Serializable { this.operationalPolicies = operationalPolicies; } - Set getMicroServicePolicies() { + public Set getMicroServicePolicies() { return microServicePolicies; } @@ -190,7 +190,7 @@ public class Loop implements Serializable { this.microServicePolicies = microServicePolicies; } - JsonObject getGlobalPropertiesJson() { + public JsonObject getGlobalPropertiesJson() { return globalPropertiesJson; } @@ -198,7 +198,7 @@ public class Loop implements Serializable { this.globalPropertiesJson = globalPropertiesJson; } - Set getLoopLogs() { + public Set getLoopLogs() { return loopLogs; } @@ -221,7 +221,7 @@ public class Loop implements Serializable { log.setLoop(this); } - String getDcaeBlueprintId() { + public String getDcaeBlueprintId() { return dcaeBlueprintId; } @@ -229,7 +229,7 @@ public class Loop implements Serializable { this.dcaeBlueprintId = dcaeBlueprintId; } - JsonObject getModelPropertiesJson() { + public JsonObject getModelPropertiesJson() { return modelPropertiesJson; } diff --git a/src/main/java/org/onap/clamp/loop/LoopController.java b/src/main/java/org/onap/clamp/loop/LoopController.java index a02fa933..b862780d 100644 --- a/src/main/java/org/onap/clamp/loop/LoopController.java +++ b/src/main/java/org/onap/clamp/loop/LoopController.java @@ -24,7 +24,6 @@ package org.onap.clamp.loop; import com.google.gson.JsonArray; -import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; @@ -42,9 +41,9 @@ public class LoopController { private final LoopService loopService; private static final Type OPERATIONAL_POLICY_TYPE = new TypeToken>() { - }.getType(); + }.getType(); private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken>() { - }.getType(); + }.getType(); @Autowired public LoopController(LoopService loopService) { @@ -61,32 +60,41 @@ public class LoopController { /** * Update the Operational Policy properties. - * @param loopName The loop name - * @param operationalPoliciesJson The new Operational Policy properties + * + * @param loopName + * The loop name + * @param operationalPoliciesJson + * The new Operational Policy properties * @return The updated loop */ public Loop updateOperationalPolicies(String loopName, JsonArray operationalPoliciesJson) { - List operationalPolicies = JsonUtils.GSON - .fromJson(operationalPoliciesJson, OPERATIONAL_POLICY_TYPE); + List operationalPolicies = JsonUtils.GSON.fromJson(operationalPoliciesJson, + OPERATIONAL_POLICY_TYPE); return loopService.updateAndSaveOperationalPolicies(loopName, operationalPolicies); } /** * Update the whole array of MicroService policies properties - * @param loopName The loop name - * @param microServicePoliciesJson The array of all MicroService policies properties + * + * @param loopName + * The loop name + * @param microServicePoliciesJson + * The array of all MicroService policies properties * @return The updated loop */ public Loop updateMicroservicePolicies(String loopName, JsonArray microServicePoliciesJson) { - List microservicePolicies = JsonUtils.GSON - .fromJson(microServicePoliciesJson, MICROSERVICE_POLICY_TYPE); + List microservicePolicies = JsonUtils.GSON.fromJson(microServicePoliciesJson, + MICROSERVICE_POLICY_TYPE); return loopService.updateAndSaveMicroservicePolicies(loopName, microservicePolicies); } /** * Update the global properties - * @param loopName The loop name - * @param globalProperties The updated global properties + * + * @param loopName + * The loop name + * @param globalProperties + * The updated global properties * @return The updated loop */ public Loop updateGlobalPropertiesJson(String loopName, JsonObject globalProperties) { @@ -95,8 +103,11 @@ public class LoopController { /** * Update one MicroService policy properties - * @param loopName The loop name - * @param newMicroservicePolicy The new MicroService policy properties + * + * @param loopName + * The loop name + * @param newMicroservicePolicy + * The new MicroService policy properties * @return The updated MicroService policy */ public MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) { @@ -105,11 +116,12 @@ public class LoopController { /** * Get the SVG representation of the loop - * @param loopName The loop name + * + * @param loopName + * The loop name * @return The SVG representation */ public String getSVGRepresentation(String loopName) { - return loopService.getClosedLoopModelSVG(loopName); - + return loopService.getLoop(loopName).getSvgRepresentation(); } } diff --git a/src/main/java/org/onap/clamp/loop/LoopOperation.java b/src/main/java/org/onap/clamp/loop/LoopOperation.java index 7def783b..5b55ab0d 100644 --- a/src/main/java/org/onap/clamp/loop/LoopOperation.java +++ b/src/main/java/org/onap/clamp/loop/LoopOperation.java @@ -45,7 +45,6 @@ import org.onap.clamp.clds.config.ClampProperties; import org.onap.clamp.clds.util.LoggingUtils; import org.onap.clamp.clds.util.ONAPLogConstants; import org.onap.clamp.exception.OperationException; -import org.onap.clamp.policy.PolicyOperation; import org.onap.clamp.util.HttpConnectionManager; import org.slf4j.event.Level; import org.springframework.beans.factory.annotation.Autowired; @@ -59,30 +58,30 @@ import org.yaml.snakeyaml.Yaml; @Component public class LoopOperation { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class); - protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger(); + protected static final EELFLogger logger = EELFManager.getInstance().getLogger(LoopOperation.class); + protected static final EELFLogger auditLogger = EELFManager.getInstance().getMetricsLogger(); private final DcaeDispatcherServices dcaeDispatcherServices; private final LoopService loopService; private LoggingUtils util = new LoggingUtils(logger); - private PolicyOperation policyOp; @Autowired private HttpServletRequest request; @Autowired - public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices, - ClampProperties refProp, HttpConnectionManager httpConnectionManager, PolicyOperation policyOp) { + public LoopOperation(LoopService loopService, DcaeDispatcherServices dcaeDispatcherServices, + ClampProperties refProp, HttpConnectionManager httpConnectionManager) { this.loopService = loopService; this.dcaeDispatcherServices = dcaeDispatcherServices; - this.policyOp = policyOp; } /** * Deploy the closed loop. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ public Loop deployLoop(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "CldsService: Deploy model"); @@ -98,10 +97,9 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Deploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Deploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deployed only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } @@ -118,25 +116,27 @@ public class LoopOperation { Map yamlMap = yaml.load(loop.getBlueprint()); JsonObject bluePrint = wrapSnakeObject(yamlMap).getAsJsonObject(); - loop.setDcaeDeploymentStatusUrl(dcaeDispatcherServices.createNewDeployment(deploymentId, loop.getDcaeBlueprintId(), bluePrint)); + loop.setDcaeDeploymentStatusUrl( + dcaeDispatcherServices.createNewDeployment(deploymentId, loop.getDcaeBlueprintId(), bluePrint)); loop.setLastComputedState(LoopState.DEPLOYED); // save the updated loop - loopService.saveOrUpdateLoop (loop); + loopService.saveOrUpdateLoop(loop); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deploy model completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Un deploy closed loop. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop */ - public Loop unDeployLoop(String loopName) throws OperationException { + public Loop unDeployLoop(String loopName) throws OperationException { util.entering(request, "LoopOperation: Undeploy the closed loop"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -146,14 +146,13 @@ public class LoopOperation { util.exiting(HttpStatus.INTERNAL_SERVER_ERROR.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); - } + } // verify the current closed loop state if (loop.getLastComputedState() != LoopState.DEPLOYED) { - String msg = "Unploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Unploy loop exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be undeployed only when it is in DEPLOYED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } @@ -165,7 +164,7 @@ public class LoopOperation { loop.setLastComputedState(LoopState.SUBMITTED); // save the updated loop - loopService.saveOrUpdateLoop (loop); + loopService.saveOrUpdateLoop(loop); // audit log LoggingUtils.setTimeContext(startTime, new Date()); @@ -175,14 +174,14 @@ public class LoopOperation { } private JsonElement wrapSnakeObject(Object o) { - //NULL => JsonNull + // NULL => JsonNull if (o == null) return JsonNull.INSTANCE; // Collection => JsonArray if (o instanceof Collection) { JsonArray array = new JsonArray(); - for (Object childObj : (Collection)o) + for (Object childObj : (Collection) o) array.add(wrapSnakeObject(childObj)); return array; } @@ -192,14 +191,14 @@ public class LoopOperation { JsonArray array = new JsonArray(); int length = Array.getLength(array); - for (int i=0; i JsonObject if (o instanceof Map) { - Map map = (Map)o; + Map map = (Map) o; JsonObject jsonObject = new JsonObject(); for (final Map.Entry entry : map.entrySet()) { @@ -217,12 +216,15 @@ public class LoopOperation { /** * Submit the Ms policies. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws IOException IO exception - * @throws Exceptions during the operation + * @throws IOException + * IO exception + * @throws Exceptions + * during the operation */ - public Loop submitMsPolicies (String loopName) throws OperationException, IOException { + public Loop submitMsPolicies(String loopName) throws OperationException, IOException { util.entering(request, "LoopOperation: delete microservice policies"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -236,33 +238,34 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED && loop.getLastComputedState() != LoopState.DESIGN) { - String msg = "Submit MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Submit MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to create the ms services - policyOp.createMsPolicy(loop.getMicroServicePolicies()); + // policyOp.createMsPolicy(loop.getMicroServicePolicies()); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of MS policies completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } - /** * Delete the Ms policies. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws IOException IO exception - * @throws Exceptions during the operation + * @throws IOException + * IO exception + * @throws Exceptions + * during the operation */ - public Loop deleteMsPolicies (Exchange camelExchange, String loopName) throws OperationException, IOException { + public Loop deleteMsPolicies(Exchange camelExchange, String loopName) throws OperationException, IOException { util.entering(request, "LoopOperation: delete microservice policies"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -276,31 +279,32 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to create the ms services - policyOp.deleteMsPolicy(loop.getMicroServicePolicies()); + // policyOp.deleteMsPolicy(loop.getMicroServicePolicies()); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of MS policies completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Delete the operational policy. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ - public Loop deleteOpPolicy (Exchange camelExchange, String loopName) throws OperationException { + public Loop deleteOpPolicy(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "LoopOperation: delete guard policy"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -314,31 +318,32 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to delete operational policy - //client.deleteOpPolicy(); + // client.deleteOpPolicy(); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of Guard policy completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } /** * Delete the Guard policy. * - * @param loopName the loop name + * @param loopName + * the loop name * @return the updated loop - * @throws Exceptions during the operation + * @throws Exceptions + * during the operation */ - public Loop deleteGuardPolicy (Exchange camelExchange, String loopName) throws OperationException { + public Loop deleteGuardPolicy(Exchange camelExchange, String loopName) throws OperationException { util.entering(request, "LoopOperation: delete operational policy"); Date startTime = new Date(); Loop loop = loopService.getLoop(loopName); @@ -352,20 +357,19 @@ public class LoopOperation { // verify the current closed loop state if (loop.getLastComputedState() != LoopState.SUBMITTED) { - String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + String msg = "Delete MS policies exception: This closed loop is in state:" + loop.getLastComputedState() + ". It could be deleted only when it is in SUBMITTED state."; - util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, - ONAPLogConstants.ResponseStatus.ERROR); + util.exiting(HttpStatus.CONFLICT.toString(), msg, Level.INFO, ONAPLogConstants.ResponseStatus.ERROR); throw new OperationException(msg); } // Establish the api call to Policy to delete Guard policy - //client.deleteOpPolicy(); + // client.deleteOpPolicy(); // audit log LoggingUtils.setTimeContext(startTime, new Date()); auditLogger.info("Deletion of operational policy completed"); util.exiting(HttpStatus.OK.toString(), "Successful", Level.INFO, ONAPLogConstants.ResponseStatus.COMPLETED); - return loop; + return loop; } } diff --git a/src/main/java/org/onap/clamp/loop/LoopService.java b/src/main/java/org/onap/clamp/loop/LoopService.java index 34e1b4be..8d61b877 100644 --- a/src/main/java/org/onap/clamp/loop/LoopService.java +++ b/src/main/java/org/onap/clamp/loop/LoopService.java @@ -23,20 +23,22 @@ package org.onap.clamp.loop; +import com.google.gson.JsonObject; + import java.util.List; import java.util.Set; -import com.google.gson.JsonObject; - import javax.persistence.EntityNotFoundException; import org.onap.clamp.policy.microservice.MicroServicePolicy; import org.onap.clamp.policy.microservice.MicroservicePolicyService; import org.onap.clamp.policy.operational.OperationalPolicy; import org.onap.clamp.policy.operational.OperationalPolicyService; +import org.springframework.stereotype.Component; import org.springframework.stereotype.Service; @Service +@Component public class LoopService { private final LoopsRepository loopsRepository; @@ -46,15 +48,14 @@ public class LoopService { /** * Constructor. */ - public LoopService(LoopsRepository loopsRepository, - MicroservicePolicyService microservicePolicyService, + public LoopService(LoopsRepository loopsRepository, MicroservicePolicyService microservicePolicyService, OperationalPolicyService operationalPolicyService) { this.loopsRepository = loopsRepository; this.microservicePolicyService = microservicePolicyService; this.operationalPolicyService = operationalPolicyService; } - public Loop saveOrUpdateLoop(Loop loop) { + Loop saveOrUpdateLoop(Loop loop) { return loopsRepository.save(loop); } @@ -63,61 +64,36 @@ public class LoopService { } public Loop getLoop(String loopName) { - return loopsRepository - .findById(loopName) - .orElse(null); - } - - String getClosedLoopModelSVG(String loopName) { - Loop closedLoopByName = findClosedLoopByName(loopName); - return closedLoopByName.getSvgRepresentation(); + return loopsRepository.findById(loopName).orElse(null); } Loop updateAndSaveOperationalPolicies(String loopName, List newOperationalPolicies) { Loop loop = findClosedLoopByName(loopName); - updateOperationalPolicies(loop, newOperationalPolicies); + Set newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies); + loop.setOperationalPolicies(newPolicies); return loopsRepository.save(loop); } Loop updateAndSaveMicroservicePolicies(String loopName, List newMicroservicePolicies) { Loop loop = findClosedLoopByName(loopName); - updateMicroservicePolicies(loop, newMicroservicePolicies); + Set newPolicies = microservicePolicyService.updatePolicies(loop, newMicroservicePolicies); + loop.setMicroServicePolicies(newPolicies); return loopsRepository.save(loop); } Loop updateAndSaveGlobalPropertiesJson(String loopName, JsonObject newGlobalPropertiesJson) { Loop loop = findClosedLoopByName(loopName); - updateGlobalPropertiesJson(loop, newGlobalPropertiesJson); + loop.setGlobalPropertiesJson(newGlobalPropertiesJson); return loopsRepository.save(loop); } MicroServicePolicy updateMicroservicePolicy(String loopName, MicroServicePolicy newMicroservicePolicy) { Loop loop = findClosedLoopByName(loopName); - MicroServicePolicy newPolicies = microservicePolicyService - .getAndUpdateMicroServicePolicy(loop, newMicroservicePolicy); + MicroServicePolicy newPolicies = microservicePolicyService.getAndUpdateMicroServicePolicy(loop, + newMicroservicePolicy); return newPolicies; } - private Loop updateOperationalPolicies(Loop loop, List newOperationalPolicies) { - Set newPolicies = operationalPolicyService - .updatePolicies(loop, newOperationalPolicies); - - loop.setOperationalPolicies(newPolicies); - return loop; - } - - private Loop updateMicroservicePolicies(Loop loop, List newMicroservicePolicies) { - Set newPolicies = microservicePolicyService - .updatePolicies(loop, newMicroservicePolicies); - loop.setMicroServicePolicies(newPolicies); - return loop; - } - - private Loop updateGlobalPropertiesJson(Loop loop, JsonObject newGlobalPropertiesJson) { - loop.setGlobalPropertiesJson(newGlobalPropertiesJson); - return loop; - } - private Loop findClosedLoopByName(String loopName) { return loopsRepository.findById(loopName) .orElseThrow(() -> new EntityNotFoundException("Couldn't find closed loop named: " + loopName)); diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLog.java b/src/main/java/org/onap/clamp/loop/log/LoopLog.java index 0c51c0c1..3edb2ee5 100644 --- a/src/main/java/org/onap/clamp/loop/log/LoopLog.java +++ b/src/main/java/org/onap/clamp/loop/log/LoopLog.java @@ -40,6 +40,7 @@ import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; + import org.onap.clamp.loop.Loop; /** @@ -79,6 +80,15 @@ public class LoopLog implements Serializable { @Column(name = "log_instant", nullable = false) private Instant logInstant = Instant.now().truncatedTo(ChronoUnit.SECONDS); + public LoopLog() { + } + + public LoopLog(String message, LogType logType, Loop loop) { + this.message = message; + this.logType = logType; + this.loop = loop; + } + public Long getId() { return id; } diff --git a/src/main/java/org/onap/clamp/loop/log/LoopLogService.java b/src/main/java/org/onap/clamp/loop/log/LoopLogService.java new file mode 100644 index 00000000..b593b41e --- /dev/null +++ b/src/main/java/org/onap/clamp/loop/log/LoopLogService.java @@ -0,0 +1,43 @@ +/*- + * ============LICENSE_START======================================================= + * ONAP CLAMP + * ================================================================================ + * Copyright (C) 2019 Nokia 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.clamp.loop.log; + +import org.onap.clamp.loop.Loop; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class LoopLogService { + + private final LoopLogRepository repository; + + @Autowired + public LoopLogService(LoopLogRepository repository) { + this.repository = repository; + } + + public void addLog(String message, String logType, Loop loop) { + repository.save(new LoopLog(message, LogType.valueOf(logType), loop)); + } +} diff --git a/src/main/java/org/onap/clamp/policy/Policy.java b/src/main/java/org/onap/clamp/policy/Policy.java index 683881bf..f4efab0d 100644 --- a/src/main/java/org/onap/clamp/policy/Policy.java +++ b/src/main/java/org/onap/clamp/policy/Policy.java @@ -31,13 +31,21 @@ public interface Policy { JsonObject getJsonRepresentation(); + String createPolicyPayload(); + /** * Generate the policy name. - * @param policyType The policy type - * @param serviceName The service name - * @param serviceVersion The service version - * @param resourceName The resource name - * @param blueprintFilename The blueprint file name + * + * @param policyType + * The policy type + * @param serviceName + * The service name + * @param serviceVersion + * The service version + * @param resourceName + * The resource name + * @param blueprintFilename + * The blueprint file name * @return The generated policy name */ static String generatePolicyName(String policyType, String serviceName, String serviceVersion, String resourceName, diff --git a/src/main/java/org/onap/clamp/policy/PolicyOperation.java b/src/main/java/org/onap/clamp/policy/PolicyOperation.java deleted file mode 100644 index edce8ff5..00000000 --- a/src/main/java/org/onap/clamp/policy/PolicyOperation.java +++ /dev/null @@ -1,131 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * ONAP CLAMP - * ================================================================================ - * Copyright (C) 2019 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.clamp.policy; - -import java.io.IOException; -import java.util.Set; - -import org.onap.clamp.clds.config.ClampProperties; -import org.onap.clamp.policy.microservice.MicroServicePolicy; -import org.onap.clamp.util.HttpConnectionManager; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import com.att.eelf.configuration.EELFLogger; -import com.att.eelf.configuration.EELFManager; -import com.google.gson.JsonArray; -import com.google.gson.JsonObject; - -@Component -public class PolicyOperation { - protected static final EELFLogger logger = EELFManager.getInstance().getLogger(PolicyOperation.class); - protected static final EELFLogger metricsLogger = EELFManager.getInstance().getMetricsLogger(); - public static final String POLICY_MSTYPE_PROPERTY_NAME = "policy.ms.type"; - public static final String POLICY_ONAPNAME_PROPERTY_NAME = "policy.onap.name"; - public static final String POLICY_BASENAME_PREFIX_PROPERTY_NAME = "policy.base.policyNamePrefix"; - public static final String POLICY_OP_NAME_PREFIX_PROPERTY_NAME = "policy.op.policyNamePrefix"; - public static final String POLICY_MS_NAME_PREFIX_PROPERTY_NAME = "policy.ms.policyNamePrefix"; - public static final String POLICY_OP_TYPE_PROPERTY_NAME = "policy.op.type"; - public static final String POLICY_GUARD_SUFFIX = "_Guard"; - public static final String POLICY_URL_PROPERTY_NAME = "clamp.config.policy.url"; - public static final String POLICY_URL_SUFFIX = "/versions/1.0.0/policies"; - public static final String POLICY_USER_NAME = "clamp.config.policy.userName"; - public static final String POLICY_PASSWORD = "clamp.config.policy.password"; - - public static final String TOSCA_DEF_VERSION = "tosca_definitions_version"; - public static final String TOSCA_DEF_VERSION_VALUE = "tosca_simple_yaml_1_0_0"; - public static final String TEMPLATE = "topology_template"; - public static final String POLICIES = "policies"; - public static final String MS_TYPE = "type"; - public static final String MS_VERSION = "version"; - public static final String MS_VERSION_VALUE = "1.0.0"; - public static final String MS_METADATA = "metadata"; - public static final String MS_POLICY_ID = "policy_id"; - public static final String MS_PROPERTIES = "properties"; - public static final String MS_policy = "tca_policy"; - - private final ClampProperties refProp; - private final HttpConnectionManager httpConnectionManager; - - @Autowired - public PolicyOperation(ClampProperties refProp, HttpConnectionManager httpConnectionManager) { - this.refProp = refProp; - this.httpConnectionManager = httpConnectionManager; - } - - public void createMsPolicy(Set policyList) throws IOException { - // Get policy first? if exist delete??? - // push pdp group - for (MicroServicePolicy msPolicy:policyList) { - JsonObject payload = createMsPolicyPayload(msPolicy); - String policyType = msPolicy.getModelType(); - String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX; - String userName = refProp.getStringValue(POLICY_USER_NAME); - String encodedPass = refProp.getStringValue(POLICY_PASSWORD); - httpConnectionManager.doHttpRequest(url, "POST", payload.toString(), "application/json", "POLICY", userName, encodedPass); - } - } - - public void deleteMsPolicy(Set policyList) throws IOException { - for (MicroServicePolicy msPolicy:policyList) { - String policyType = msPolicy.getModelType(); - String url = refProp.getStringValue(POLICY_URL_PROPERTY_NAME) + policyType + POLICY_URL_SUFFIX + "/" + msPolicy.getName(); - String userName = refProp.getStringValue(POLICY_USER_NAME); - String encodedPass = refProp.getStringValue(POLICY_PASSWORD); - httpConnectionManager.doHttpRequest(url, "POST", null, null, "POLICY", userName, encodedPass); - } - } - - private JsonObject createMsPolicyPayload(MicroServicePolicy microService) { - JsonObject policyConfig = new JsonObject(); - policyConfig.add(MS_policy, microService.getProperties()); - - JsonObject properties = new JsonObject(); - properties.add(MS_policy, policyConfig); - - JsonObject msPolicy = new JsonObject(); - msPolicy.addProperty(MS_TYPE, microService.getModelType()); - msPolicy.addProperty(MS_VERSION, MS_VERSION_VALUE); - JsonObject metaData = new JsonObject(); - metaData.addProperty(MS_POLICY_ID, microService.getName()); - msPolicy.add(MS_METADATA, metaData); - msPolicy.add(MS_PROPERTIES, properties); - - JsonObject msPolicyWithName = new JsonObject(); - msPolicyWithName.add(microService.getName(), msPolicy); - - JsonArray policyArray = new JsonArray(); - policyArray.add(msPolicyWithName); - - JsonObject template = new JsonObject(); - template.add(POLICIES, policyArray); - - JsonObject configPolicy = new JsonObject(); - configPolicy.addProperty(TOSCA_DEF_VERSION, TOSCA_DEF_VERSION_VALUE); - configPolicy.add(TEMPLATE, template); - - return configPolicy; - } - -} diff --git a/src/main/java/org/onap/clamp/policy/PolicyService.java b/src/main/java/org/onap/clamp/policy/PolicyService.java index 05785c04..ae15f86d 100644 --- a/src/main/java/org/onap/clamp/policy/PolicyService.java +++ b/src/main/java/org/onap/clamp/policy/PolicyService.java @@ -25,12 +25,12 @@ package org.onap.clamp.policy; import java.util.List; import java.util.Set; + import org.onap.clamp.loop.Loop; public interface PolicyService { - Set updatePolicies(Loop loop, - List newMicroservicePolicies); + Set updatePolicies(Loop loop, List newPolicies); boolean isExisting(String policyName); } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java index c2c60c9c..332b20a0 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroServicePolicy.java @@ -23,15 +23,20 @@ package org.onap.clamp.policy.microservice; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; import java.io.Serializable; import java.util.HashSet; +import java.util.Map; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; +import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.ManyToMany; import javax.persistence.Table; @@ -39,11 +44,13 @@ import javax.persistence.Table; import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; +import org.json.JSONObject; import org.onap.clamp.clds.tosca.ToscaYamlToJsonConvertor; import org.onap.clamp.clds.util.JsonUtils; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; import org.onap.clamp.policy.Policy; +import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "micro_service_policies") @@ -63,10 +70,6 @@ public class MicroServicePolicy implements Serializable, Policy { @Column(nullable = false, name = "model_type") private String modelType; - @Expose - @Column(nullable = false, name = "blueprint_name") - private String blueprintName; - @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "properties") @@ -84,7 +87,7 @@ public class MicroServicePolicy implements Serializable, Policy { @Column(columnDefinition = "json", name = "json_representation", nullable = false) private JsonObject jsonRepresentation; - @ManyToMany(mappedBy = "microServicePolicies") + @ManyToMany(mappedBy = "microServicePolicies", fetch = FetchType.EAGER) private Set usedByLoops = new HashSet<>(); public MicroServicePolicy() { @@ -92,15 +95,22 @@ public class MicroServicePolicy implements Serializable, Policy { } /** - * The constructor. - * @param name The name of the MicroService - * @param type The model type of the MicroService - * @param blueprintName The name in the blueprint - * @param policyTosca The policy Tosca of the MicroService - * @param shared The flag indicate whether the MicroService is shared - * @param usedByLoops The list of loops that uses this MicroService + * The constructor that create the json representation from the policyTosca + * using the ToscaYamlToJsonConvertor. + * + * @param name + * The name of the MicroService + * @param type + * The model type of the MicroService + * @param policyTosca + * The policy Tosca of the MicroService + * @param shared + * The flag indicate whether the MicroService is shared + * @param usedByLoops + * The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, Set usedByLoops, String blueprintName) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, + Set usedByLoops) { this.name = name; this.modelType = modelType; this.policyTosca = policyTosca; @@ -108,28 +118,39 @@ public class MicroServicePolicy implements Serializable, Policy { this.jsonRepresentation = JsonUtils.GSON_JPA_MODEL .fromJson(new ToscaYamlToJsonConvertor(null).parseToscaYaml(policyTosca), JsonObject.class); this.usedByLoops = usedByLoops; - this.blueprintName = blueprintName; + } + + private JsonObject createJsonFromPolicyTosca() { + Map map = new Yaml().load(this.getPolicyTosca()); + JSONObject jsonObject = new JSONObject(map); + return new Gson().fromJson(jsonObject.toString(), JsonObject.class); } /** - * The constructor. - * @param name The name of the MicroService - * @param type The model type of the MicroService - * @param blueprintName The name in the blueprint - * @param policyTosca The policy Tosca of the MicroService - * @param shared The flag indicate whether the MicroService is shared - * @param jsonRepresentation The UI representation in json format - * @param usedByLoops The list of loops that uses this MicroService + * The constructor that does not make use of ToscaYamlToJsonConvertor but take + * the jsonRepresentation instead. + * + * @param name + * The name of the MicroService + * @param type + * The model type of the MicroService + * @param policyTosca + * The policy Tosca of the MicroService + * @param shared + * The flag indicate whether the MicroService is shared + * @param jsonRepresentation + * The UI representation in json format + * @param usedByLoops + * The list of loops that uses this MicroService */ - public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, JsonObject jsonRepresentation, - Set usedByLoops, String blueprintName) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, + JsonObject jsonRepresentation, Set usedByLoops) { this.name = name; this.modelType = modelType; this.policyTosca = policyTosca; this.shared = shared; this.usedByLoops = usedByLoops; this.jsonRepresentation = jsonRepresentation; - this.blueprintName = blueprintName; } @Override @@ -141,8 +162,8 @@ public class MicroServicePolicy implements Serializable, Policy { return modelType; } - public String getBlueprintName() { - return blueprintName; + void setModelType(String modelType) { + this.modelType = modelType; } public JsonObject getProperties() { @@ -157,7 +178,7 @@ public class MicroServicePolicy implements Serializable, Policy { return shared; } - public void setShared(Boolean shared) { + void setShared(Boolean shared) { this.shared = shared; } @@ -165,7 +186,7 @@ public class MicroServicePolicy implements Serializable, Policy { return policyTosca; } - public void setPolicyTosca(String policyTosca) { + void setPolicyTosca(String policyTosca) { this.policyTosca = policyTosca; } @@ -174,7 +195,7 @@ public class MicroServicePolicy implements Serializable, Policy { return jsonRepresentation; } - public void setJsonRepresentation(JsonObject jsonRepresentation) { + void setJsonRepresentation(JsonObject jsonRepresentation) { this.jsonRepresentation = jsonRepresentation; } @@ -182,7 +203,7 @@ public class MicroServicePolicy implements Serializable, Policy { return usedByLoops; } - public void setUsedByLoops(Set usedBy) { + void setUsedByLoops(Set usedBy) { this.usedByLoops = usedBy; } @@ -216,4 +237,41 @@ public class MicroServicePolicy implements Serializable, Policy { return true; } + private String getMicroServicePropertyNameFromTosca(JsonObject object) { + return object.getAsJsonObject("policy_types").getAsJsonObject(this.modelType).getAsJsonObject("properties") + .keySet().toArray(new String[1])[0]; + } + + @Override + public String createPolicyPayload() { + JsonObject toscaJson = createJsonFromPolicyTosca(); + + JsonObject policyPayloadResult = new JsonObject(); + + policyPayloadResult.add("tosca_definitions_version", toscaJson.get("tosca_definitions_version")); + + JsonObject topologyTemplateNode = new JsonObject(); + policyPayloadResult.add("topology_template", topologyTemplateNode); + + JsonArray policiesArray = new JsonArray(); + topologyTemplateNode.add("policies", policiesArray); + + JsonObject thisPolicy = new JsonObject(); + policiesArray.add(thisPolicy); + + JsonObject policyDetails = new JsonObject(); + thisPolicy.add(this.getName(), policyDetails); + policyDetails.addProperty("type", this.getModelType()); + policyDetails.addProperty("version", "1.0.0"); + + JsonObject policyMetadata = new JsonObject(); + policyDetails.add("metadata", policyMetadata); + policyMetadata.addProperty("policy-id", this.getName()); + + JsonObject policyProperties = new JsonObject(); + policyDetails.add("properties", policyProperties); + policyProperties.add(this.getMicroServicePropertyNameFromTosca(toscaJson), this.getProperties()); + return new GsonBuilder().setPrettyPrinting().create().toJson(policyPayloadResult); + } + } diff --git a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java index f95ad3b4..59ddaa00 100644 --- a/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java +++ b/src/main/java/org/onap/clamp/policy/microservice/MicroservicePolicyService.java @@ -33,7 +33,6 @@ import org.onap.clamp.loop.Loop; import org.onap.clamp.policy.PolicyService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; @Service public class MicroservicePolicyService implements PolicyService { @@ -46,7 +45,6 @@ public class MicroservicePolicyService implements PolicyService updatePolicies(Loop loop, List newMicroservicePolicies) { return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy)) .collect(Collectors.toSet()); @@ -59,21 +57,24 @@ public class MicroservicePolicyService implements PolicyService updateMicroservicePolicyProperties(p, policy, loop)) - .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), policy.getShared(), - policy.getJsonRepresentation(), Sets.newHashSet(loop), policy.getBlueprintName())); + return repository + .save(repository.findById(policy.getName()).map(p -> updateMicroservicePolicyProperties(p, policy, loop)) + .orElse(new MicroServicePolicy(policy.getName(), policy.getModelType(), policy.getPolicyTosca(), + policy.getShared(), policy.getJsonRepresentation(), Sets.newHashSet(loop)))); } private MicroServicePolicy updateMicroservicePolicyProperties(MicroServicePolicy oldPolicy, MicroServicePolicy newPolicy, Loop loop) { oldPolicy.setProperties(newPolicy.getProperties()); - if (oldPolicy.getUsedByLoops().contains(loop)) { + if (!oldPolicy.getUsedByLoops().contains(loop)) { oldPolicy.getUsedByLoops().add(loop); } return oldPolicy; diff --git a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java index c1e075da..b6b591db 100644 --- a/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java +++ b/src/main/java/org/onap/clamp/policy/operational/OperationalPolicy.java @@ -23,24 +23,34 @@ package org.onap.clamp.policy.operational; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.annotations.Expose; + import java.io.Serializable; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; import javax.persistence.Column; -import javax.persistence.Convert; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.Table; + import org.hibernate.annotations.Type; import org.hibernate.annotations.TypeDef; import org.hibernate.annotations.TypeDefs; import org.onap.clamp.dao.model.jsontype.StringJsonUserType; import org.onap.clamp.loop.Loop; import org.onap.clamp.policy.Policy; +import org.yaml.snakeyaml.Yaml; @Entity @Table(name = "operational_policies") @@ -66,14 +76,18 @@ public class OperationalPolicy implements Serializable, Policy { private Loop loop; public OperationalPolicy() { - //Serialization + // Serialization } /** * The constructor. - * @param name The name of the operational policy - * @param loop The loop that uses this operational policy - * @param configurationsJson The operational policy property in the format of json + * + * @param name + * The name of the operational policy + * @param loop + * The loop that uses this operational policy + * @param configurationsJson + * The operational policy property in the format of json */ public OperationalPolicy(String name, Loop loop, JsonObject configurationsJson) { this.name = name; @@ -81,6 +95,7 @@ public class OperationalPolicy implements Serializable, Policy { this.configurationsJson = configurationsJson; } + @Override public String getName() { return name; } @@ -136,4 +151,48 @@ public class OperationalPolicy implements Serializable, Policy { return true; } + @Override + public String createPolicyPayload() { + JsonObject policyPayloadResult = new JsonObject(); + + policyPayloadResult.addProperty("tosca_definitions_version", "tosca_simple_yaml_1_0_0"); + + JsonObject topologyTemplateNode = new JsonObject(); + policyPayloadResult.add("topology_template", topologyTemplateNode); + + JsonArray policiesArray = new JsonArray(); + topologyTemplateNode.add("policies", policiesArray); + + JsonObject operationalPolicy = new JsonObject(); + policiesArray.add(operationalPolicy); + + JsonObject operationalPolicyDetails = new JsonObject(); + operationalPolicy.add(this.name, operationalPolicyDetails); + operationalPolicyDetails.addProperty("type", "onap.policies.controlloop.Operational"); + operationalPolicyDetails.addProperty("version", "1.0.0"); + + JsonObject metadata = new JsonObject(); + operationalPolicyDetails.add("metadata", metadata); + metadata.addProperty("policy-id", this.name); + + operationalPolicyDetails.add("properties", this.configurationsJson.get("operational_policy")); + + Gson gson = new GsonBuilder().create(); + Map jsonMap = gson.fromJson(gson.toJson(policyPayloadResult), Map.class); + return (new Yaml()).dump(jsonMap); + } + + public List createGuardPolicyPayloads() { + List result = new ArrayList<>(); + + JsonObject guard = new JsonObject(); + JsonElement guardsList = this.getConfigurationsJson().get("guard_policies"); + for (Entry guardElem : guardsList.getAsJsonObject().entrySet()) { + guard.addProperty("policy-id", guardElem.getKey()); + guard.add("contents", guardElem.getValue()); + result.add(new GsonBuilder().create().toJson(guard)); + } + return result; + } + } diff --git a/src/main/resources/META-INF/resources/designer/partials/portfolios/operational_policy_window.html b/src/main/resources/META-INF/resources/designer/partials/portfolios/operational_policy_window.html index cf9382bf..a53ad73d 100644 --- a/src/main/resources/META-INF/resources/designer/partials/portfolios/operational_policy_window.html +++ b/src/main/resources/META-INF/resources/designer/partials/portfolios/operational_policy_window.html @@ -110,7 +110,9 @@ label { + ng-options="policy for policy in policy_ids track by policy"> + +