* ONAP Policy API
* ================================================================================
* Copyright (C) 2019 AT&T Intellectual Property. All rights reserved.
+ * Modifications Copyright (C) 2019 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
package org.onap.policy.api.main.startstop;
-import java.util.ArrayList;
-import java.util.Map;
+import java.util.LinkedHashMap;
import org.onap.policy.api.main.exception.PolicyApiException;
+import org.onap.policy.api.main.parameters.ApiParameterGroup;
import org.onap.policy.common.utils.coder.CoderException;
import org.onap.policy.common.utils.coder.StandardCoder;
import org.onap.policy.common.utils.resources.ResourceUtils;
import org.onap.policy.models.base.PfModelException;
import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.provider.PolicyModelsProviderFactory;
-import org.onap.policy.models.provider.PolicyModelsProviderParameters;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
import org.onap.policy.models.tosca.authorative.concepts.ToscaServiceTemplate;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.yaml.snakeyaml.Yaml;
/**
* This class creates initial policy types in the database.
private StandardCoder standardCoder;
private PolicyModelsProviderFactory factory;
- private static final String[] PRELOAD_POLICYTYPES = {
- "preloadedPolicyTypes/onap.policies.monitoring.cdap.tca.hi.lo.app.json",
- "preloadedPolicyTypes/onap.policies.monitoring.dcaegen2.collectors.datafile.datafile-app-server.json",
- "preloadedPolicyTypes/onap.policies.optimization.AffinityPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.DistancePolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.HpaPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.OptimizationPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.PciPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.QueryPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.SubscriberPolicy.json",
- "preloadedPolicyTypes/onap.policies.optimization.Vim_fit.json",
- "preloadedPolicyTypes/onap.policies.optimization.VnfPolicy.json",
- "preloadedPolicyTypes/onap.policies.controlloop.guard.Blacklist.json",
- "preloadedPolicyTypes/onap.policies.controlloop.guard.FrequencyLimiter.json",
- "preloadedPolicyTypes/onap.policies.controlloop.guard.MinMax.json",
- "preloadedPolicyTypes/onap.policies.controlloop.guard.coordination.FirstBlocksSecond.json",
- "preloadedPolicyTypes/onap.policies.controlloop.Operational.json"
- };
-
/**
* Constructs the object.
*/
/**
* Initializes database by preloading policy types.
*
- * @param policyModelsProviderParameters the database parameters
+ * @param apiParameterGroup the apiParameterGroup parameters
* @throws PolicyApiException in case of errors.
*/
- public void initializeApiDatabase(final PolicyModelsProviderParameters policyModelsProviderParameters)
+ public void initializeApiDatabase(final ApiParameterGroup apiParameterGroup)
throws PolicyApiException {
try (PolicyModelsProvider databaseProvider =
- factory.createPolicyModelsProvider(policyModelsProviderParameters)) {
- ToscaServiceTemplate policyTypes = new ToscaServiceTemplate();
- policyTypes.setPolicyTypes(new ArrayList<Map<String,ToscaPolicyType>>());
- policyTypes.setToscaDefinitionsVersion("tosca_simple_yaml_1_0_0");
- for (String pt : PRELOAD_POLICYTYPES) {
- String policyTypeAsString = ResourceUtils.getResourceAsString(pt);
- if (policyTypeAsString == null) {
+ factory.createPolicyModelsProvider(apiParameterGroup.getDatabaseProviderParameters())) {
+ ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
+ serviceTemplate.setPolicyTypes(new LinkedHashMap<String, ToscaPolicyType>());
+ serviceTemplate.setToscaDefinitionsVersion("tosca_simple_yaml_1_0_0");
+ for (String pt : apiParameterGroup.getPreloadPolicyTypes()) {
+ String policyTypeAsStringYaml = ResourceUtils.getResourceAsString(pt);
+ if (policyTypeAsStringYaml == null) {
throw new PolicyApiException("Preloading policy type cannot be found: " + pt);
}
- ToscaServiceTemplate singlePolicyType = standardCoder.decode(policyTypeAsString,
- ToscaServiceTemplate.class);
+
+ Object yamlObject = new Yaml().load(policyTypeAsStringYaml);
+ String policyTypeAsString = new StandardCoder().encode(yamlObject);
+
+ ToscaServiceTemplate singlePolicyType =
+ standardCoder.decode(policyTypeAsString, ToscaServiceTemplate.class);
if (singlePolicyType == null) {
throw new PolicyApiException("Error deserializing policy type from file: " + pt);
}
// Consolidate policy types
- for (Map<String, ToscaPolicyType> eachPolicyType : singlePolicyType.getPolicyTypes()) {
- policyTypes.getPolicyTypes().add(eachPolicyType);
- }
+ serviceTemplate.getPolicyTypes().putAll(singlePolicyType.getPolicyTypes());
}
- ToscaServiceTemplate createdPolicyTypes = databaseProvider.createPolicyTypes(policyTypes);
+ ToscaServiceTemplate createdPolicyTypes = databaseProvider.createPolicyTypes(serviceTemplate);
if (createdPolicyTypes == null) {
- throw new PolicyApiException("Error preloading policy types: " + policyTypes);
+ throw new PolicyApiException("Error preloading policy types: " + serviceTemplate);
} else {
LOGGER.debug("Created initial policy types in DB - {}", createdPolicyTypes);
}