From 8de92af2ec75999c17b78e85c696ac74650be189 Mon Sep 17 00:00:00 2001
From: Nicolas Capponi <nicolas.capponi@forgerock.com>
Date: Fri, 10 Oct 2014 08:52:07 +0000
Subject: [PATCH] OPENDJ-1592 CR-4782 Migrate time-based matching rules
---
opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/TimeBasedMatchingRulesImpl.java | 65 +++++++++++---------------------
1 files changed, 22 insertions(+), 43 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/TimeBasedMatchingRulesImpl.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/TimeBasedMatchingRulesImpl.java
index 1b85211..2ca1c55 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/TimeBasedMatchingRulesImpl.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/schema/TimeBasedMatchingRulesImpl.java
@@ -121,30 +121,9 @@
}
}
- int multiplyByTenAndAddUnits(int number, byte b) {
- switch (b) {
- case '0':
- return number * 10;
- case '1':
- return number * 10 + 1;
- case '2':
- return number * 10 + 2;
- case '3':
- return number * 10 + 3;
- case '4':
- return number * 10 + 4;
- case '5':
- return number * 10 + 5;
- case '6':
- return number * 10 + 6;
- case '7':
- return number * 10 + 7;
- case '8':
- return number * 10 + 8;
- case '9':
- return number * 10 + 9;
- }
- return number;
+ /** Utility method to convert the provided integer and the provided byte representing a digit to an integer. */
+ int multiplyByTenAndAddUnits(int number, byte digitByte) {
+ return number * 10 + (digitByte - 48);
}
}
@@ -409,61 +388,57 @@
if (isDigit((char) b)) {
number = multiplyByTenAndAddUnits(number, b);
} else {
- LocalizableMessage message = null;
switch (b) {
case 's':
if (second != initValue) {
- message = WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT.get(assertionValue, date);
+ decodeError(WARN_ATTR_DUPLICATE_SECOND_ASSERTION_FORMAT.get(assertionValue, date));
} else {
second = number;
}
break;
case 'm':
if (minute != initValue) {
- message = WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT.get(assertionValue, date);
+ decodeError(WARN_ATTR_DUPLICATE_MINUTE_ASSERTION_FORMAT.get(assertionValue, date));
} else {
minute = number;
}
break;
case 'h':
if (hour != initValue) {
- message = WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT.get(assertionValue, date);
+ decodeError(WARN_ATTR_DUPLICATE_HOUR_ASSERTION_FORMAT.get(assertionValue, date));
} else {
hour = number;
}
break;
case 'D':
if (number == 0) {
- message = WARN_ATTR_INVALID_DATE_ASSERTION_FORMAT.get(assertionValue, number);
+ decodeError(WARN_ATTR_INVALID_DATE_ASSERTION_FORMAT.get(assertionValue, number));
} else if (date != initDate) {
- message = WARN_ATTR_DUPLICATE_DATE_ASSERTION_FORMAT.get(assertionValue, date);
+ decodeError(WARN_ATTR_DUPLICATE_DATE_ASSERTION_FORMAT.get(assertionValue, date));
} else {
date = number;
}
break;
case 'M':
if (number == 0) {
- message = WARN_ATTR_INVALID_MONTH_ASSERTION_FORMAT.get(assertionValue, number);
+ decodeError(WARN_ATTR_INVALID_MONTH_ASSERTION_FORMAT.get(assertionValue, number));
} else if (month != initValue) {
- message = WARN_ATTR_DUPLICATE_MONTH_ASSERTION_FORMAT.get(assertionValue, month);
+ decodeError(WARN_ATTR_DUPLICATE_MONTH_ASSERTION_FORMAT.get(assertionValue, month));
} else {
month = number;
}
break;
case 'Y':
if (number == 0) {
- message = WARN_ATTR_INVALID_YEAR_ASSERTION_FORMAT.get(assertionValue, number);
+ decodeError(WARN_ATTR_INVALID_YEAR_ASSERTION_FORMAT.get(assertionValue, number));
} else if (year != initDate) {
- message = WARN_ATTR_DUPLICATE_YEAR_ASSERTION_FORMAT.get(assertionValue, year);
+ decodeError(WARN_ATTR_DUPLICATE_YEAR_ASSERTION_FORMAT.get(assertionValue, year));
} else {
year = number;
}
break;
default:
- message = WARN_ATTR_INVALID_PARTIAL_TIME_ASSERTION_FORMAT.get(assertionValue, (char) b);
- }
- if (message != null) {
- throw DecodeException.error(message);
+ decodeError(WARN_ATTR_INVALID_PARTIAL_TIME_ASSERTION_FORMAT.get(assertionValue, (char) b));
}
number = 0;
}
@@ -475,20 +450,20 @@
// -1 values are allowed when these values have not been provided
if (year < 0) {
// A future date is allowed.
- throw DecodeException.error(WARN_ATTR_INVALID_YEAR_ASSERTION_FORMAT.get(assertionValue, year));
+ decodeError(WARN_ATTR_INVALID_YEAR_ASSERTION_FORMAT.get(assertionValue, year));
}
if (isDateInvalid(date, month, year)) {
- throw DecodeException.error(WARN_ATTR_INVALID_DATE_ASSERTION_FORMAT.get(assertionValue, date));
+ decodeError(WARN_ATTR_INVALID_DATE_ASSERTION_FORMAT.get(assertionValue, date));
}
if (hour < initValue || hour > 23) {
- throw DecodeException.error(WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT.get(assertionValue, hour));
+ decodeError(WARN_ATTR_INVALID_HOUR_ASSERTION_FORMAT.get(assertionValue, hour));
}
if (minute < initValue || minute > 59) {
- throw DecodeException.error(WARN_ATTR_INVALID_MINUTE_ASSERTION_FORMAT.get(assertionValue, minute));
+ decodeError(WARN_ATTR_INVALID_MINUTE_ASSERTION_FORMAT.get(assertionValue, minute));
}
// Consider leap seconds.
if (second < initValue || second > 60) {
- throw DecodeException.error(WARN_ATTR_INVALID_SECOND_ASSERTION_FORMAT.get(assertionValue, second));
+ decodeError(WARN_ATTR_INVALID_SECOND_ASSERTION_FORMAT.get(assertionValue, second));
}
// Since we reached here we have a valid assertion value.
@@ -498,6 +473,10 @@
.append(date).append(month).append(year).toByteString();
}
+ private void decodeError(LocalizableMessage message) throws DecodeException {
+ throw DecodeException.error(message);
+ }
+
private boolean isDateInvalid(int date, int month, int year) {
switch (date) {
case 29:
--
Gitblit v1.10.0