summaryrefslogtreecommitdiffstats
path: root/models-base/src/main/java
diff options
context:
space:
mode:
authorliamfallon <liam.fallon@est.tech>2019-04-05 15:40:15 +0000
committerliamfallon <liam.fallon@est.tech>2019-04-05 15:40:15 +0000
commit69bc7db0edc751d3936b92c4bdf1ee74dfa4da57 (patch)
treec101dc83cb3e135161dcd6445ca7bcd58e7d62e8 /models-base/src/main/java
parent38cc81922273039d2d32979123bb83a15c49debf (diff)
Complete filters for Database Fetches
This review completes the implementaiton of the filters for fetching policy types, policies, and PDP groups from the database. It also fixes bugs in Policy type creation. Yaml in some of the policy type examples modified so that it is syntatically correct. Proeprties now stored as a blob in DB as they can be big. Issue-ID: POLICY-1095 Change-Id: I6aef88ee2905afa58d778d82832f2b55d794fe9c Signed-off-by: liamfallon <liam.fallon@est.tech>
Diffstat (limited to 'models-base/src/main/java')
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java42
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfObjectFiler.java40
-rw-r--r--models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java84
3 files changed, 126 insertions, 40 deletions
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java
index 47238fc40..7bdced77b 100644
--- a/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfNameVersion.java
@@ -20,6 +20,9 @@
package org.onap.policy.models.base;
+import org.apache.commons.lang3.ObjectUtils;
+import org.onap.policy.common.utils.validation.Version;
+
/**
* An interface that forces a POJO to have getName() and getVersion() methods.
*
@@ -33,4 +36,43 @@ public interface PfNameVersion {
public String getVersion();
public void setVersion(final String version);
+
+ /**
+ * COmpare two name version implementation objects.
+ *
+ * @param left the left name/version implementation
+ * @param right the right name/version implementation
+ * @return the comparison resilt
+ */
+ public default int compareNameVersion(final PfNameVersion left, final PfNameVersion right) {
+ if (left == null && right == null) {
+ return 0;
+ }
+
+ if (left == null) {
+ return 1;
+ }
+
+ if (right == null) {
+ return -1;
+ }
+
+ int result = ObjectUtils.compare(left.getName(), right.getName());
+ if (result != 0) {
+ return result;
+ }
+
+ if (left.getVersion() == null && right.getVersion() == null) {
+ return 0;
+ }
+
+ if (left.getVersion() == null) {
+ return 1;
+ }
+
+ if (right.getVersion() == null) {
+ return -1;
+ }
+ return new Version(left.getVersion()).compareTo(new Version(right.getVersion()));
+ }
}
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfObjectFiler.java b/models-base/src/main/java/org/onap/policy/models/base/PfObjectFiler.java
deleted file mode 100644
index f1481bf3c..000000000
--- a/models-base/src/main/java/org/onap/policy/models/base/PfObjectFiler.java
+++ /dev/null
@@ -1,40 +0,0 @@
-/*-
- * ============LICENSE_START=======================================================
- * 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.
- * 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.
- *
- * SPDX-License-Identifier: Apache-2.0
- * ============LICENSE_END=========================================================
- */
-
-package org.onap.policy.models.base;
-
-import java.util.List;
-
-/**
- * Interface for filtering a list of concepts.
- *
- * @author Liam Fallon (liam.fallon@est.tech)
- */
-@FunctionalInterface
-public interface PfObjectFiler<T> {
- /**
- * Filter an incoming list, removing items that do not match the filter.
- *
- * @param originalList the original list
- * @return the filtered list
- */
- public List<T> filter(final List<T> originalList);
-
-}
diff --git a/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java b/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
new file mode 100644
index 000000000..a377c24be
--- /dev/null
+++ b/models-base/src/main/java/org/onap/policy/models/base/PfObjectFilter.java
@@ -0,0 +1,84 @@
+/*-
+ * ============LICENSE_START=======================================================
+ * 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.
+ * 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.
+ *
+ * SPDX-License-Identifier: Apache-2.0
+ * ============LICENSE_END=========================================================
+ */
+
+package org.onap.policy.models.base;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import lombok.NonNull;
+
+/**
+ * Interface for filtering a list of concepts.
+ *
+ * @author Liam Fallon (liam.fallon@est.tech)
+ */
+@FunctionalInterface
+public interface PfObjectFilter<T extends Comparable<T>> {
+ /**
+ * Filter an incoming list, removing items that do not match the filter.
+ *
+ * @param originalList the original list
+ * @return the filtered list
+ */
+ public List<T> filter(final List<T> originalList);
+
+ /**
+ * Check if a value matches a regular expression.
+ *
+ * @param value the incoming value to check
+ * @param regexp the regular expression to check against
+ * @return match or not
+ */
+ public default boolean filterOnRegexp(@NonNull final String value, @NonNull final String regexp) {
+ return value.matches(regexp);
+ }
+
+ /**
+ * Sort an incoming list and remove all but the latest version of each concept.
+ *
+ * @param originalList the incoming list
+ * @return the filtered list
+ */
+ public default List<T> latestVersionFilter(final List<T> originalList) {
+ List<T> filteredList = new ArrayList<>();
+ Collections.sort(filteredList);
+
+ List<T> filteredOutList = new ArrayList<>();
+
+ for (int i = 1; i < filteredList.size(); i++) {
+ // Get the current and last element
+ T thisElement = filteredList.get(i);
+ T lastElement = filteredList.get(i - 1);
+
+ // The list is sorted so if the last element name is the same as the current element name, the last element
+ // should be removed
+ if (((PfNameVersion)thisElement).getName().equals(((PfNameVersion)lastElement).getName())) {
+ filteredOutList.add(lastElement);
+ }
+ }
+
+ // We can now remove these elements
+ filteredList.removeAll(filteredOutList);
+
+ return filteredList;
+ }
+}