summaryrefslogtreecommitdiffstats
path: root/src/main/java
diff options
context:
space:
mode:
authorJorge Hernandez <jorge.hernandez-herrero@att.com>2021-01-22 14:55:52 +0000
committerGerrit Code Review <gerrit@onap.org>2021-01-22 14:55:52 +0000
commit95d02d13cceb78b6d8d2fe24f72a8544e1d862f2 (patch)
treef1e1ca48730227a7171f740bd150cf4016bf1e17 /src/main/java
parent31f6f737a191455918a6e5bbf396ecc939d8b173 (diff)
parent078c34d0c2e439d8a148a2cd4d7545c6b7f56acb (diff)
Merge "First integration of Policy model PdpGroups"
Diffstat (limited to 'src/main/java')
-rw-r--r--src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java20
-rw-r--r--src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java58
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java92
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java94
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java56
-rw-r--r--src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java125
6 files changed, 124 insertions, 321 deletions
diff --git a/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java b/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java
index bc6a68286..46c55ea45 100644
--- a/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java
+++ b/src/main/java/org/onap/policy/clamp/clds/client/PolicyEngineServices.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights
+ * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -39,7 +39,8 @@ import org.onap.policy.clamp.clds.sdc.controller.installer.BlueprintMicroService
import org.onap.policy.clamp.clds.util.JsonUtils;
import org.onap.policy.clamp.loop.template.PolicyModel;
import org.onap.policy.clamp.loop.template.PolicyModelsService;
-import org.onap.policy.clamp.policy.pdpgroup.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroups;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.yaml.snakeyaml.DumperOptions;
@@ -50,6 +51,8 @@ import org.yaml.snakeyaml.Yaml;
* The class implements the communication with the Policy Engine to retrieve
* policy models (tosca). It mainly delegates the physical calls to Camel
* engine.
+ * It supports a retry mechanism for these calls, configurations can be specified in the
+ * application.properties "policy.retry.interval"(default 0) and "policy.retry.limit"(default 1).
*/
@Component
public class PolicyEngineServices {
@@ -192,18 +195,7 @@ public class PolicyEngineServices {
return;
}
- JsonObject jsonObj = JsonUtils.GSON.fromJson(responseBody, JsonObject.class);
-
- List<PdpGroup> pdpGroupList = new LinkedList<>();
- JsonArray itemsArray = (JsonArray) jsonObj.get("groups");
-
- for (com.google.gson.JsonElement jsonElement : itemsArray) {
- JsonObject item = (JsonObject) jsonElement;
- PdpGroup pdpGroup = JsonUtils.GSON.fromJson(item.toString(), PdpGroup.class);
- pdpGroupList.add(pdpGroup);
- }
-
- policyModelsService.updatePdpGroupInfo(pdpGroupList);
+ policyModelsService.updatePdpGroupInfo(JsonUtils.GSON.fromJson(responseBody, PdpGroups.class));
}
private String callCamelRoute(Exchange exchange, String camelFlow, String logMsg) {
diff --git a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
index 8670ab73e..f0830360e 100644
--- a/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
+++ b/src/main/java/org/onap/policy/clamp/loop/template/PolicyModelsService.java
@@ -2,7 +2,7 @@
* ============LICENSE_START=======================================================
* ONAP CLAMP
* ================================================================================
- * Copyright (C) 2020 AT&T Intellectual Property. All rights
+ * Copyright (C) 2020-2021 AT&T Intellectual Property. All rights
* reserved.
* ================================================================================
* Licensed under the Apache License, Version 2.0 (the "License");
@@ -30,13 +30,18 @@ import java.util.Collections;
import java.util.List;
import org.onap.policy.clamp.clds.tosca.ToscaSchemaConstants;
import org.onap.policy.clamp.clds.tosca.ToscaYamlToJsonConvertor;
-import org.onap.policy.clamp.policy.pdpgroup.PdpGroup;
+import org.onap.policy.clamp.policy.pdpgroup.PdpGroupsAnalyzer;
import org.onap.policy.clamp.util.SemanticVersioning;
+import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroups;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
+/**
+ * This class contains the methods to access the policyModel object in db.
+ */
@Service
public class PolicyModelsService {
private final PolicyModelsRepository policyModelsRepository;
@@ -44,7 +49,7 @@ public class PolicyModelsService {
@Autowired
public PolicyModelsService(PolicyModelsRepository policyModelrepo,
- ToscaYamlToJsonConvertor convertor) {
+ ToscaYamlToJsonConvertor convertor) {
policyModelsRepository = policyModelrepo;
toscaYamlToJsonConvertor = convertor;
}
@@ -78,31 +83,31 @@ public class PolicyModelsService {
public PolicyModel createNewPolicyModelFromTosca(String policyModelTosca) {
JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
String policyModelTypeFromTosca = toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
+ ToscaSchemaConstants.METADATA_POLICY_MODEL_TYPE);
Iterable<PolicyModel> models = getAllPolicyModelsByType(policyModelTypeFromTosca);
Collections.sort((List<PolicyModel>) models);
PolicyModel newPolicyModel = new PolicyModel(policyModelTypeFromTosca, policyModelTosca,
- SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null
- : ((ArrayList<PolicyModel>) models).get(0).getVersion()),
- toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_ACRONYM));
+ SemanticVersioning.incrementMajorVersion(((ArrayList) models).isEmpty() ? null
+ : ((ArrayList<PolicyModel>) models).get(0).getVersion()),
+ toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
+ ToscaSchemaConstants.METADATA_ACRONYM));
return saveOrUpdatePolicyModel(newPolicyModel);
}
/**
* Update an existing Tosca Policy Model.
*
- * @param policyModelType The policy Model type in Tosca yaml
+ * @param policyModelType The policy Model type in Tosca yaml
* @param policyModelVersion The policy Version to update
- * @param policyModelTosca The Policy Model tosca
+ * @param policyModelTosca The Policy Model tosca
* @return The Policy Model updated
*/
public PolicyModel updatePolicyModelTosca(String policyModelType, String policyModelVersion,
- String policyModelTosca) {
+ String policyModelTosca) {
JsonObject jsonObject = toscaYamlToJsonConvertor.validateAndConvertToJson(policyModelTosca);
PolicyModel thePolicyModel = getPolicyModel(policyModelType, policyModelVersion);
thePolicyModel.setPolicyAcronym(toscaYamlToJsonConvertor.getValueFromMetadata(jsonObject,
- ToscaSchemaConstants.METADATA_ACRONYM));
+ ToscaSchemaConstants.METADATA_ACRONYM));
thePolicyModel.setPolicyModelTosca(policyModelTosca);
return saveOrUpdatePolicyModel(thePolicyModel);
}
@@ -126,13 +131,13 @@ public class PolicyModelsService {
/**
* Retrieves the Tosca model Yaml string.
*
- * @param type The Policy Model Type
+ * @param type The Policy Model Type
* @param version The policy model version
* @return The Tosca model Yaml string
*/
public String getPolicyModelTosca(String type, String version) {
return policyModelsRepository.findById(new PolicyModelId(type, version))
- .orElse(new PolicyModel()).getPolicyModelTosca();
+ .orElse(new PolicyModel()).getPolicyModelTosca();
}
/**
@@ -148,26 +153,11 @@ public class PolicyModelsService {
/**
* Update the Pdp Group info in Policy Model DB.
*
- * @param pdpGroupList The list of Pdp Group info received from Policy Engine
+ * @param pdpGroups The list of Pdp Group info received from Policy Engine
*/
- public void updatePdpGroupInfo(List<PdpGroup> pdpGroupList) {
- List<PolicyModel> policyModelList = policyModelsRepository.findAll();
- for (PolicyModel policyModel : policyModelList) {
- JsonArray supportedPdpGroups = new JsonArray();
- for (PdpGroup pdpGroup : pdpGroupList) {
- JsonObject supportedPdpGroup = pdpGroup.getSupportedSubgroups(
- policyModel.getPolicyModelType(), policyModel.getVersion());
- if (supportedPdpGroup != null) {
- supportedPdpGroups.add(supportedPdpGroup);
- }
- }
-
- if (supportedPdpGroups.size() > 0) {
- JsonObject supportedPdpJson = new JsonObject();
- supportedPdpJson.add("supportedPdpGroups", supportedPdpGroups);
- policyModel.setPolicyPdpGroup(supportedPdpJson);
- policyModelsRepository.saveAndFlush(policyModel);
- }
- }
+ public void updatePdpGroupInfo(PdpGroups pdpGroups) {
+ List<PolicyModel> policyModelsList = policyModelsRepository.findAll();
+ PdpGroupsAnalyzer.updatePdpGroup(policyModelsList, pdpGroups);
+ this.policyModelsRepository.saveAll(policyModelsList);
}
}
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java
deleted file mode 100644
index 9cbeec109..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroup.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.policy.pdpgroup;
-
-import com.google.gson.JsonArray;
-import com.google.gson.JsonObject;
-import com.google.gson.annotations.Expose;
-import java.util.List;
-
-/**
- * This class maps the get Pdp Group response to a nice pojo.
- */
-public class PdpGroup {
-
- @Expose
- private String name;
-
- @Expose
- private String pdpGroupState;
-
- @Expose
- private List<PdpSubgroup> pdpSubgroups;
-
- public String getName() {
- return name;
- }
-
- public void setName(String name) {
- this.name = name;
- }
-
- public String getPdpGroupState() {
- return pdpGroupState;
- }
-
- public void setPdpGroupState(String pdpGroupState) {
- this.pdpGroupState = pdpGroupState;
- }
-
- public List<PdpSubgroup> getPdpSubgroups() {
- return pdpSubgroups;
- }
-
- public void setPdpSubgroups(List<PdpSubgroup> pdpSubgroups) {
- this.pdpSubgroups = pdpSubgroups;
- }
-
- /**
- * Get supported subGroups based on the defined policy type and version.
- * @param policyType The policy type
- * @param version The version
- * @return The supported subGroup list in Json format
- */
- public JsonObject getSupportedSubgroups(String policyType, String version) {
- if (!pdpGroupState.equalsIgnoreCase("ACTIVE")) {
- return null;
- }
- JsonArray supportedSubgroups = new JsonArray();
- for (PdpSubgroup subGroup : pdpSubgroups) {
- if (subGroup.getSupportedPolicyTypes().contains(new PolicyModelKey(policyType, version))) {
- supportedSubgroups.add(subGroup.getPdpType());
- }
- }
- if (supportedSubgroups.size() > 0) {
- JsonObject supportedPdpGroup = new JsonObject();
- supportedPdpGroup.add(this.name, supportedSubgroups);
- return supportedPdpGroup;
- }
- return null;
- }
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java
new file mode 100644
index 000000000..51cdb149e
--- /dev/null
+++ b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpGroupsAnalyzer.java
@@ -0,0 +1,94 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * ONAP CLAMP
+ * ================================================================================
+ * Copyright (C) 2021 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.policy.clamp.policy.pdpgroup;
+
+import com.google.gson.JsonArray;
+import com.google.gson.JsonObject;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import org.onap.policy.clamp.loop.template.PolicyModel;
+import org.onap.policy.models.pdp.concepts.PdpGroup;
+import org.onap.policy.models.pdp.concepts.PdpGroups;
+import org.onap.policy.models.pdp.concepts.PdpSubGroup;
+import org.onap.policy.models.pdp.enums.PdpState;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyTypeIdentifier;
+import org.onap.sdc.toscaparser.api.elements.PolicyType;
+
+/**
+ * This is an utility class to do searching in pdp groups.
+ */
+public class PdpGroupsAnalyzer {
+ /**
+ * Get supported subGroups based on the defined policy type and version for s specific PDPgroup.
+ * It returns null if the Group is not ACTIVE or if the policytype/version has not been found in the PDPSubgroups.
+ *
+ * @param pdpGroup The pdpGroup that must be analyzed
+ * @param policyType The policy type
+ * @param version The version
+ * @return The supported subGroups list in Json format
+ * @see org.onap.policy.models.pdp.concepts.PdpGroup
+ * @see org.onap.policy.models.pdp.enums.PdpState
+ */
+ private static JsonObject getSupportedSubgroups(PdpGroup pdpGroup, String policyType, String version) {
+ if (!PdpState.ACTIVE.equals(pdpGroup.getPdpGroupState())) {
+ return null;
+ }
+ JsonObject supportedPdpGroup = new JsonObject();
+ JsonArray supportedSubgroups = new JsonArray();
+ supportedPdpGroup.add(pdpGroup.getName(), supportedSubgroups);
+ pdpGroup.getPdpSubgroups().stream().forEach(pdpSubGroup -> {
+ if (pdpSubGroup.getSupportedPolicyTypes().stream().anyMatch(policyTypeIdentifier ->
+ policyType.matches(policyTypeIdentifier.getName().replace(".", "\\.").replace("*", ".*"))
+ && version.equals(policyTypeIdentifier.getVersion()))) {
+ supportedSubgroups.add(pdpSubGroup.getPdpType());
+ }
+ });
+ if (supportedSubgroups.size() == 0) {
+ return null;
+ }
+ return supportedPdpGroup;
+ }
+
+ /**
+ * This method updates each element in the policyModelsList given in argument based on the pdpGroups given.
+ *
+ * @param policyModelsList The list of Policy Models where each PolicyModel will be updated
+ * @param pdpGroups The PdpGroups containing all PDP group definition
+ */
+ public static void updatePdpGroup(List<PolicyModel> policyModelsList, PdpGroups pdpGroups) {
+ policyModelsList.parallelStream().forEach(policyModel -> {
+ JsonObject jsonResult = new JsonObject();
+ JsonArray supportedPdpGroups = new JsonArray();
+ jsonResult.add("supportedPdpGroups", supportedPdpGroups);
+ policyModel.setPolicyPdpGroup(jsonResult);
+ pdpGroups.getGroups().stream().map(pdpGroup -> PdpGroupsAnalyzer.getSupportedSubgroups(pdpGroup,
+ policyModel.getPolicyModelType(), policyModel.getVersion())).filter(Objects::nonNull)
+ .forEach(jsonPdpGroup -> supportedPdpGroups.add(jsonPdpGroup));
+ if (supportedPdpGroups.size() == 0) {
+ policyModel.setPolicyPdpGroup(null);
+ }
+ });
+ }
+} \ No newline at end of file
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java
deleted file mode 100644
index 890f90775..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PdpSubgroup.java
+++ /dev/null
@@ -1,56 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.policy.pdpgroup;
-
-import com.google.gson.annotations.Expose;
-import java.util.List;
-
-/**
- * This class maps the Policy get PDP Group response to a nice pojo.
- */
-public class PdpSubgroup {
-
- @Expose
- private String pdpType;
-
- @Expose
- private List<PolicyModelKey> supportedPolicyTypes;
-
- public String getPdpType() {
- return pdpType;
- }
-
- public void setPdpType(String pdpType) {
- this.pdpType = pdpType;
- }
-
- public List<PolicyModelKey> getSupportedPolicyTypes() {
- return supportedPolicyTypes;
- }
-
- public void setSupportedPolicyTypes(List<PolicyModelKey> supportedPolicyTypes) {
- this.supportedPolicyTypes = supportedPolicyTypes;
- }
-
-}
diff --git a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java b/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java
deleted file mode 100644
index df92bfdf9..000000000
--- a/src/main/java/org/onap/policy/clamp/policy/pdpgroup/PolicyModelKey.java
+++ /dev/null
@@ -1,125 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * ONAP CLAMP
- * ================================================================================
- * Copyright (C) 2020 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.policy.clamp.policy.pdpgroup;
-
-import com.google.gson.annotations.Expose;
-import java.io.Serializable;
-
-public class PolicyModelKey implements Serializable {
-
- /**
- * The serial version ID.
- */
- private static final long serialVersionUID = 3307410842013230886L;
-
- @Expose
- private String name;
-
- @Expose
- private String version;
-
- /**
- * Constructor.
- */
- public PolicyModelKey(String name, String version) {
- this.name = name;
- this.version = version;
- }
-
- /**
- * name getter.
- *
- * @return the name
- */
- public String getName() {
- return name;
- }
-
- /**
- * name setter.
- *
- * @param name the name to set
- */
- public void setName(String name) {
- this.name = name;
- }
-
- /**
- * version getter.
- *
- * @return the version
- */
- public String getVersion() {
- return version;
- }
-
- /**
- * version setter.
- *
- * @param version the version to set
- */
- public void setVersion(String version) {
- this.version = version;
- }
-
- @Override
- public int hashCode() {
- final int prime = 31;
- int result = 1;
- result = prime * result + ((name == null) ? 0 : name.hashCode());
- result = prime * result + ((version == null) ? 0 : version.hashCode());
- return result;
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- PolicyModelKey other = (PolicyModelKey) obj;
- if (name == null) {
- if (other.name != null) {
- return false;
- }
- } else if (!name.equals(other.name)) {
- if (!name.matches(other.name)) {
- return false;
- }
- }
- if (version == null) {
- if (other.version != null) {
- return false;
- }
- } else if (!version.equals(other.version)) {
- return false;
- }
- return true;
- }
-}