From 12d6232aec83bb3f6ff6c51cc25eb4fde33bd8e8 Mon Sep 17 00:00:00 2001
From: Jean-Noel Rouvignac <jean-noel.rouvignac@forgerock.com>
Date: Tue, 18 Mar 2014 16:56:07 +0000
Subject: [PATCH] GeneralizedTime.java: Removed duplicated code by extracting methods toInt() and invalidChar().
---
opendj-core/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java | 548 ++++++++----------------------------------------------
1 files changed, 84 insertions(+), 464 deletions(-)
diff --git a/opendj-core/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java b/opendj-core/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
index af61952..6d00abf 100644
--- a/opendj-core/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
+++ b/opendj-core/src/main/java/org/forgerock/opendj/ldap/GeneralizedTime.java
@@ -25,19 +25,7 @@
*/
package org.forgerock.opendj.ldap;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_EMPTY_FRACTION;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_FRACTION_CHAR;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_ILLEGAL_TIME;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_OFFSET;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_NO_TIME_ZONE_INFO;
-import static com.forgerock.opendj.ldap.CoreMessages.WARN_ATTR_SYNTAX_GENERALIZED_TIME_TOO_SHORT;
+import static com.forgerock.opendj.ldap.CoreMessages.*;
import java.util.Calendar;
import java.util.Date;
@@ -45,6 +33,7 @@
import java.util.TimeZone;
import org.forgerock.i18n.LocalizableMessage;
+import org.forgerock.i18n.LocalizableMessageDescriptor.Arg2;
import org.forgerock.i18n.LocalizedIllegalArgumentException;
import org.forgerock.util.Reject;
@@ -156,59 +145,17 @@
// The first four characters are the century and year, and they must
// be numeric digits between 0 and 9.
for (int i = 0; i < 4; i++) {
- switch (valueString.charAt(i)) {
- case '0':
- year = year * 10;
- break;
-
- case '1':
- year = (year * 10) + 1;
- break;
-
- case '2':
- year = (year * 10) + 2;
- break;
-
- case '3':
- year = (year * 10) + 3;
- break;
-
- case '4':
- year = (year * 10) + 4;
- break;
-
- case '5':
- year = (year * 10) + 5;
- break;
-
- case '6':
- year = (year * 10) + 6;
- break;
-
- case '7':
- year = (year * 10) + 7;
- break;
-
- case '8':
- year = (year * 10) + 8;
- break;
-
- case '9':
- year = (year * 10) + 9;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR.get(valueString, String
- .valueOf(valueString.charAt(i)));
- throw new LocalizedIllegalArgumentException(message);
- }
+ char c = valueString.charAt(i);
+ final int val = toInt(c,
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_YEAR, valueString, String.valueOf(c));
+ year = (year * 10) + val;
}
// The next two characters are the month, and they must form the
// string representation of an integer between 01 and 12.
char m1 = valueString.charAt(4);
final char m2 = valueString.charAt(5);
+ final String monthValue = valueString.substring(4, 6);
switch (m1) {
case '0':
// m2 must be a digit between 1 and 9.
@@ -250,10 +197,8 @@
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
- valueString.substring(4, 6));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString, monthValue));
}
break;
case '1':
@@ -272,17 +217,13 @@
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString,
- valueString.substring(4, 6));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString, monthValue));
}
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString, valueString
- .substring(4, 6));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MONTH.get(valueString, monthValue));
}
// The next two characters should be the day of the month, and they
@@ -292,154 +233,25 @@
// year, but we'll let those slide.
final char d1 = valueString.charAt(6);
final char d2 = valueString.charAt(7);
+ final String dayValue = valueString.substring(6, 8);
switch (d1) {
case '0':
// d2 must be a digit between 1 and 9.
- switch (d2) {
- case '1':
- day = 1;
- break;
-
- case '2':
- day = 2;
- break;
-
- case '3':
- day = 3;
- break;
-
- case '4':
- day = 4;
- break;
-
- case '5':
- day = 5;
- break;
-
- case '6':
- day = 6;
- break;
-
- case '7':
- day = 7;
- break;
-
- case '8':
- day = 8;
- break;
-
- case '9':
- day = 9;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, valueString
- .substring(6, 8));
- throw new LocalizedIllegalArgumentException(message);
+ day = toInt(d2, WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY, valueString, dayValue);
+ if (day == 0) {
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, dayValue));
}
break;
case '1':
// d2 must be a digit between 0 and 9.
- switch (d2) {
- case '0':
- day = 10;
- break;
-
- case '1':
- day = 11;
- break;
-
- case '2':
- day = 12;
- break;
-
- case '3':
- day = 13;
- break;
-
- case '4':
- day = 14;
- break;
-
- case '5':
- day = 15;
- break;
-
- case '6':
- day = 16;
- break;
-
- case '7':
- day = 17;
- break;
-
- case '8':
- day = 18;
- break;
-
- case '9':
- day = 19;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, valueString
- .substring(6, 8));
- throw new LocalizedIllegalArgumentException(message);
- }
+ day = 10 + toInt(d2, WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY, valueString, dayValue);
break;
case '2':
// d2 must be a digit between 0 and 9.
- switch (d2) {
- case '0':
- day = 20;
- break;
-
- case '1':
- day = 21;
- break;
-
- case '2':
- day = 22;
- break;
-
- case '3':
- day = 23;
- break;
-
- case '4':
- day = 24;
- break;
-
- case '5':
- day = 25;
- break;
-
- case '6':
- day = 26;
- break;
-
- case '7':
- day = 27;
- break;
-
- case '8':
- day = 28;
- break;
-
- case '9':
- day = 29;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, valueString
- .substring(6, 8));
- throw new LocalizedIllegalArgumentException(message);
- }
+ day = 20 + toInt(d2, WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY, valueString, dayValue);
break;
case '3':
@@ -454,123 +266,28 @@
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, valueString
- .substring(6, 8));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, dayValue));
}
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, valueString
- .substring(6, 8));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_DAY.get(valueString, dayValue));
}
// The next two characters must be the hour, and they must form the
// string representation of an integer between 00 and 23.
final char h1 = valueString.charAt(8);
final char h2 = valueString.charAt(9);
+ final String hourValue = valueString.substring(8, 10);
switch (h1) {
case '0':
- switch (h2) {
- case '0':
- hour = 0;
- break;
-
- case '1':
- hour = 1;
- break;
-
- case '2':
- hour = 2;
- break;
-
- case '3':
- hour = 3;
- break;
-
- case '4':
- hour = 4;
- break;
-
- case '5':
- hour = 5;
- break;
-
- case '6':
- hour = 6;
- break;
-
- case '7':
- hour = 7;
- break;
-
- case '8':
- hour = 8;
- break;
-
- case '9':
- hour = 9;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, valueString
- .substring(8, 10));
- throw new LocalizedIllegalArgumentException(message);
- }
+ hour = toInt(h2, WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR, valueString, hourValue);
break;
case '1':
- switch (h2) {
- case '0':
- hour = 10;
- break;
-
- case '1':
- hour = 11;
- break;
-
- case '2':
- hour = 12;
- break;
-
- case '3':
- hour = 13;
- break;
-
- case '4':
- hour = 14;
- break;
-
- case '5':
- hour = 15;
- break;
-
- case '6':
- hour = 16;
- break;
-
- case '7':
- hour = 17;
- break;
-
- case '8':
- hour = 18;
- break;
-
- case '9':
- hour = 19;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, valueString
- .substring(8, 10));
- throw new LocalizedIllegalArgumentException(message);
- }
+ hour = 10 + toInt(h2, WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR, valueString, hourValue);
break;
case '2':
@@ -592,18 +309,14 @@
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, valueString
- .substring(8, 10));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, hourValue));
}
break;
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, valueString
- .substring(8, 10));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_HOUR.get(valueString, hourValue));
}
// Next, there should be either two digits comprising an integer
@@ -622,60 +335,12 @@
// There must be at least two more characters, and the next one
// must be a digit between 0 and 9.
if (length < 13) {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(m1), 10);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, m1, 10);
}
minute = 10 * (m1 - '0');
-
- switch (valueString.charAt(11)) {
- case '0':
- break;
-
- case '1':
- minute += 1;
- break;
-
- case '2':
- minute += 2;
- break;
-
- case '3':
- minute += 3;
- break;
-
- case '4':
- minute += 4;
- break;
-
- case '5':
- minute += 5;
- break;
-
- case '6':
- minute += 6;
- break;
-
- case '7':
- minute += 7;
- break;
-
- case '8':
- minute += 8;
- break;
-
- case '9':
- minute += 9;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.get(valueString,
- valueString.substring(10, 12));
- throw new LocalizedIllegalArgumentException(message);
- }
+ minute += toInt(valueString.charAt(11),
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE, valueString, valueString.substring(10, 12));
break;
@@ -685,10 +350,7 @@
final TimeZone tz = TIME_ZONE_UTC_OBJ;
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(m1), 10);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, m1, 10);
}
case '+':
@@ -699,10 +361,7 @@
final TimeZone tz = getTimeZoneForOffset(valueString, 10);
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(m1), 10);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, m1, 10);
}
case '.':
@@ -711,10 +370,7 @@
3600000);
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(m1), 10);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, m1, 10);
}
// Next, there should be either two digits comprising an integer
@@ -733,60 +389,12 @@
// There must be at least two more characters, and the next one
// must be a digit between 0 and 9.
if (length < 15) {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(s1), 12);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, s1, 12);
}
second = 10 * (s1 - '0');
-
- switch (valueString.charAt(13)) {
- case '0':
- break;
-
- case '1':
- second += 1;
- break;
-
- case '2':
- second += 2;
- break;
-
- case '3':
- second += 3;
- break;
-
- case '4':
- second += 4;
- break;
-
- case '5':
- second += 5;
- break;
-
- case '6':
- second += 6;
- break;
-
- case '7':
- second += 7;
- break;
-
- case '8':
- second += 8;
- break;
-
- case '9':
- second += 9;
- break;
-
- default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE.get(valueString,
- valueString.substring(12, 14));
- throw new LocalizedIllegalArgumentException(message);
- }
+ second += toInt(valueString.charAt(13),
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_MINUTE, valueString, valueString.substring(12, 14));
break;
@@ -794,17 +402,13 @@
// There must be at least two more characters and the next one
// must be a 0.
if (length < 15) {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(s1), 12);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, s1, 12);
}
if (valueString.charAt(13) != '0') {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND.get(valueString,
- valueString.substring(12, 14));
- throw new LocalizedIllegalArgumentException(message);
+ throw new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_SECOND.get(
+ valueString, valueString.substring(12, 14)));
}
second = 60;
@@ -816,10 +420,7 @@
final TimeZone tz = TIME_ZONE_UTC_OBJ;
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(s1), 12);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, s1, 12);
}
case '+':
@@ -830,10 +431,7 @@
final TimeZone tz = getTimeZoneForOffset(valueString, 12);
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(s1), 12);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, s1, 12);
}
case '.':
@@ -842,10 +440,7 @@
60000);
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(s1), 12);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, s1, 12);
}
// Next, there should be either a period or comma followed by
@@ -864,10 +459,7 @@
final TimeZone tz = TIME_ZONE_UTC_OBJ;
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(valueString.charAt(14)), 14);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, valueString.charAt(14), 14);
}
case '+':
@@ -878,17 +470,45 @@
final TimeZone tz = getTimeZoneForOffset(valueString, 14);
return createTime(valueString, year, month, day, hour, minute, second, tz);
} else {
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(valueString.charAt(14)), 14);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, valueString.charAt(14), 14);
}
default:
- final LocalizableMessage message =
- WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(valueString, String
- .valueOf(valueString.charAt(14)), 14);
- throw new LocalizedIllegalArgumentException(message);
+ throw invalidChar(valueString, valueString.charAt(14), 14);
+ }
+ }
+
+ private static LocalizedIllegalArgumentException invalidChar(String valueString, char c, int pos) {
+ return new LocalizedIllegalArgumentException(
+ WARN_ATTR_SYNTAX_GENERALIZED_TIME_INVALID_CHAR.get(
+ valueString, String.valueOf(c), pos));
+ }
+
+ private static int toInt(char c, Arg2<Object, Object> invalidSyntaxMsg, String valueString, String unitValue) {
+ switch (c) {
+ case '0':
+ return 0;
+ case '1':
+ return 1;
+ case '2':
+ return 2;
+ case '3':
+ return 3;
+ case '4':
+ return 4;
+ case '5':
+ return 5;
+ case '6':
+ return 6;
+ case '7':
+ return 7;
+ case '8':
+ return 8;
+ case '9':
+ return 9;
+ default:
+ throw new LocalizedIllegalArgumentException(
+ invalidSyntaxMsg.get(valueString, unitValue));
}
}
--
Gitblit v1.10.0