summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJim Hahn <jrh3@att.com>2021-02-08 23:20:16 +0000
committerGerrit Code Review <gerrit@onap.org>2021-02-08 23:20:16 +0000
commit21965a91bf711035d3c60736d63c5d67211c301e (patch)
tree540b5a6b7daeb812ac19e966d3d22c17fc25bd84
parent52b0dc4809e968c026fe929df64f4abc5fa87780 (diff)
parent479e03a28380d98ebd71b919797733276e2ef003 (diff)
Merge "Make filters on TOSCA entities generic"
-rw-r--r--main/src/main/java/org/onap/policy/pap/main/rest/SessionData.java77
-rw-r--r--main/src/test/java/org/onap/policy/pap/main/rest/TestSessionData.java29
2 files changed, 51 insertions, 55 deletions
diff --git a/main/src/main/java/org/onap/policy/pap/main/rest/SessionData.java b/main/src/main/java/org/onap/policy/pap/main/rest/SessionData.java
index 930302a2..b9807c79 100644
--- a/main/src/main/java/org/onap/policy/pap/main/rest/SessionData.java
+++ b/main/src/main/java/org/onap/policy/pap/main/rest/SessionData.java
@@ -1,4 +1,4 @@
-/*
+/*-
* ============LICENSE_START=======================================================
* ONAP PAP
* ================================================================================
@@ -40,9 +40,9 @@ import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter.ToscaPolicyFilterBuilder;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter.ToscaTypedEntityFilterBuilder;
import org.onap.policy.pap.main.notification.DeploymentStatus;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -54,8 +54,7 @@ public class SessionData {
private static final Logger logger = LoggerFactory.getLogger(SessionData.class);
/**
- * If a version string matches this, then it is just a prefix (i.e., major or
- * major.minor).
+ * If a version string matches this, then it is just a prefix (i.e., major or major.minor).
*/
private static final Pattern VERSION_PREFIX_PAT = Pattern.compile("[^.]+(?:[.][^.]+)?");
@@ -65,14 +64,14 @@ public class SessionData {
private final PolicyModelsProvider dao;
/**
- * Maps a group name to its group data. This accumulates the set of groups to be
- * created and updated when the REST call completes.
+ * Maps a group name to its group data. This accumulates the set of groups to be created and updated when the REST
+ * call completes.
*/
private final Map<String, GroupData> groupCache = new HashMap<>();
/**
- * Maps a policy type to the list of matching groups. Every group appearing within
- * this map has a corresponding entry in {@link #groupCache}.
+ * Maps a policy type to the list of matching groups. Every group appearing within this map has a corresponding
+ * entry in {@link #groupCache}.
*/
private final Map<ToscaConceptIdentifier, List<GroupData>> type2groups = new HashMap<>();
@@ -108,8 +107,8 @@ public class SessionData {
}
/**
- * Gets the policy type, referenced by an identifier. Loads it from the cache, if
- * possible. Otherwise, gets it from the DB.
+ * Gets the policy type, referenced by an identifier. Loads it from the cache, if possible. Otherwise, gets it from
+ * the DB.
*
* @param desiredType policy type identifier
* @return the specified policy type
@@ -133,8 +132,8 @@ public class SessionData {
}
/**
- * Gets the policy, referenced by an identifier. Loads it from the cache, if possible.
- * Otherwise, gets it from the DB.
+ * Gets the policy, referenced by an identifier. Loads it from the cache, if possible. Otherwise, gets it from the
+ * DB.
*
* @param desiredPolicy policy identifier
* @return the specified policy
@@ -144,7 +143,8 @@ public class SessionData {
ToscaPolicy policy = policyCache.get(desiredPolicy);
if (policy == null) {
- ToscaPolicyFilterBuilder filterBuilder = ToscaPolicyFilter.builder().name(desiredPolicy.getName());
+ ToscaTypedEntityFilterBuilder<ToscaPolicy> filterBuilder =
+ ToscaTypedEntityFilter.<ToscaPolicy>builder().name(desiredPolicy.getName());
setPolicyFilterVersion(filterBuilder, desiredPolicy.getVersion());
List<ToscaPolicy> lst = dao.getFilteredPolicyList(filterBuilder.build());
@@ -168,15 +168,16 @@ public class SessionData {
* @param filterBuilder filter builder whose version should be set
* @param desiredVersion desired version
*/
- private void setPolicyFilterVersion(ToscaPolicyFilterBuilder filterBuilder, String desiredVersion) {
+ private void setPolicyFilterVersion(ToscaTypedEntityFilterBuilder<ToscaPolicy> filterBuilder,
+ String desiredVersion) {
if (desiredVersion == null) {
// no version specified - get the latest
- filterBuilder.version(ToscaPolicyFilter.LATEST_VERSION);
+ filterBuilder.version(ToscaTypedEntityFilter.LATEST_VERSION);
} else if (isVersionPrefix(desiredVersion)) {
// version prefix provided - match the prefix and then pick the latest
- filterBuilder.versionPrefix(desiredVersion + ".").version(ToscaPolicyFilter.LATEST_VERSION);
+ filterBuilder.versionPrefix(desiredVersion + ".").version(ToscaTypedEntityFilter.LATEST_VERSION);
} else {
// must be an exact match
@@ -188,16 +189,14 @@ public class SessionData {
* Determines if a version contains only a prefix.
*
* @param version version to inspect
- * @return {@code true} if the version contains only a prefix, {@code false} if it is
- * fully qualified
+ * @return {@code true} if the version contains only a prefix, {@code false} if it is fully qualified
*/
public static boolean isVersionPrefix(String version) {
return VERSION_PREFIX_PAT.matcher(version).matches();
}
/**
- * Adds an update and state-change to the sets, replacing any previous entries for the
- * given PDP.
+ * Adds an update and state-change to the sets, replacing any previous entries for the given PDP.
*
* @param update the update to be added
* @param change the state-change to be added
@@ -208,25 +207,23 @@ public class SessionData {
}
logger.info("add update and state-change {} {} {} policies={}", update.getName(), update.getPdpGroup(),
- update.getPdpSubgroup(), update.getPolicies().size());
+ update.getPdpSubgroup(), update.getPolicies().size());
pdpRequests.put(update.getName(), Pair.of(update, change));
}
/**
- * Adds an update to the set of updates, replacing any previous entry for the given
- * PDP.
+ * Adds an update to the set of updates, replacing any previous entry for the given PDP.
*
* @param update the update to be added
*/
public void addUpdate(PdpUpdate update) {
logger.info("add update {} {} {} policies={}", update.getName(), update.getPdpGroup(), update.getPdpSubgroup(),
- update.getPolicies().size());
+ update.getPolicies().size());
pdpRequests.compute(update.getName(), (name, data) -> Pair.of(update, (data == null ? null : data.getRight())));
}
/**
- * Adds a state-change to the set of state-change requests, replacing any previous
- * entry for the given PDP.
+ * Adds a state-change to the set of state-change requests, replacing any previous entry for the given PDP.
*
* @param change the state-change to be added
*/
@@ -260,7 +257,7 @@ public class SessionData {
*/
public List<PdpUpdate> getPdpUpdates() {
return pdpRequests.values().stream().filter(req -> req.getLeft() != null).map(Pair::getLeft)
- .collect(Collectors.toList());
+ .collect(Collectors.toList());
}
/**
@@ -270,7 +267,7 @@ public class SessionData {
*/
public List<PdpStateChange> getPdpStateChanges() {
return pdpRequests.values().stream().filter(req -> req.getRight() != null).map(Pair::getRight)
- .collect(Collectors.toList());
+ .collect(Collectors.toList());
}
/**
@@ -343,14 +340,13 @@ public class SessionData {
*/
public List<PdpGroup> getActivePdpGroupsByPolicyType(ToscaConceptIdentifier type) throws PfModelException {
/*
- * Cannot use computeIfAbsent() because the enclosed code throws an unchecked
- * exception and handling that would obfuscate the code too much, thus disabling
- * the sonar.
+ * Cannot use computeIfAbsent() because the enclosed code throws an unchecked exception and handling that would
+ * obfuscate the code too much, thus disabling the sonar.
*/
List<GroupData> data = type2groups.get(type); // NOSONAR
if (data == null) {
PdpGroupFilter filter = PdpGroupFilter.builder().policyTypeList(Collections.singletonList(type))
- .groupState(PdpState.ACTIVE).build();
+ .groupState(PdpState.ACTIVE).build();
List<PdpGroup> groups = dao.getFilteredPdpGroups(filter);
@@ -383,6 +379,7 @@ public class SessionData {
/**
* Update the DB with the changes.
+ *
* @param notification notification to which to add policy status
*
* @throws PfModelException if an error occurred
@@ -399,7 +396,7 @@ public class SessionData {
// update existing groups
List<GroupData> updated =
- groupCache.values().stream().filter(GroupData::isUpdated).collect(Collectors.toList());
+ groupCache.values().stream().filter(GroupData::isUpdated).collect(Collectors.toList());
if (!updated.isEmpty()) {
if (logger.isInfoEnabled()) {
updated.forEach(group -> logger.info("updating DB group {}", group.getGroup().getName()));
@@ -412,8 +409,7 @@ public class SessionData {
}
/**
- * Deletes a group from the DB, immediately (i.e., without caching the request to be
- * executed later).
+ * Deletes a group from the DB, immediately (i.e., without caching the request to be executed later).
*
* @param group the group to be deleted
* @throws PfModelException if an error occurred
@@ -433,7 +429,7 @@ public class SessionData {
* @throws PfModelException if an error occurred
*/
protected void trackDeploy(ToscaConceptIdentifier policyId, Collection<String> pdps, String pdpGroup,
- String pdpType) throws PfModelException {
+ String pdpType) throws PfModelException {
addData(policyId, pdps, pdpGroup, pdpType, true);
}
@@ -447,7 +443,7 @@ public class SessionData {
* @throws PfModelException if an error occurred
*/
protected void trackUndeploy(ToscaConceptIdentifier policyId, Collection<String> pdps, String pdpGroup,
- String pdpType) throws PfModelException {
+ String pdpType) throws PfModelException {
addData(policyId, pdps, pdpGroup, pdpType, false);
}
@@ -456,14 +452,13 @@ public class SessionData {
*
* @param policyId ID of the policy being deployed/undeployed
* @param pdps PDPs to which the policy is being deployed/undeployed
- * @param deploy {@code true} if the policy is being deployed, {@code false} if
- * undeployed
+ * @param deploy {@code true} if the policy is being deployed, {@code false} if undeployed
* @param pdpGroup PdpGroup containing the PDP of interest
* @param pdpType PDP type (i.e., PdpSubGroup) containing the PDP of interest
* @throws PfModelException if an error occurred
*/
private void addData(ToscaConceptIdentifier policyId, Collection<String> pdps, String pdpGroup, String pdpType,
- boolean deploy) throws PfModelException {
+ boolean deploy) throws PfModelException {
// delete all records whose "deploy" flag is the opposite of what we want
deployStatus.deleteDeployment(policyId, !deploy);
diff --git a/main/src/test/java/org/onap/policy/pap/main/rest/TestSessionData.java b/main/src/test/java/org/onap/policy/pap/main/rest/TestSessionData.java
index 3fbe4785..6b76c258 100644
--- a/main/src/test/java/org/onap/policy/pap/main/rest/TestSessionData.java
+++ b/main/src/test/java/org/onap/policy/pap/main/rest/TestSessionData.java
@@ -1,4 +1,4 @@
-/*
+/*-
* ============LICENSE_START=======================================================
* ONAP PAP
* ================================================================================
@@ -59,8 +59,8 @@ import org.onap.policy.models.provider.PolicyModelsProvider;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifier;
import org.onap.policy.models.tosca.authorative.concepts.ToscaConceptIdentifierOptVersion;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicy;
-import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyFilter;
import org.onap.policy.models.tosca.authorative.concepts.ToscaPolicyType;
+import org.onap.policy.models.tosca.authorative.concepts.ToscaTypedEntityFilter;
import org.onap.policy.pap.main.notification.DeploymentStatus;
public class TestSessionData extends ProviderSuper {
@@ -136,9 +136,9 @@ public class TestSessionData extends ProviderSuper {
ident.setVersion(null);
assertSame(policy1, session.getPolicy(ident));
- ToscaPolicyFilter filter = getPolicyFilter();
+ ToscaTypedEntityFilter<ToscaPolicy> filter = getPolicyFilter();
assertEquals(POLICY_NAME, filter.getName());
- assertEquals(ToscaPolicyFilter.LATEST_VERSION, filter.getVersion());
+ assertEquals(ToscaTypedEntityFilter.LATEST_VERSION, filter.getVersion());
assertEquals(null, filter.getVersionPrefix());
// retrieve a second time using full version - should use cache
@@ -154,9 +154,9 @@ public class TestSessionData extends ProviderSuper {
ident.setVersion("1");
assertSame(policy1, session.getPolicy(ident));
- ToscaPolicyFilter filter = getPolicyFilter();
+ ToscaTypedEntityFilter<ToscaPolicy> filter = getPolicyFilter();
assertEquals(POLICY_NAME, filter.getName());
- assertEquals(ToscaPolicyFilter.LATEST_VERSION, filter.getVersion());
+ assertEquals(ToscaTypedEntityFilter.LATEST_VERSION, filter.getVersion());
assertEquals("1.", filter.getVersionPrefix());
// retrieve a second time using full version - should use cache
@@ -172,7 +172,7 @@ public class TestSessionData extends ProviderSuper {
ident.setVersion(POLICY_VERSION);
assertSame(policy1, session.getPolicy(ident));
- ToscaPolicyFilter filter = getPolicyFilter();
+ ToscaTypedEntityFilter<ToscaPolicy> filter = getPolicyFilter();
assertEquals(POLICY_NAME, filter.getName());
assertEquals(POLICY_VERSION, filter.getVersion());
assertEquals(null, filter.getVersionPrefix());
@@ -273,7 +273,7 @@ public class TestSessionData extends ProviderSuper {
PdpUpdate update = makeUpdate(PDP1);
PdpStateChange change = makeStateChange(PDP2);
assertThatIllegalArgumentException().isThrownBy(() -> session.addRequests(update, change))
- .withMessage("PDP name mismatch pdp_1, pdp_2");
+ .withMessage("PDP name mismatch pdp_1, pdp_2");
}
@Test
@@ -356,7 +356,7 @@ public class TestSessionData extends ProviderSuper {
// cannot overwrite
assertThatIllegalStateException().isThrownBy(() -> session.create(group1))
- .withMessage("group already cached: groupA");
+ .withMessage("group already cached: groupA");
}
@Test
@@ -399,7 +399,7 @@ public class TestSessionData extends ProviderSuper {
when(dao.getFilteredPdpGroups(any())).thenReturn(Arrays.asList(group1));
assertThatIllegalStateException().isThrownBy(() -> session.update(new PdpGroup(group1)))
- .withMessage("group not cached: groupA");
+ .withMessage("group not cached: groupA");
}
@Test
@@ -557,8 +557,7 @@ public class TestSessionData extends ProviderSuper {
testTrack(false);
}
- protected void testTrack(boolean deploy)
- throws PfModelException {
+ protected void testTrack(boolean deploy) throws PfModelException {
DeploymentStatus status = mock(DeploymentStatus.class);
@@ -610,8 +609,10 @@ public class TestSessionData extends ProviderSuper {
return change;
}
- private ToscaPolicyFilter getPolicyFilter() throws Exception {
- ArgumentCaptor<ToscaPolicyFilter> captor = ArgumentCaptor.forClass(ToscaPolicyFilter.class);
+ private ToscaTypedEntityFilter<ToscaPolicy> getPolicyFilter() throws Exception {
+ @SuppressWarnings("unchecked")
+ ArgumentCaptor<ToscaTypedEntityFilter<ToscaPolicy>> captor =
+ ArgumentCaptor.forClass(ToscaTypedEntityFilter.class);
verify(dao).getFilteredPolicyList(captor.capture());
return captor.getValue();