You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by bd...@apache.org on 2022/07/26 22:30:48 UTC
[directory-scimple] 01/01: Remove duplicate Mapper class
This is an automated email from the ASF dual-hosted git repository.
bdemers pushed a commit to branch remove-extra-mapper
in repository https://gitbox.apache.org/repos/asf/directory-scimple.git
commit 26ff0a6bd27f01a076767e6e8dc851e8cb0eb485
Author: Brian Demers <bd...@apache.org>
AuthorDate: Tue Jul 26 18:30:42 2022 -0400
Remove duplicate Mapper class
This resolves a split package issue with this class
---
.../apache/directory/scim/spec/schema/Mapper.java | 92 ++----------
.../directory/scim/spec/schema/MapperTest.java | 77 ++++++++++
.../apache/directory/scim/spec/schema/Mapper.java | 137 -----------------
.../directory/scim/spec/schema/MapperTest.java | 162 ---------------------
4 files changed, 89 insertions(+), 379 deletions(-)
diff --git a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java
index 7ab2afb..90f0f86 100644
--- a/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java
+++ b/scim-spec/scim-spec-schema/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java
@@ -22,12 +22,9 @@
*/
package org.apache.directory.scim.spec.schema;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.SimpleTimeZone;
-import java.util.TimeZone;
-import java.util.regex.Pattern;
+import java.time.Instant;
+import java.time.format.DateTimeFormatter;
+import java.time.temporal.TemporalAccessor;
/**
* The Mapper provides methods to bi-directionally transform SCIM attribute
@@ -50,88 +47,23 @@ import java.util.regex.Pattern;
*/
public class Mapper {
- // Pattern for ISO 8601 DateTime - see: https://en.wikipedia.org/wiki/ISO_8601
- static final String ISO8601_PATTERN = "^([0-9]{4})-([0-9]{2})-([0-9]{2})[Tt]([0-9]{2}):([0-9]{2}):([0-9]{2})([Zz]|([+-]{1}[0-9]{2}:[0-9]{2}))";
-
- // Date time component indexes
- static final int DATE_COMPONENT_INDEX_YEAR = 1;
- static final int DATE_COMPONENT_INDEX_MONTH = 2;
- static final int DATE_COMPONENT_INDEX_DAY = 3;
- static final int TIME_COMPONENT_INDEX_HOUR = 4;
- static final int TIME_COMPONENT_INDEX_MINUTE = 5;
- static final int TIME_COMPONENT_INDEX_SECOND = 6;
- static final int TIMEZONE_COMPONENT_INDEX = 7;
-
- // Format string to create an ISO 8601 date string from a Java date object
- static final String ISO8601_DATETIME_FORMATTER = "yyyy-MM-dd'T'HH:mm:ssXXX";
-
- SimpleDateFormat iso8601DateFormat;
- Pattern iso8601Pattern;
+ DateTimeFormatter iso8601DateTimeFormatter = DateTimeFormatter.ISO_DATE_TIME;
public Mapper() {
- iso8601DateFormat = new SimpleDateFormat(ISO8601_DATETIME_FORMATTER);
- iso8601Pattern = Pattern.compile(ISO8601_PATTERN);
}
- public String convertDateTime(Date date) {
- return iso8601DateFormat.format(date);
+ public String convertDateTime(Instant instant) {
+ return iso8601DateTimeFormatter.format(instant);
}
/**
* Converts an ISO 8601 DateTime string into the equivalent Java Date object.
- *
- * @param date the ISO 8601 DateTime to be converted.
- * @return the equivalent Java Date object.
- * @throws ParseException
+ *
+ * @param isodate the ISO 8601 DateTime to be converted.
+ * @return the equivalent Java Instant object.
*/
- public Date convertDateTime(String isodate) throws ParseException {
-// Calendar calendar = null;
-// Matcher matcher = iso8601Pattern.matcher(date);
-// if (matcher.matches()) {
-// TimeZone timeZone = convertTimeZone(matcher.group(TIMEZONE_COMPONENT_INDEX));
-// calendar = new GregorianCalendar(timeZone);
-// calendar.set(
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_YEAR)),
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_MONTH)),
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_DAY)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_HOUR)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_MINUTE)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_SECOND))
-// );
-// } else {
-// // TODO - This is an error
-// }
-// return calendar.getTime();
- Date date = iso8601DateFormat.parse(isodate);
- return date;
+ public Instant convertDateTime(String isodate) {
+ TemporalAccessor temporal = iso8601DateTimeFormatter.parse(isodate);
+ return Instant.from(temporal);
}
-
- /**
- * Converts the timeZone portion of an ISO 8601 date into a Java TimeZone
- * object.
- *
- * @param timeZone the ISO 8601 representation of the time zone.
- * @return the equivalent Java TimeZone object.
- */
- TimeZone convertTimeZone(String timeZone) {
- String[] timeZoneTokens = timeZone.split(":");
- int hours = 0;
- int minutes = 0;
-
- if (!timeZone.startsWith("Z") && !timeZone.startsWith("z")) {
- if (timeZoneTokens.length > 0) {
- hours = Integer.parseInt(timeZoneTokens[0]);
- }
- if (timeZoneTokens.length > 1) {
- minutes = Integer.parseInt(timeZoneTokens[1]);
- if (timeZone.startsWith("-")) {
- minutes = minutes * -1;
- }
- }
- }
-
- int timeZoneOffsetMilliSeconds = ((hours * 60) + minutes) * 1000;
- return new SimpleTimeZone(timeZoneOffsetMilliSeconds, "");
- }
-
}
diff --git a/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java
new file mode 100644
index 0000000..d307743
--- /dev/null
+++ b/scim-spec/scim-spec-schema/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java
@@ -0,0 +1,77 @@
+/*
+* Licensed to the Apache Software Foundation (ASF) under one
+* or more contributor license agreements. See the NOTICE file
+* distributed with this work for additional information
+* regarding copyright ownership. The ASF licenses this file
+* to you 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.
+*/
+
+package org.apache.directory.scim.spec.schema;
+
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.MethodSource;
+
+import java.text.ParseException;
+import java.time.Instant;
+import java.util.*;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+
+public class MapperTest {
+
+ static final String[] ISO_DATETIME_EXAMPLES = {
+ "2015-04-26T01:37:17+00:00",
+ "2015-04-26T01:37:17Z"
+ };
+
+ static String[] getIsoDateTimeExamples() {
+ return ISO_DATETIME_EXAMPLES;
+ }
+
+ @ParameterizedTest
+ @MethodSource("getIsoDateTimeExamples")
+ public void testConvertDateTimeFromString(String isoDateTime) throws ParseException {
+ Mapper mapper = new Mapper();
+ Instant instant = mapper.convertDateTime(isoDateTime);
+ TimeZone timeZone = new SimpleTimeZone(0, "GMT");
+ GregorianCalendar calendar = new GregorianCalendar(timeZone);
+ calendar.setTime(Date.from(instant));
+ assertEquals(2015, calendar.get(Calendar.YEAR));
+ assertEquals(3, calendar.get(Calendar.MONTH));
+ assertEquals(26, calendar.get(Calendar.DATE));
+ assertEquals(1, calendar.get(Calendar.HOUR_OF_DAY));
+ assertEquals(37, calendar.get(Calendar.MINUTE));
+ assertEquals(17, calendar.get(Calendar.SECOND));
+ }
+
+ @Test
+ @Disabled
+ public void convertDateTimeFromDate() {
+ Mapper mapper = new Mapper();
+ TimeZone timeZone = new SimpleTimeZone(0, "GMT");
+ GregorianCalendar calendar = new GregorianCalendar(timeZone);
+ calendar.set(Calendar.YEAR, 2015);
+ calendar.set(Calendar.MONTH, 03);
+ calendar.set(Calendar.DATE, 26);
+ calendar.set(Calendar.HOUR_OF_DAY, 1);
+ calendar.set(Calendar.MINUTE, 37);
+ calendar.set(Calendar.SECOND, 17);
+ Instant instant = calendar.toInstant();
+ String actualDateTime = mapper.convertDateTime(instant);
+ assertEquals(ISO_DATETIME_EXAMPLES[0], actualDateTime);
+ }
+}
diff --git a/scim-tools/scim-tools-common/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java b/scim-tools/scim-tools-common/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java
deleted file mode 100644
index 7ab2afb..0000000
--- a/scim-tools/scim-tools-common/src/main/java/org/apache/directory/scim/spec/schema/Mapper.java
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you 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.
-*/
-
-/**
- *
- */
-package org.apache.directory.scim.spec.schema;
-
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Date;
-import java.util.SimpleTimeZone;
-import java.util.TimeZone;
-import java.util.regex.Pattern;
-
-/**
- * The Mapper provides methods to bi-directionally transform SCIM attribute
- * values into Java types. The eight types supported by SCIM are defined in
- * section 2.2 of the SCIM schema specification. The mapping to Java objects are
- * as follows:
- *
- * <pre>
- * String -> string -> String
- * Boolean -> boolean -> Boolean
- * Decimal -> decimal -> Double
- * Integer - > integer -> Long
- * DateTime -> dateTime -> Date
- * Binary -> binary -> Byte[]
- * Reference -> reference -> URN?
- * Complex -> complex -> (Java Object as defined)
- * </pre>
- *
- * @author Steve Moyer
- */
-public class Mapper {
-
- // Pattern for ISO 8601 DateTime - see: https://en.wikipedia.org/wiki/ISO_8601
- static final String ISO8601_PATTERN = "^([0-9]{4})-([0-9]{2})-([0-9]{2})[Tt]([0-9]{2}):([0-9]{2}):([0-9]{2})([Zz]|([+-]{1}[0-9]{2}:[0-9]{2}))";
-
- // Date time component indexes
- static final int DATE_COMPONENT_INDEX_YEAR = 1;
- static final int DATE_COMPONENT_INDEX_MONTH = 2;
- static final int DATE_COMPONENT_INDEX_DAY = 3;
- static final int TIME_COMPONENT_INDEX_HOUR = 4;
- static final int TIME_COMPONENT_INDEX_MINUTE = 5;
- static final int TIME_COMPONENT_INDEX_SECOND = 6;
- static final int TIMEZONE_COMPONENT_INDEX = 7;
-
- // Format string to create an ISO 8601 date string from a Java date object
- static final String ISO8601_DATETIME_FORMATTER = "yyyy-MM-dd'T'HH:mm:ssXXX";
-
- SimpleDateFormat iso8601DateFormat;
- Pattern iso8601Pattern;
-
- public Mapper() {
- iso8601DateFormat = new SimpleDateFormat(ISO8601_DATETIME_FORMATTER);
- iso8601Pattern = Pattern.compile(ISO8601_PATTERN);
- }
-
- public String convertDateTime(Date date) {
- return iso8601DateFormat.format(date);
- }
-
- /**
- * Converts an ISO 8601 DateTime string into the equivalent Java Date object.
- *
- * @param date the ISO 8601 DateTime to be converted.
- * @return the equivalent Java Date object.
- * @throws ParseException
- */
- public Date convertDateTime(String isodate) throws ParseException {
-// Calendar calendar = null;
-// Matcher matcher = iso8601Pattern.matcher(date);
-// if (matcher.matches()) {
-// TimeZone timeZone = convertTimeZone(matcher.group(TIMEZONE_COMPONENT_INDEX));
-// calendar = new GregorianCalendar(timeZone);
-// calendar.set(
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_YEAR)),
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_MONTH)),
-// Integer.parseInt(matcher.group(DATE_COMPONENT_INDEX_DAY)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_HOUR)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_MINUTE)),
-// Integer.parseInt(matcher.group(TIME_COMPONENT_INDEX_SECOND))
-// );
-// } else {
-// // TODO - This is an error
-// }
-// return calendar.getTime();
- Date date = iso8601DateFormat.parse(isodate);
- return date;
- }
-
- /**
- * Converts the timeZone portion of an ISO 8601 date into a Java TimeZone
- * object.
- *
- * @param timeZone the ISO 8601 representation of the time zone.
- * @return the equivalent Java TimeZone object.
- */
- TimeZone convertTimeZone(String timeZone) {
- String[] timeZoneTokens = timeZone.split(":");
- int hours = 0;
- int minutes = 0;
-
- if (!timeZone.startsWith("Z") && !timeZone.startsWith("z")) {
- if (timeZoneTokens.length > 0) {
- hours = Integer.parseInt(timeZoneTokens[0]);
- }
- if (timeZoneTokens.length > 1) {
- minutes = Integer.parseInt(timeZoneTokens[1]);
- if (timeZone.startsWith("-")) {
- minutes = minutes * -1;
- }
- }
- }
-
- int timeZoneOffsetMilliSeconds = ((hours * 60) + minutes) * 1000;
- return new SimpleTimeZone(timeZoneOffsetMilliSeconds, "");
- }
-
-}
diff --git a/scim-tools/scim-tools-common/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java b/scim-tools/scim-tools-common/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java
deleted file mode 100644
index 136d325..0000000
--- a/scim-tools/scim-tools-common/src/test/java/org/apache/directory/scim/spec/schema/MapperTest.java
+++ /dev/null
@@ -1,162 +0,0 @@
-/*
-* Licensed to the Apache Software Foundation (ASF) under one
-* or more contributor license agreements. See the NOTICE file
-* distributed with this work for additional information
-* regarding copyright ownership. The ASF licenses this file
-* to you 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.
-*/
-
-package org.apache.directory.scim.spec.schema;
-
-import java.text.ParseException;
-import java.util.Calendar;
-import java.util.Date;
-import java.util.GregorianCalendar;
-import java.util.SimpleTimeZone;
-import java.util.TimeZone;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-import org.junit.jupiter.api.Disabled;
-import org.junit.jupiter.api.Test;
-import org.junit.jupiter.params.ParameterizedTest;
-import org.junit.jupiter.params.provider.CsvSource;
-import org.junit.jupiter.params.provider.MethodSource;
-
-import static org.junit.jupiter.api.Assertions.assertEquals;
-import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.junit.jupiter.api.Assumptions.assumeTrue;
-
-
-public class MapperTest {
-
- static final String[] ISO_DATETIME_EXAMPLES = {
- "2015-04-26T01:37:17+00:00",
- "2015-04-26T01:37:17Z"
- };
-
- static String[] getIsoDateTimeExamples() {
- return ISO_DATETIME_EXAMPLES;
- }
-
- /**
- * Tests that the regular expression provided used to decompose an ISO 8601
- * DateTime string works with the examples from wikipedia.
- *
- * @param isoDateTime a String[] of examples to test.
- */
- @ParameterizedTest
- @MethodSource("getIsoDateTimeExamples")
- public void testDateTimePatternWorksForIso8601Strings(String isoDateTime) {
- Pattern pattern = Pattern.compile(Mapper.ISO8601_PATTERN);
- assertNotNull(pattern);
- Matcher matcher = pattern.matcher(isoDateTime);
- assertTrue(matcher.matches());
- }
-
- /**
- * Tests that the static final indexes in the Mapper class correspond to the
- * correct matching groups in the ISO 8601 regular expression.
- *
- * @param isoDateTime a String[] of examples to test.
- */
- @ParameterizedTest
- @MethodSource("getIsoDateTimeExamples")
- public void testDateTimeGroupIndexesProvideCorrectSubstrings(String isoDateTime) {
- Pattern pattern = Pattern.compile(Mapper.ISO8601_PATTERN);
- Matcher matcher = pattern.matcher(isoDateTime);
- assumeTrue(matcher.matches());
- assertEquals("2015", matcher.group(Mapper.DATE_COMPONENT_INDEX_YEAR));
- assertEquals("04", matcher.group(Mapper.DATE_COMPONENT_INDEX_MONTH));
- assertEquals("26", matcher.group(Mapper.DATE_COMPONENT_INDEX_DAY));
- assertEquals("01", matcher.group(Mapper.TIME_COMPONENT_INDEX_HOUR));
- assertEquals("37", matcher.group(Mapper.TIME_COMPONENT_INDEX_MINUTE));
- assertEquals("17", matcher.group(Mapper.TIME_COMPONENT_INDEX_SECOND));
- assertTrue("+00:00".equals(matcher.group(Mapper.TIMEZONE_COMPONENT_INDEX)) ||
- "Z".equals(matcher.group(Mapper.TIMEZONE_COMPONENT_INDEX)));
- }
-
- @ParameterizedTest
- @MethodSource("getIsoDateTimeExamples")
- public void testConvertDateTimeFromString(String isoDateTime) throws ParseException {
- Mapper mapper = new Mapper();
- Date date = mapper.convertDateTime(isoDateTime);
- TimeZone timeZone = new SimpleTimeZone(0, "GMT");
- GregorianCalendar calendar = new GregorianCalendar(timeZone);
- calendar.setTime(date);
- assertEquals(2015, calendar.get(Calendar.YEAR));
- assertEquals(3, calendar.get(Calendar.MONTH));
- assertEquals(26, calendar.get(Calendar.DATE));
- assertEquals(1, calendar.get(Calendar.HOUR_OF_DAY));
- assertEquals(37, calendar.get(Calendar.MINUTE));
- assertEquals(17, calendar.get(Calendar.SECOND));
- }
-
- @Test
- @Disabled
- public void convertDateTimeFromDate() {
- Mapper mapper = new Mapper();
- TimeZone timeZone = new SimpleTimeZone(0, "GMT");
- GregorianCalendar calendar = new GregorianCalendar(timeZone);
- calendar.set(Calendar.YEAR, 2015);
- calendar.set(Calendar.MONTH, 03);
- calendar.set(Calendar.DATE, 26);
- calendar.set(Calendar.HOUR_OF_DAY, 1);
- calendar.set(Calendar.MINUTE, 37);
- calendar.set(Calendar.SECOND, 17);
- Date date = calendar.getTime();
- String actualDateTime = mapper.convertDateTime(date);
- assertEquals(ISO_DATETIME_EXAMPLES[0], actualDateTime);
- }
-
- /**
- * Tests that the convertTimeZone() method properly sets the raw offset of
- * the Java TimeZone object (ignoring locality so there are no IDs provided).
- *
- * @param isoTimeZone an ISO 8601 formatted timezone string.
- * @param expectedHours the expected hours.
- * @param expectedMinutes the expected minutes.
- */
- @ParameterizedTest
- @CsvSource({
- " 00:00, 0, 0",
- "+00:00, 0, 0",
- "-00:00, -0, 0",
- " 00:30, 0, 30",
- "+00:30, 0, 30",
- "-00:30, 0, -30",
- " 05:00, 5, 0",
- "+05:00, 5, 0",
- "-05:00, -5, 0",
- " 05:30, 5, 30",
- "+05:30, 5, 30",
- "-05:30, -5, -30",
- " 00, 0, 0",
- "+00, 0, 0",
- "-00, 0, 0",
- "+05, 5, 0",
- "-05, -5, 0",
- })
- public void testConvertTimeZone(String isoTimeZone, int expectedHours, int expectedMinutes) {
- Mapper mapper = new Mapper();
- TimeZone timeZone = mapper.convertTimeZone(isoTimeZone);
- int actualOffsetMinutes = timeZone.getRawOffset() / 1000;
- int actualHours = actualOffsetMinutes / 60;
- int actualMinutes = actualOffsetMinutes % 60;
- assertEquals(expectedHours, actualHours);
- assertEquals(expectedMinutes, actualMinutes);
- }
-
-}