diff options
Diffstat (limited to 'src/main')
24 files changed, 973 insertions, 573 deletions
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 8372e3f59..8e1c75bb4 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 5da26b19a..0cf68ea1b 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<CldsModelInstance> 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<CldsModelProp> getDeployedModelProperties() { List<CldsModelProp> 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<Map<String, Object>> 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<CldsToscaModel> 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<CldsToscaModel> 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<CldsDictionary> 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<CldsDictionaryItem> 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<String, String> 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 7447fbae1..93374fe11 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<String, JsonElement> 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 b65a994ac..65d5592a8 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<String> 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 05d5c480c..9bb9e01e7 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 e62874a8a..a24d3449f 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<OperationalPolicy> getOperationalPolicies() { + public Set<OperationalPolicy> getOperationalPolicies() { return operationalPolicies; } @@ -182,7 +182,7 @@ public class Loop implements Serializable { this.operationalPolicies = operationalPolicies; } - Set<MicroServicePolicy> getMicroServicePolicies() { + public Set<MicroServicePolicy> 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<LoopLog> getLoopLogs() { + public Set<LoopLog> 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 a02fa9333..b862780de 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<List<OperationalPolicy>>() { - }.getType(); + }.getType(); private static final Type MICROSERVICE_POLICY_TYPE = new TypeToken<List<MicroServicePolicy>>() { - }.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<OperationalPolicy> operationalPolicies = JsonUtils.GSON - .fromJson(operationalPoliciesJson, OPERATIONAL_POLICY_TYPE); + List<OperationalPolicy> 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<MicroServicePolicy> microservicePolicies = JsonUtils.GSON - .fromJson(microServicePoliciesJson, MICROSERVICE_POLICY_TYPE); + List<MicroServicePolicy> 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 7def783b5..5b55ab0de 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<String, Object> 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<length; i++) + for (int i = 0; i < length; i++) array.add(wrapSnakeObject(Array.get(array, i))); return array; } // Map => 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 34e1b4bef..8d61b877b 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<OperationalPolicy> newOperationalPolicies) { Loop loop = findClosedLoopByName(loopName); - updateOperationalPolicies(loop, newOperationalPolicies); + Set<OperationalPolicy> newPolicies = operationalPolicyService.updatePolicies(loop, newOperationalPolicies); + loop.setOperationalPolicies(newPolicies); return loopsRepository.save(loop); } Loop updateAndSaveMicroservicePolicies(String loopName, List<MicroServicePolicy> newMicroservicePolicies) { Loop loop = findClosedLoopByName(loopName); - updateMicroservicePolicies(loop, newMicroservicePolicies); + Set<MicroServicePolicy> 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<OperationalPolicy> newOperationalPolicies) { - Set<OperationalPolicy> newPolicies = operationalPolicyService - .updatePolicies(loop, newOperationalPolicies); - - loop.setOperationalPolicies(newPolicies); - return loop; - } - - private Loop updateMicroservicePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) { - Set<MicroServicePolicy> 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 0c51c0c1f..3edb2ee59 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 000000000..b593b41ed --- /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 683881bfa..f4efab0d7 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 edce8ff50..000000000 --- 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<MicroServicePolicy> 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<MicroServicePolicy> 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 05785c045..ae15f86da 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<T extends Policy> { - Set<T> updatePolicies(Loop loop, - List<T> newMicroservicePolicies); + Set<T> updatePolicies(Loop loop, List<T> 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 c2c60c9c0..332b20a07 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") @@ -64,10 +71,6 @@ public class MicroServicePolicy implements Serializable, Policy { private String modelType; @Expose - @Column(nullable = false, name = "blueprint_name") - private String blueprintName; - - @Expose @Type(type = "json") @Column(columnDefinition = "json", name = "properties") private JsonObject 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<Loop> 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<Loop> usedByLoops, String blueprintName) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, + Set<Loop> 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<String, Object> 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<Loop> usedByLoops, String blueprintName) { + public MicroServicePolicy(String name, String modelType, String policyTosca, Boolean shared, + JsonObject jsonRepresentation, Set<Loop> 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<Loop> usedBy) { + void setUsedByLoops(Set<Loop> 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 f95ad3b4e..59ddaa009 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<MicroServicePolicy> { @@ -46,7 +45,6 @@ public class MicroservicePolicyService implements PolicyService<MicroServicePoli } @Override - @Transactional public Set<MicroServicePolicy> updatePolicies(Loop loop, List<MicroServicePolicy> newMicroservicePolicies) { return newMicroservicePolicies.stream().map(policy -> getAndUpdateMicroServicePolicy(loop, policy)) .collect(Collectors.toSet()); @@ -59,21 +57,24 @@ public class MicroservicePolicyService implements PolicyService<MicroServicePoli /** * Get and update the MicroService policy properties. - * @param loop The loop - * @param policy The new MicroService policy + * + * @param loop + * The loop + * @param policy + * The new MicroService policy * @return The updated MicroService policy */ - @Transactional public MicroServicePolicy getAndUpdateMicroServicePolicy(Loop loop, MicroServicePolicy policy) { - return 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), 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 c1e075daa..b6b591db2 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<String> createGuardPolicyPayloads() { + List<String> result = new ArrayList<>(); + + JsonObject guard = new JsonObject(); + JsonElement guardsList = this.getConfigurationsJson().get("guard_policies"); + for (Entry<String, JsonElement> 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 cf9382bf8..a53ad73d5 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 { <select type="text" id="trigger_policy" name="trigger_policy" class="form-control" ng-model="null_dump" ng-init="initPolicySelect()" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> <label for="timeout" class="col-sm-3" @@ -127,6 +129,13 @@ label { checked="true" class="form-control"> </div> </div> + <div class="form-group clearfix row"> + <label class="col-sm-4 control-label" for="clname">ControlLoopName</label> + <div class="col-sm-8"> + <input type="text" class="form-control" name="controlLoopName" + readonly="readonly" id="clname" ng-model="clname"/> + </div> + </div> </div> </form> <div class="panel-heading" style="background-color: white;"> @@ -158,7 +167,8 @@ label { <label class="col-sm-4 control-label" for="recipe">Recipe</label> <div class="col-sm-8"> <select class="form-control" name="recipe" id="recipe" - enableFilter="true" ng-click="updateGuardRecipe($event)"> + enableFilter="true" ng-model="recipe" ng-click="updateGuardRecipe($event)"> + <option value="">-- choose an option --</option> <option value="Restart">Restart</option> <option value="Rebuild">Rebuild</option> <option value="Migrate">Migrate</option> @@ -191,7 +201,8 @@ label { <div class="form-group clearfix"> <label for="actor" class="col-sm-4 control-label"> Actor</label> <div class="col-sm-8"> - <select class="form-control" id="actor" name="actor"> + <select class="form-control" id="actor" name="actor" ng-click="updateGuardActor($event)" ng-model="actor"> + <option value="">-- choose an option --</option> <option value="APPC">APPC</option> <option value="SO">SO</option> <option value="VFC">VFC</option> @@ -212,7 +223,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="success" name="success" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> <div class="form-group clearfix"> @@ -221,7 +234,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="failure" name="failure" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> <div class="form-group clearfix"> @@ -230,7 +245,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="failure_timeout" name="failure_timeout" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> <div class="form-group clearfix"> @@ -239,7 +256,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="failure_retries" name="failure_retries" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> <div class="form-group clearfix"> @@ -248,7 +267,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="failure_exception" name="failure_exception" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> <div class="form-group clearfix"> @@ -257,7 +278,9 @@ label { <div class="col-sm-8"> <select class="form-control" id="failure_guard" name="failure_guard" ng-model="null_dump" - ng-options="policy for policy in policy_ids track by policy"></select> + ng-options="policy for policy in policy_ids track by policy"> + <option value="">-- choose an option --</option> + </select> </div> </div> </form> @@ -267,7 +290,8 @@ label { <label for="type" class="col-sm-4 control-label"> Target Type</label> <div class="col-sm-8"> - <select class="form-control" name="type" id="type"> + <select class="form-control" name="type" id="type" + ng-click="initTargetResourceId()" ng-model="type"> <option value="VFC">VFC</option> <option value="VM">VM</option> <option value="VNF">VNF</option> @@ -279,10 +303,55 @@ label { Target ResourceId</label> <div class="col-sm-8"> <select class="form-control" name="resourceId" id="resourceId" - enableFilter="true"> + enableFilter="true" ng-click="changeTargetResourceId()" + ng-model="resourceId"> + <option value=""></option> + <option value="Other:">Other:</option> </select> </div> </div> + <div id="metadata"> + <div class="form-group clearfix"> + <label for="modelInvariantId" class="col-sm-4 control-label"> + Model Invariant Id</label> + <div class="col-sm-8"> + <input class="form-control" name="modelInvariantId" + id="modelInvariantId" readonly /> + </div> + </div> + <div class="form-group clearfix"> + <label for="modelVersionId" class="col-sm-4 control-label"> + Model Version Id</label> + <div class="col-sm-8"> + <input class="form-control" name="modelVersionId" + id="modelVersionId" readonly /> + </div> + </div> + <div class="form-group clearfix"> + <label for="modelName" class="col-sm-4 control-label"> + Model Name</label> + <div class="col-sm-8"> + <input class="form-control" name="modelName" id="modelName" + readonly /> + </div> + </div> + <div class="form-group clearfix"> + <label for="modelVersion" class="col-sm-4 control-label"> + Model Version</label> + <div class="col-sm-8"> + <input class="form-control" name="modelVersion" + id="modelVersion" readonly /> + </div> + </div> + <div class="form-group clearfix"> + <label for="modelCustomizationId" class="col-sm-4 control-label"> + Model Customization Id</label> + <div class="col-sm-8"> + <input class="form-control" name="modelCustomizationId" + id="modelCustomizationId" readonly /> + </div> + </div> + </div> </form> <div class="form-group clearfix"> <label for="enableGuardPolicy" class="col-sm-4 control-label"> @@ -306,7 +375,7 @@ label { title="Guard policy associated" style="border: 2px dotted gray;"> <div class="form-group clearfix"> - <label class="col-sm-4 control-label" for="id">ID</label> + <label class="col-sm-4 control-label" for="id">Guard Policy ID</label> <div class="col-sm-8"> <input type="text" class="form-control" name="id" id="id" /> </div> @@ -315,7 +384,7 @@ label { <label class="col-sm-4 control-label" for="recipe">Recipe</label> <div class="col-sm-8"> <input type="text" class="form-control" name="recipe" - readonly="readonly" id="recipe" /> + readonly="readonly" id="recipe"/> </div> </div> <div class="form-group clearfix"> @@ -325,8 +394,13 @@ label { readonly="readonly" id="clname" ng-model="clname"/> </div> </div> - - + <div class="form-group clearfix"> + <label for="actor" class="col-sm-4 control-label">Actor</label> + <div class="col-sm-8"> + <input type="text" class="form-control" name="actor" + readonly="readonly" id="actor" /> + </div> + </div> <div class="form-group clearfix"> <label for="guardTargets" class="col-sm-4 control-label">Guard diff --git a/src/main/resources/META-INF/resources/designer/scripts/OperationalPolicyCtrl.js b/src/main/resources/META-INF/resources/designer/scripts/OperationalPolicyCtrl.js index 5a1ac538b..4e8855eb0 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/OperationalPolicyCtrl.js +++ b/src/main/resources/META-INF/resources/designer/scripts/OperationalPolicyCtrl.js @@ -37,7 +37,8 @@ app var allPolicies = {}; $scope.guardType = "GUARD_MIN_MAX"; $scope.number = 0; - $scope.clname=""; + $scope.clname = ""; + $scope.guard_ids = []; function getAllFormId() { return Array.from(document.getElementsByClassName("formId")); @@ -54,17 +55,7 @@ app } console.log("No active formId found !"); } - function initTargetResourceId() { - if (vf_Services !== null && vf_Services !== undefined) { - // Set all the Resource Invariant UUID in the target resource ID - // list (+Empty and other) - Object.keys(vf_Services["shared"]["byVf"]).forEach(function(key) { - - $("#targetResourceId").append($('<option></option>').val(key).html(key)); - }); - } - } function add_one_more() { console.log("add one more"); @@ -102,6 +93,7 @@ app $(".formId").not($("#formId" + count)).css("display", "none"); addCustListen(count); $("#formId" + count + " #id").val("new"); + $("#formId" + count + " #clname").val($scope.clname); return count; } function addCustListen(count) { @@ -150,10 +142,11 @@ app } function savePolicyLocally() { - var polForm = {} - polForm = serializeElement($("#operationalPolicyHeaderForm")); + var polForm = {}; + var clPolForm = {}; + clPolForm = serializeElement($("#operationalPolicyHeaderForm")); + allPolicies['guard_policies'] = {}; var policiesArray = [] - allPolicies['guard_policies'] = []; $.each($(".formId"), function() { var policyProperties = serializeElement($("#" + this.id + " .policyProperties")); @@ -161,9 +154,15 @@ app policiesArray.push(policyProperties); // Now get the Guard if ($("#" + this.id + " #enableGuardPolicy").is(':checked')) { - allPolicies['guard_policies'].push(serializeElement($("#" + this.id + " .guardProperties"))); + var guardPolicyBody = serializeElement($("#" + this.id + " .guardProperties")); + var guardPolicyId = guardPolicyBody['id']; + delete guardPolicyBody['id']; + + allPolicies['guard_policies'][guardPolicyId] = guardPolicyBody; + $scope.guard_ids.push(guardPolicyId); } }); + polForm['controlLoop'] = clPolForm; polForm['policies'] = policiesArray; allPolicies['operational_policy'] = polForm; } @@ -183,7 +182,7 @@ app // Set the header $.each($('#operationalPolicyHeaderForm').find('.form-control'), function() { - $(this).val(allPolicies['operational_policy'][this.id]); + $(this).val(allPolicies['operational_policy']['controlLoop'][this.id]); }); // Set the sub-policies $.each(allPolicies['operational_policy']['policies'], function(opPolicyElemIndex, opPolicyElemValue) { @@ -198,13 +197,14 @@ app $("#go_properties_tab" + formNum).text( allPolicies['operational_policy']['policies'][opPolicyElemIndex]['id']); // Check if there is a guard set for it - $.each(allPolicies['guard_policies'], function(guardElemIndex, guardElemValue) { + $.each(allPolicies['guard_policies'], function(guardElemId, guardElemValue) { if (guardElemValue.recipe === $($("#formId" + formNum + " #recipe")[0]).val()) { // Found one, set all guard prop $.each($('.guardProperties').find('.form-control'), function(guardPropElemIndex,guardPropElemValue) { + guardElemValue['id'] = guardElemId; $("#formId"+formNum+" .guardProperties").find("#"+guardPropElemValue.id).val( - allPolicies['guard_policies'][guardElemIndex][guardPropElemValue.id]); + guardElemValue[guardPropElemValue.id]); }); // And finally enable the flag $("#formId" + formNum + " #enableGuardPolicy").prop("checked", true); @@ -212,6 +212,107 @@ app }); }); } + + $scope.initTargetResourceId = function() { + + var recipe = $(event.target).val(); + + var type = $(event.target).val(); + + $("#modelName").val(""); + $("#modelInvariantId").val(""); + $("#modelVersionId").val(""); + $("#modelVersion").val(""); + $("#modelCustomizationId").val(""); + $('#resourceId').empty(); + $("#resourceId") + .append( + $('<option></option>').val("") + .html("")); + $("#resourceId").append( + $('<option></option>').val("Other:") + .html("Other:")); + if (type == "VM" || type == "" || type == "VNF" ) { + $("#metadata *").prop('disabled',true); + } + + var resourceVnf = getResourceDetailsProperty(); + if (type == "VNF" + && (null !== resourceVnf || undefined !== resourceVnf)) { + for ( var prop in resourceVnf) { + var name = resourceVnf[prop]["name"]; + $("#resourceId").append( + $('<option></option>') + .val(name).html(name)); + } + + } + var resourceVfc = getResourceDetailsVfcProperty(); + if (type == "VFC" + && (null !== resourceVfc || undefined !== resourceVfc)) { + if (recipe == 'VF Module Create' + || recipe == 'VF Module Delete') { + for ( var prop in resourceVfc) { + if (resourceVfc[prop]["isBase"] == false) { + var name = resourceVfc[prop]["name"]; + $("#resourceId").append( + $('<option></option>') + .val(name) + .html(name)); + } + } + } + else + { + for ( var prop in resourceVfc) { + var name = resourceVfc[prop]["name"]; + $("#resourceId").append( + $('<option></option>') + .val(name).html(name)); + } + } + } + } + + $scope.changeTargetResourceId = function() { + $("#modelName").val(""); + $("#modelInvariantId").val(""); + $("#modelVersionId").val(""); + $("#modelVersion").val(""); + $("#modelCustomizationId").val(""); + var resourceVfc = getResourceDetailsVfcProperty(); + var type = $("#type").val(); + var recipe = $("#recipe").val(); + vfBaseName = $(event.target).val(); + if (type == "VFC" + && (null !== resourceVfc || undefined !== resourceVfc) + && (recipe == 'VF Module Create' || recipe == 'VF Module Delete')) { + for ( var prop in resourceVfc) { + var name = resourceVfc[prop]["name"]; + if (name == vfBaseName) { + var vfModuleModelName = resourceVfc[prop]["name"]; + $("#modelName").val( + vfModuleModelName); + var vfModuleModelInvariantUUID = resourceVfc[prop]["invariantUUID"]; + $("#modelInvariantId").val( + vfModuleModelInvariantUUID); + var vfModuleModelUUID = resourceVfc[prop]["UUID"]; + $("#modelVersionId").val( + vfModuleModelUUID); + var vfModuleModelVersion = resourceVfc[prop]["version"]; + $("#modelVersion").val( + vfModuleModelVersion); + var vfModuleModelCustomizationUUID = resourceVfc[prop]["customizationUUID"]; + $("#modelCustomizationId") + .val( + vfModuleModelCustomizationUUID); + } + } + } + else { + $("#metadata *").prop('disabled',true); + } + } $scope.changeGuardPolicyType = function() { @@ -258,13 +359,20 @@ app add_new_policy(); } $("#savePropsBtn").click(function(event) { - console.log("save properties triggered"); savePolicyLocally(); + for(var i = 0; i <= $scope.guard_ids.length; i++) { + for(var j = i; j <= $scope.guard_ids.length; j++) { + if(i != j && $scope.guard_ids[i] == $scope.guard_ids[j]) { + // duplacated guard policy id exist + alert("The guard policy ID should be unique."); + return; + } + } + } angular.element(document.getElementById('formSpan')).scope().submitForm(allPolicies); $("#close_button").click(); }); - initTargetResourceId(); }); } $scope.init(); @@ -274,6 +382,12 @@ app // Get the second recipe (guard one) and update it $($("#formId" + formNum + " #recipe")[1]).val($(event.target).val()); } + $scope.updateGuardActor = function(event) { + + var formNum = $(event.target).closest('.formId').attr('id').substring(6); + // Get the second actor (guard one) and update it + $($("#formId" + formNum + " #actor")[1]).val($(event.target).val()); + } // When we change the name of a policy $scope.updateTabLabel = function(event) { @@ -302,4 +416,4 @@ app }); }; - } ]);
\ No newline at end of file + } ]); diff --git a/src/main/resources/META-INF/resources/designer/scripts/propertyController.js b/src/main/resources/META-INF/resources/designer/scripts/propertyController.js index 2b32f4d26..75c64f308 100644 --- a/src/main/resources/META-INF/resources/designer/scripts/propertyController.js +++ b/src/main/resources/META-INF/resources/designer/scripts/propertyController.js @@ -72,7 +72,9 @@ function getMsProperty(type) { var msProperties = cl_props["microServicePolicies"]; for (p in msProperties) { if (msProperties[p]["name"] == type) { - return JSON.parse(JSON.stringify(msProperties[p]["properties"])); + if (msProperties[p]["properties"] !== null && msProperties[p]["properties"] !== undefined) { + return JSON.parse(JSON.stringify(msProperties[p]["properties"])); + } } } return null; @@ -82,7 +84,7 @@ function getMsUI(type) { var msProperties = cl_props["microServicePolicies"]; for (p in msProperties) { if (msProperties[p]["name"] == type) { - return JSON.parse(JSON.stringify(msProperties[p]["jsonRepresentation"])); + return JSON.parse(JSON.stringify(msProperties[p]["jsonRepresentation"])); } } return null; @@ -111,4 +113,13 @@ function getDeploymentStatusURL() { function setDeploymentStatusURL(deploymentStatusURL) { cl_props["dcaeDeploymentStatusUrl"] = deploymentStatusURL; } -module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getLastUpdatedStatus,getDeploymentID,getDeploymentStatusURL };
\ No newline at end of file + +function getResourceDetailsProperty() { + return cl_props["modelPropertiesJson"]["resourceDetails"]["VF"]; +} + +function getResourceDetailsVfcProperty() { + return cl_props["modelPropertiesJson"]["resourceDetails"]["VFC"]; +} + +module.exports = { getOperationalPolicyProperty,getGlobalProperty,getMsProperty,getMsUI,getLastUpdatedStatus,getDeploymentID,getDeploymentStatusURL,getResourceDetailsProperty,getResourceDetailsVfcProperty };
\ No newline at end of file diff --git a/src/main/resources/application-noaaf.properties b/src/main/resources/application-noaaf.properties index 82b2a283f..84e97ea30 100644 --- a/src/main/resources/application-noaaf.properties +++ b/src/main/resources/application-noaaf.properties @@ -135,7 +135,7 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components -clamp.config.policy.url=http://localhost:8085/ +clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/policy/api/v1 clamp.config.policy.userName=test clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 02acf184b..b1077d382 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -150,7 +150,7 @@ clamp.config.dcae.deployment.template=classpath:/clds/templates/dcae-deployment- # # # Configuration Settings for Policy Engine Components -clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/pdp/ +clamp.config.policy.url=http://policy.api.simpledemo.onap.org:8081/policy/api/v1 clamp.config.policy.userName=test clamp.config.policy.password=test clamp.config.policy.pdpUrl1=http://policy.api.simpledemo.onap.org:8081/pdp/ , testpdp, alpha123 diff --git a/src/main/resources/clds/camel/rest/clamp-api-v2.xml b/src/main/resources/clds/camel/rest/clamp-api-v2.xml index f339d5d70..c17595e18 100644 --- a/src/main/resources/clds/camel/rest/clamp-api-v2.xml +++ b/src/main/resources/clds/camel/rest/clamp-api-v2.xml @@ -1,94 +1,147 @@ -<rests xmlns="http://camel.apache.org/schema/spring" > - <rest > - <get uri="/v2/loop/getAllNames" - outType="java.lang.String[]" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" /> - </route> - </get> - <get uri="/v2/loop/{loopName}" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" /> - </route> - </get> - <get uri="/v2/loop/svgRepresentation/{loopName}" - outType="java.lang.String" - produces="application/xml"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" /> - </route> - </get> +<rests xmlns="http://camel.apache.org/schema/spring"> + <rest> + <get + uri="/v2/loop/getAllNames" + outType="java.lang.String[]" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=getLoopNames()" /> + </route> + </get> + <get + uri="/v2/loop/{loopName}" + outType="org.onap.clamp.loop.Loop" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=getLoop(${header.loopName})" /> + </route> + </get> + <get + uri="/v2/loop/svgRepresentation/{loopName}" + outType="java.lang.String" + produces="application/xml"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','read')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=getSVGRepresentation(${header.loopName})" /> + </route> + </get> - <post uri="/v2/loop/updateGlobalProperties/{loopName}" - type="com.google.gson.JsonObject" - consumes="application/json" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${body})" /> - </route> - </post> - <post uri="/v2/loop/updateOperationalPolicies/{loopName}" - type="com.google.gson.JsonArray" - consumes="application/json" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${body})" /> - </route> - </post> - <post uri="/v2/loop/updateMicroservicePolicy/{loopName}" - type="org.onap.clamp.policy.microservice.MicroServicePolicy" - consumes="application/json" - outType="org.onap.clamp.policy.microservice.MicroServicePolicy" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${body})" /> - </route> - </post> - <put uri="/v2/loop/deployLoop/{loopName}" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" /> - </route> - </put> - <put uri="/v2/loop/undeployLoop/{loopName}" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" /> - </route> - </put> - <put uri="/v2/loop/submit/{loopName}"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitMsPolicies(${header.loopName})" /> - <!-- <to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitOpPolicy(${header.loopName})" />--> - <!--<to uri="bean:org.onap.clamp.operation.LoopOperation?method=submitGuardPolicy(${header.loopName})" /> --> - </route> - </put> - <put uri="/v2/loop/delete/{loopName}" - outType="org.onap.clamp.loop.Loop" - produces="application/json"> - <route> - <to uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteMsPolicies(${header.loopName})" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteOpPolicy(${header.loopName})" /> - <to uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteGuardPolicy(${header.loopName})" /> - </route> - </put> - </rest> + <post + uri="/v2/loop/updateGlobalProperties/{loopName}" + type="com.google.gson.JsonObject" + consumes="application/json" + outType="org.onap.clamp.loop.Loop" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=updateGlobalPropertiesJson(${header.loopName},${body})" /> + </route> + </post> + <post + uri="/v2/loop/updateOperationalPolicies/{loopName}" + type="com.google.gson.JsonArray" + consumes="application/json" + outType="org.onap.clamp.loop.Loop" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=updateOperationalPolicies(${header.loopName},${body})" /> + </route> + </post> + <post + uri="/v2/loop/updateMicroservicePolicy/{loopName}" + type="org.onap.clamp.policy.microservice.MicroServicePolicy" + consumes="application/json" + outType="org.onap.clamp.policy.microservice.MicroServicePolicy" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.loop.LoopController?method=updateMicroservicePolicy(${header.loopName},${body})" /> + </route> + </post> + <put + uri="/v2/loop/deployLoop/{loopName}" + outType="org.onap.clamp.loop.Loop" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.operation.LoopOperation?method=deployLoop(*,${header.loopName})" /> + </route> + </put> + <put + uri="/v2/loop/undeployLoop/{loopName}" + outType="org.onap.clamp.loop.Loop" + produces="application/json"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.operation.LoopOperation?method=unDeployLoop(${header.loopName})" /> + </route> + </put> + <put uri="/v2/loop/submit/{loopName}"> + <route> + <setBody> + <simple>${header.loopName}</simple> + </setBody> + <log + loggingLevel="INFO" + message="Loop name received: ${body}"></log> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <setHeader headerName="LoopObject"> + <method + ref="org.onap.clamp.loop.LoopService" + method="getLoop" /> + </setHeader> + <split streaming="true"> + <simple>${header.LoopObject.getMicroServicePolicies()} + </simple> + <setHeader headerName="HttpQueryException"> + <simple resultType="java.lang.Boolean">false</simple> + </setHeader> + <to uri="direct:delete-micro-service"/> + + <setHeader headerName="HttpQueryException"> + <simple resultType="java.lang.Boolean">true</simple> + </setHeader> + <setBody> + <simple>${body.createPolicyPayload()}</simple> + </setBody> + <to uri="direct:create-micro-service"/> + + </split> + </route> + </put> + <put + uri="/v2/loop/delete/{loopName}"> + <route> + <to + uri="bean:org.onap.clamp.authorization.AuthorizationController?method=authorize(*,'cl','','update')" /> + <to + uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteMsPolicies(${header.loopName})" /> + <to + uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteOpPolicy(${header.loopName})" /> + <to + uri="bean:org.onap.clamp.operation.LoopOperation?method=deleteGuardPolicy(${header.loopName})" /> + </route> + </put> + </rest> </rests> diff --git a/src/main/resources/clds/camel/routes/flexible-flow.xml b/src/main/resources/clds/camel/routes/flexible-flow.xml index 2103b4acf..b8244990b 100644 --- a/src/main/resources/clds/camel/routes/flexible-flow.xml +++ b/src/main/resources/clds/camel/routes/flexible-flow.xml @@ -1,61 +1,117 @@ <routes xmlns="http://camel.apache.org/schema/spring"> - <route id="submit"> - <from uri="direct:processSubmit" /> - <choice> - <when> - <simple> ${exchangeProperty.actionCd} == 'SUBMIT' || ${exchangeProperty.actionCd} == 'RESUBMIT'</simple> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> - <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" /> - <delay> - <constant>30000</constant> - </delay> - <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> - </when> - <when> - <simple> ${exchangeProperty.actionCd} == 'DELETE'</simple> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> - <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" /> - <delay> - <constant>30000</constant> - </delay> - <to - uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> - </when> - <when> - <simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> - <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" /> - <delay> - <constant>30000</constant> - </delay> - <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> - </when> - <when> - <simple> ${exchangeProperty.actionCd} == 'STOP'</simple> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> - <to - uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> - </when> - <when> - <simple> ${exchangeProperty.actionCd} == 'RESTART'</simple> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> - <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> - <to uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> - </when> - </choice> - </route> + <route id="submit"> + <from uri="direct:processSubmit" /> + <choice> + <when> + <simple> ${exchangeProperty.actionCd} == 'SUBMIT' || + ${exchangeProperty.actionCd} == 'RESUBMIT' + </simple> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> + <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" /> + <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" /> + <delay> + <constant>30000</constant> + </delay> + <to + uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> + <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> + </when> + <when> + <simple> ${exchangeProperty.actionCd} == 'DELETE'</simple> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> + <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDeleteDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.HolmesPolicyDeleteDelegate" /> + <delay> + <constant>30000</constant> + </delay> + <to + uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" /> + <to uri="bean:org.onap.clamp.clds.client.ModelDeleteDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> + </when> + <when> + <simple> ${exchangeProperty.actionCd} == 'UPDATE'</simple> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> + <to uri="bean:org.onap.clamp.clds.client.TcaPolicyDelegate" /> + <to uri="bean:org.onap.clamp.clds.client.HolmesPolicyDelegate" /> + <delay> + <constant>30000</constant> + </delay> + <to + uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> + <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> + </when> + <when> + <simple> ${exchangeProperty.actionCd} == 'STOP'</simple> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> + <to + uri="bean:org.onap.clamp.clds.client.OperationalPolicyDeleteDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.GuardPolicyDeleteDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> + </when> + <when> + <simple> ${exchangeProperty.actionCd} == 'RESTART'</simple> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'INITIATED')" /> + <to uri="bean:org.onap.clamp.clds.client.GuardPolicyDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.OperationalPolicyDelegate" /> + <to + uri="bean:org.onap.clamp.clds.client.CldsEventDelegate?method=addEvent(*,'COMPLETED')" /> + </when> + </choice> + </route> + <route id="delete-micro-service"> + <from uri="direct:delete-micro-service" /> + + <setHeader headerName="CamelHttpMethod"> + <constant>DELETE</constant> + </setHeader> + <setHeader headerName="CamelHttpUri"> + <simple>{{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies/${body.getName()} + </simple> + </setHeader> + <setBody> + <constant>null</constant> + </setBody> + <!--<convertBodyTo type="org.onap.clamp.policy.microservice.MicroServicePolicy"/> --> + <log + loggingLevel="INFO" + message="Policy Endpoint for microservice: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log> + <toD + uri="http4://policyhost:8085?throwExceptionOnFailure=${header.HttpQueryException}" /> + + </route> + <route id="create-micro-service"> + <from uri="direct:create-micro-service" /> + + <setHeader headerName="CamelHttpMethod"> + <constant>POST</constant> + </setHeader> + <setHeader headerName="CamelHttpUri"> + <simple>{{clamp.config.policy.url}}/policyTypes/${body.getModelType()}/versions/1.0.0/policies + </simple> + </setHeader> + <!--<convertBodyTo type="org.onap.clamp.policy.microservice.MicroServicePolicy"/> --> + <log + loggingLevel="INFO" + message="Policy Endpoint for microservice: ${header.CamelHttpMethod} ${header.CamelHttpUri}"></log> + <toD + uri="http4://policyhost:8085?throwExceptionOnFailure=${header.HttpQueryException}" /> + </route> </routes>
\ No newline at end of file |