From c1b6222fd1a32bf1cf10afa72bf8c3dabd6be112 Mon Sep 17 00:00:00 2001 From: PatrikBuhr Date: Tue, 28 Dec 2021 13:07:14 +0100 Subject: A1 Policy Management Sorting of compatible policy type IDs Issue-ID: CCSDK-3495 Signed-off-by: PatrikBuhr Change-Id: I9b092b82a24e951f0ac1f446b37cc0db2d644e3a --- a1-policy-management/api/pms-api.json | 2 +- a1-policy-management/api/pms-api.yaml | 3 ++- .../controllers/v2/PolicyController.java | 3 ++- .../repository/PolicyType.java | 20 +++++++++++++++++++ .../repository/PolicyTypes.java | 23 ++++++++-------------- docs/offeredapis/swagger/pms-api.json | 2 +- docs/offeredapis/swagger/pms-api.yaml | 3 ++- 7 files changed, 36 insertions(+), 20 deletions(-) diff --git a/a1-policy-management/api/pms-api.json b/a1-policy-management/api/pms-api.json index a8a444f7..0ba147bb 100644 --- a/a1-policy-management/api/pms-api.json +++ b/a1-policy-management/api/pms-api.json @@ -567,7 +567,7 @@ "schema": {"type": "string"}, "in": "query", "name": "compatible_with_version", - "description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around.", + "description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.", "required": false } ], diff --git a/a1-policy-management/api/pms-api.yaml b/a1-policy-management/api/pms-api.yaml index c8274689..9aa945e4 100644 --- a/a1-policy-management/api/pms-api.yaml +++ b/a1-policy-management/api/pms-api.yaml @@ -304,7 +304,8 @@ paths: in: query description: Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example - version 1.9.1 is compatible with 1.0.0 but not the other way around. + version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching + types will be returned sorted in ascending order. required: false style: form explode: true diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java index 9945e0ab..5f2f6193 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/controllers/v2/PolicyController.java @@ -141,7 +141,8 @@ public class PolicyController { @Parameter(name = Consts.COMPATIBLE_WITH_VERSION_PARAM, required = false, // description = "Select types that are compatible with the given version. This parameter is only applicable in conjunction with " + Consts.TYPE_NAME_PARAM - + ". As an example version 1.9.1 is compatible with 1.0.0 but not the other way around.") // + + ". As an example version 1.9.1 is compatible with 1.0.0 but not the other way around." + + " Matching types will be returned sorted in ascending order.") // @RequestParam(name = Consts.COMPATIBLE_WITH_VERSION_PARAM, required = false) String compatibleWithVersion ) throws ServiceException { diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyType.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyType.java index 3a5bdd95..14c9f580 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyType.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyType.java @@ -62,6 +62,18 @@ public class PolicyType { throw new ServiceException("Syntax error in " + version, HttpStatus.BAD_REQUEST); } } + + public int compareTo(Version other) { + if (major != other.major) + return major - other.major; + if (minor != other.minor) + return minor - other.minor; + return patch - other.patch; + } + + public boolean isCompatibleWith(Version other) { + return (major == other.major && minor >= other.minor); + } } @Getter @@ -98,4 +110,12 @@ public class PolicyType { return TypeId.ofString(getId()); } + public Version getVersion() { + try { + return Version.ofString(getTypeId().getVersion()); + } catch (ServiceException e) { + return new Version(0, 0, 0); + } + } + } diff --git a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java index 53dc55db..14acca95 100644 --- a/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java +++ b/a1-policy-management/src/main/java/org/onap/ccsdk/oran/a1policymanagementservice/repository/PolicyTypes.java @@ -33,6 +33,7 @@ import java.nio.file.Path; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Vector; @@ -89,7 +90,9 @@ public class PolicyTypes { * @param types the types to select from * @param typeName select types with given type name * @param compatibleWithVersion select types that are compatible with given - * version string (major.minor.patch) + * version string (major.minor.patch). + * Matching types will be sorted in ascending + * order. * @return the types that matches given criterias * @throws ServiceException if there are errors in the given input */ @@ -172,26 +175,16 @@ public class PolicyTypes { return result; } - private static boolean isTypeCompatibleWithVersion(PolicyType type, PolicyType.Version version) { - try { - PolicyType.TypeId typeId = type.getTypeId(); - PolicyType.Version typeVersion = PolicyType.Version.ofString(typeId.getVersion()); - return (typeVersion.major == version.major && typeVersion.minor >= version.minor); - } catch (Exception e) { - logger.warn("Ignoring type with syntactically incorrect type ID: {}", type.getId()); - return false; - } - } - private static Collection filterCompatibleWithVersion(Collection types, String versionStr) throws ServiceException { - Collection result = new ArrayList<>(); - PolicyType.Version otherVersion = PolicyType.Version.ofString(versionStr); + List result = new ArrayList<>(); + PolicyType.Version requestedVersion = PolicyType.Version.ofString(versionStr); for (PolicyType type : types) { - if (isTypeCompatibleWithVersion(type, otherVersion)) { + if (type.getVersion().isCompatibleWith(requestedVersion)) { result.add(type); } } + result.sort((left, right) -> left.getVersion().compareTo(right.getVersion())); return result; } diff --git a/docs/offeredapis/swagger/pms-api.json b/docs/offeredapis/swagger/pms-api.json index a8a444f7..0ba147bb 100644 --- a/docs/offeredapis/swagger/pms-api.json +++ b/docs/offeredapis/swagger/pms-api.json @@ -567,7 +567,7 @@ "schema": {"type": "string"}, "in": "query", "name": "compatible_with_version", - "description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around.", + "description": "Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching types will be returned sorted in ascending order.", "required": false } ], diff --git a/docs/offeredapis/swagger/pms-api.yaml b/docs/offeredapis/swagger/pms-api.yaml index c8274689..9aa945e4 100644 --- a/docs/offeredapis/swagger/pms-api.yaml +++ b/docs/offeredapis/swagger/pms-api.yaml @@ -304,7 +304,8 @@ paths: in: query description: Select types that are compatible with the given version. This parameter is only applicable in conjunction with type_name. As an example - version 1.9.1 is compatible with 1.0.0 but not the other way around. + version 1.9.1 is compatible with 1.0.0 but not the other way around. Matching + types will be returned sorted in ascending order. required: false style: form explode: true -- cgit 1.2.3-korg