Loading src/main/java/org/etsi/osl/tmf/util/ServiceSpecCharacteristicValueValidator.java +39 −7 Original line number Diff line number Diff line Loading @@ -18,10 +18,6 @@ public class ServiceSpecCharacteristicValueValidator { } public boolean isTypeInvalid() { String regex = serviceSpecCharacteristicValue.getRegex(); if (regex == null || regex.isBlank()) { return false; } Any value = serviceSpecCharacteristicValue.getValue(); if (value == null) { return false; Loading @@ -30,11 +26,47 @@ public class ServiceSpecCharacteristicValueValidator { if (stringValue == null || stringValue.isBlank()) { return false; } try { LocalDateTime.parse(stringValue, DateTimeFormatter.ofPattern(regex)); String regex = serviceSpecCharacteristicValue.getRegex(); if (regex != null && !regex.isBlank()) { return !isRegexValid(stringValue, regex); } if (serviceSpecCharacteristicValue.getValueType() != null) { return !isValueTypeValid(stringValue); } return false; } private boolean isRegexValid(String value, String regex) { try { LocalDateTime.parse(value, DateTimeFormatter.ofPattern(regex)); return true; } catch (IllegalArgumentException | DateTimeParseException e) { return !stringValue.matches(regex); return value.matches(regex); } } private boolean isValueTypeValid(String value) { final String INTEGER_REGEX = "[-+]?\\d+"; final String FLOAT_REGEX = "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?"; final String BOOLEAN_REGEX = "(?i)true|false"; final DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); try { return switch (EValueType.getEnum(serviceSpecCharacteristicValue.getValueType())) { case INTEGER, SMALLINT, lONGINT -> value.matches(INTEGER_REGEX); case FLOAT -> value.matches(FLOAT_REGEX); case BOOLEAN -> value.matches(BOOLEAN_REGEX) || value.matches(INTEGER_REGEX); case TIMESTAMP -> { try { LocalDateTime.parse(value, ISO_DATE_TIME); yield true; } catch (DateTimeParseException e) { yield false; } } default -> true; }; } catch (IllegalArgumentException e) { return false; } } Loading src/test/resources/reposervices/scm633/testServiceSpecInvalidTypes.json +11 −11 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -57,7 +57,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "INTEGER", "valueType": null, "validFor": null, "value": { "value": "not an integer", Loading @@ -80,7 +80,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -107,7 +107,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -134,7 +134,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -161,7 +161,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -188,7 +188,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -219,7 +219,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "FLOAT", "valueType": null, "validFor": null, "value": { "value": "127.0.0.1", Loading Loading @@ -269,7 +269,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "(?i)true|false", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -296,7 +296,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -327,7 +327,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "TIMESTAMP", "valueType": null, "validFor": null, "value": { "value": "13:38:01 2025/09/03", Loading src/test/resources/reposervices/scm633/testServiceSpecValidTypes.json +10 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -57,7 +57,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "INTEGER", "valueType": null, "validFor": null, "value": { "value": "-0", Loading @@ -80,7 +80,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -107,7 +107,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -134,7 +134,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -161,7 +161,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -188,7 +188,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -219,7 +219,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "FLOAT", "valueType": null, "validFor": null, "value": { "value": "1234.567890", Loading Loading @@ -269,7 +269,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "(?i)true|false", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -300,7 +300,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "BOOLEAN", "valueType": null, "validFor": null, "value": { "value": "true", Loading Loading
src/main/java/org/etsi/osl/tmf/util/ServiceSpecCharacteristicValueValidator.java +39 −7 Original line number Diff line number Diff line Loading @@ -18,10 +18,6 @@ public class ServiceSpecCharacteristicValueValidator { } public boolean isTypeInvalid() { String regex = serviceSpecCharacteristicValue.getRegex(); if (regex == null || regex.isBlank()) { return false; } Any value = serviceSpecCharacteristicValue.getValue(); if (value == null) { return false; Loading @@ -30,11 +26,47 @@ public class ServiceSpecCharacteristicValueValidator { if (stringValue == null || stringValue.isBlank()) { return false; } try { LocalDateTime.parse(stringValue, DateTimeFormatter.ofPattern(regex)); String regex = serviceSpecCharacteristicValue.getRegex(); if (regex != null && !regex.isBlank()) { return !isRegexValid(stringValue, regex); } if (serviceSpecCharacteristicValue.getValueType() != null) { return !isValueTypeValid(stringValue); } return false; } private boolean isRegexValid(String value, String regex) { try { LocalDateTime.parse(value, DateTimeFormatter.ofPattern(regex)); return true; } catch (IllegalArgumentException | DateTimeParseException e) { return !stringValue.matches(regex); return value.matches(regex); } } private boolean isValueTypeValid(String value) { final String INTEGER_REGEX = "[-+]?\\d+"; final String FLOAT_REGEX = "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?"; final String BOOLEAN_REGEX = "(?i)true|false"; final DateTimeFormatter ISO_DATE_TIME = DateTimeFormatter.ofPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); try { return switch (EValueType.getEnum(serviceSpecCharacteristicValue.getValueType())) { case INTEGER, SMALLINT, lONGINT -> value.matches(INTEGER_REGEX); case FLOAT -> value.matches(FLOAT_REGEX); case BOOLEAN -> value.matches(BOOLEAN_REGEX) || value.matches(INTEGER_REGEX); case TIMESTAMP -> { try { LocalDateTime.parse(value, ISO_DATE_TIME); yield true; } catch (DateTimeParseException e) { yield false; } } default -> true; }; } catch (IllegalArgumentException e) { return false; } } Loading
src/test/resources/reposervices/scm633/testServiceSpecInvalidTypes.json +11 −11 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -57,7 +57,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "INTEGER", "valueType": null, "validFor": null, "value": { "value": "not an integer", Loading @@ -80,7 +80,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -107,7 +107,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -134,7 +134,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -161,7 +161,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -188,7 +188,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -219,7 +219,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "FLOAT", "valueType": null, "validFor": null, "value": { "value": "127.0.0.1", Loading Loading @@ -269,7 +269,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "(?i)true|false", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -296,7 +296,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "yyyy-MM-dd'T'HH:mm:ss.SSSZ", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -327,7 +327,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "TIMESTAMP", "valueType": null, "validFor": null, "value": { "value": "13:38:01 2025/09/03", Loading
src/test/resources/reposervices/scm633/testServiceSpecValidTypes.json +10 −10 Original line number Diff line number Diff line Loading @@ -26,7 +26,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -57,7 +57,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "INTEGER", "valueType": null, "validFor": null, "value": { "value": "-0", Loading @@ -80,7 +80,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -107,7 +107,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -134,7 +134,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -161,7 +161,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d+", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading @@ -188,7 +188,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "[-+]?\\d*([.,]\\d+)?([eE][-+]?\\d+)?", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -219,7 +219,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "FLOAT", "valueType": null, "validFor": null, "value": { "value": "1234.567890", Loading Loading @@ -269,7 +269,7 @@ { "isDefault": true, "rangeInterval": null, "regex": "(?i)true|false", "regex": null, "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, Loading Loading @@ -300,7 +300,7 @@ "unitOfMeasure": "N/A", "valueFrom": null, "valueTo": null, "valueType": "BOOLEAN", "valueType": null, "validFor": null, "value": { "value": "true", Loading