/*-
* ============LICENSE_START=======================================================
- * Copyright (C) 2019 Nordix Foundation.
+ * Copyright (C) 2019-2020 Nordix Foundation.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
import java.util.LinkedHashMap;
import java.util.Map;
+import java.util.Map.Entry;
import javax.ws.rs.core.Response;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyContent;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyInput;
import org.onap.policy.models.tosca.legacy.concepts.LegacyGuardPolicyOutput;
-import org.onap.policy.models.tosca.simple.concepts.ToscaPolicies;
-import org.onap.policy.models.tosca.simple.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.simple.concepts.ToscaServiceTemplate;
-import org.onap.policy.models.tosca.simple.concepts.ToscaTopologyTemplate;
-import org.onap.policy.models.tosca.simple.mapping.ToscaServiceTemplateMapper;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicies;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaPolicy;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaServiceTemplate;
+import org.onap.policy.models.tosca.simple.concepts.JpaToscaTopologyTemplate;
+import org.onap.policy.models.tosca.simple.mapping.JpaToscaServiceTemplateMapper;
import org.onap.policy.models.tosca.utils.ToscaUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
* @author Liam Fallon (liam.fallon@est.tech)
*/
public class LegacyGuardPolicyMapper
- implements ToscaServiceTemplateMapper<LegacyGuardPolicyInput, Map<String, LegacyGuardPolicyOutput>> {
+ implements JpaToscaServiceTemplateMapper<LegacyGuardPolicyInput, Map<String, LegacyGuardPolicyOutput>> {
private static final Logger LOGGER = LoggerFactory.getLogger(LegacyGuardPolicyMapper.class);
+ // Tag for metadata fields
+ private static final String POLICY_ID = "policy-id";
+ private static final String POLICY_VERSION = "policy-version";
+
private static final Map<String, PfConceptKey> GUARD_POLICY_TYPE_MAP = new LinkedHashMap<>();
static {
- GUARD_POLICY_TYPE_MAP.put("guard.frequency.scaleout",
+ GUARD_POLICY_TYPE_MAP.put("guard.frequency.",
new PfConceptKey("onap.policies.controlloop.guard.FrequencyLimiter:1.0.0"));
- GUARD_POLICY_TYPE_MAP.put("guard.minmax.scaleout",
- new PfConceptKey("onap.policies.controlloop.guard.MinMax:1.0.0"));
- GUARD_POLICY_TYPE_MAP.put("guard.minmax.scaleout",
- new PfConceptKey("onap.policies.controlloop.guard.MinMax:1.0.0"));
- GUARD_POLICY_TYPE_MAP.put("guard.blacklist",
+ GUARD_POLICY_TYPE_MAP.put("guard.minmax.", new PfConceptKey("onap.policies.controlloop.guard.MinMax:1.0.0"));
+ GUARD_POLICY_TYPE_MAP.put("guard.blacklist.",
new PfConceptKey("onap.policies.controlloop.guard.Blacklist:1.0.0"));
}
@Override
- public ToscaServiceTemplate toToscaServiceTemplate(final LegacyGuardPolicyInput legacyGuardPolicyInput) {
- PfConceptKey guardPolicyType = GUARD_POLICY_TYPE_MAP.get(legacyGuardPolicyInput.getPolicyId());
+ public JpaToscaServiceTemplate toToscaServiceTemplate(final LegacyGuardPolicyInput legacyGuardPolicyInput) {
+ PfConceptKey guardPolicyType = getGuardPolicyType(legacyGuardPolicyInput);
if (guardPolicyType == null) {
String errorMessage =
"policy type for guard policy \"" + legacyGuardPolicyInput.getPolicyId() + "\" unknown";
PfConceptKey policyKey = new PfConceptKey(legacyGuardPolicyInput.getPolicyId(), version);
- final ToscaPolicy toscaPolicy = new ToscaPolicy(policyKey);
+ final JpaToscaPolicy toscaPolicy = new JpaToscaPolicy(policyKey);
toscaPolicy.setType(guardPolicyType);
toscaPolicy.setProperties(legacyGuardPolicyInput.getContent().getAsPropertyMap());
- final ToscaServiceTemplate serviceTemplate = new ToscaServiceTemplate();
- serviceTemplate.setToscaDefinitionsVersion("tosca_simimport java.util.HashMap;\n" + "ple_yaml_1_0");
+ final Map<String, String> metadata = new LinkedHashMap<>();
+ metadata.put(POLICY_ID, toscaPolicy.getKey().getName());
+ metadata.put(POLICY_VERSION, Integer.toString(toscaPolicy.getKey().getMajorVersion()));
+ toscaPolicy.setMetadata(metadata);
+
+ final JpaToscaServiceTemplate serviceTemplate = new JpaToscaServiceTemplate();
+ serviceTemplate.setToscaDefinitionsVersion("tosca_simple_yaml_1_0_0");
- serviceTemplate.setTopologyTemplate(new ToscaTopologyTemplate());
+ serviceTemplate.setTopologyTemplate(new JpaToscaTopologyTemplate());
- serviceTemplate.getTopologyTemplate().setPolicies(new ToscaPolicies());
+ serviceTemplate.getTopologyTemplate().setPolicies(new JpaToscaPolicies());
serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().put(policyKey, toscaPolicy);
return serviceTemplate;
}
@Override
- public Map<String, LegacyGuardPolicyOutput> fromToscaServiceTemplate(final ToscaServiceTemplate serviceTemplate) {
+ public Map<String, LegacyGuardPolicyOutput>
+ fromToscaServiceTemplate(final JpaToscaServiceTemplate serviceTemplate) {
ToscaUtils.assertPoliciesExist(serviceTemplate);
final Map<String, LegacyGuardPolicyOutput> legacyGuardPolicyOutputMap = new LinkedHashMap<>();
- for (ToscaPolicy toscaPolicy : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap().values()) {
+ for (JpaToscaPolicy toscaPolicy : serviceTemplate.getTopologyTemplate().getPolicies().getConceptMap()
+ .values()) {
final LegacyGuardPolicyOutput legacyGuardPolicyOutput = new LegacyGuardPolicyOutput();
legacyGuardPolicyOutput.setType(toscaPolicy.getType().getName());
- legacyGuardPolicyOutput.setVersion(toscaPolicy.getType().getVersion());
+ legacyGuardPolicyOutput.setVersion(toscaPolicy.getKey().getVersion());
+
+ if (toscaPolicy.getMetadata() == null) {
+ String errorMessage = "no metadata defined on TOSCA policy";
+ LOGGER.warn(errorMessage);
+ throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
+ }
+
+ final Map<String, Object> metadata = new LinkedHashMap<>(toscaPolicy.getMetadata());
+
+ // if version exists, convert it to int
+ metadata.computeIfPresent(POLICY_VERSION, (key, val) -> Integer.parseInt(val.toString()));
- final Map<String, Object> metadata = new LinkedHashMap<>();
- metadata.put("policy-id", toscaPolicy.getKey().getName());
- metadata.put("policy-version", toscaPolicy.getKey().getMajorVersion());
legacyGuardPolicyOutput.setMetadata(metadata);
if (toscaPolicy.getProperties() == null) {
}
final LegacyGuardPolicyContent content = new LegacyGuardPolicyContent();
- // @formatter:off
- content.setActor( toscaPolicy.getProperties().get("actor"));
- content.setClname( toscaPolicy.getProperties().get("clname"));
- content.setGuardActiveEnd( toscaPolicy.getProperties().get("guardActiveEnd"));
- content.setGuardActiveStart(toscaPolicy.getProperties().get("guardActiveStart"));
- content.setLimit( toscaPolicy.getProperties().get("limit"));
- content.setMax( toscaPolicy.getProperties().get("max"));
- content.setMin( toscaPolicy.getProperties().get("min"));
- content.setRecipe( toscaPolicy.getProperties().get("recipe"));
- content.setTargets( toscaPolicy.getProperties().get("targets"));
- content.setTimeUnits( toscaPolicy.getProperties().get("timeUnits"));
- content.setTimeWindow( toscaPolicy.getProperties().get("timeWindow"));
- // @formatter:on
+ content.setContent(toscaPolicy.getProperties());
final Map<String, LegacyGuardPolicyContent> propertiesMap = new LinkedHashMap<>();
propertiesMap.put("content", content);
legacyGuardPolicyOutput.setProperties(propertiesMap);
- if (toscaPolicy.getProperties() == null) {
- String errorMessage = "property \"Content\" not defined on TOSCA policy";
- LOGGER.warn(errorMessage);
- throw new PfModelRuntimeException(Response.Status.BAD_REQUEST, errorMessage);
- }
-
legacyGuardPolicyOutputMap.put(toscaPolicy.getKey().getName(), legacyGuardPolicyOutput);
}
return legacyGuardPolicyOutputMap;
}
+
+ private PfConceptKey getGuardPolicyType(final LegacyGuardPolicyInput legacyGuardPolicyInput) {
+ final String policyId = legacyGuardPolicyInput.getPolicyId();
+ if (policyId == null) {
+ return null;
+ }
+
+ for (Entry<String, PfConceptKey> guardPolicyTypeEntry : GUARD_POLICY_TYPE_MAP.entrySet()) {
+ if (policyId.startsWith(guardPolicyTypeEntry.getKey())) {
+ return guardPolicyTypeEntry.getValue();
+ }
+ }
+
+ return null;
+ }
}