From 025388b78342167fae1f0599eec1c952486da2a6 Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Wed, 15 Jan 2020 00:49:57 +0500 Subject: [PATCH 1/6] changing parseDate method to handle all timezone date string --- .../ORCPublicCertificateDatabaseImpl.java | 56 +++++++++++++++---- 1 file changed, 46 insertions(+), 10 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index 94e7934e358..e38ecb1b9b0 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -16,6 +16,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import java.util.TimeZone; import java.util.UUID; import java.util.concurrent.Future; import java.util.concurrent.FutureTask; @@ -72,6 +73,8 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat private static final String ROOT_ELEMENT = "ROOT"; private static final String DATA_ELEMENT = "DATA"; private static final String ROW_ELEMENT = "ROW"; + private static final String[] dateFormatsWithTimeZone = new String[] {"yyyy-MM-dd'T'HH:mm:ssX","yyyy-MM-dd'T'HH:mm:ss.SSSX"}; + private static final String[] dateFormatsWithoutTimeZone = new String[] {"yyyy-MM-dd'T'HH:mm:ss.SSS","yyyy-MM-dd'T'HH:mm:ss"}; private static final DateFormat isoTimestampFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSSZ"); /** @@ -351,18 +354,51 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat sailNumber, boatClassName, designer, builder, yearBuilt, issueDate, certType, isOneDesign, isProvisional); } - private Date parseDate(String dateString) throws ParseException { - StringBuilder stringBuilder = new StringBuilder(dateString); - char timeZoneCharacter = stringBuilder.charAt(stringBuilder.length()-1); - if(timeZoneCharacter== 'z' || timeZoneCharacter == 'Z'|| timeZoneCharacter == 'X') { - stringBuilder.deleteCharAt(stringBuilder.length()-1); + public Date parseDate(final String dateString) throws ParseException { + DateFormat dateFormat= null; + if(dateString.contains("GMT")) { + try { + return timeAsGmt(dateString); + } catch(Exception ex) { + + } } - if(false == stringBuilder.toString().contains("+")) { - stringBuilder.append("+0000"); - } - - return isoTimestampFormat.parse(stringBuilder.toString()); + for(String df: dateFormatsWithTimeZone) { + try { + dateFormat = new SimpleDateFormat(df); + return dateFormat.parse(dateString); + } catch(Exception ex) { + + } + } + for(String df: dateFormatsWithoutTimeZone) { + try { + TimeZone timeZone = TimeZone.getTimeZone("UTC"); + dateFormat= new SimpleDateFormat(df); + dateFormat.setTimeZone(timeZone); + return dateFormat.parse(dateString); + } catch(Exception ex) { + + } + } + + return null; } + + private Date timeAsGmt(String dateTimeWithGMT) throws ParseException { + final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); + String []dateSplit = dateTimeWithGMT.split(" "); + if( dateSplit.length <2 ) { + dateSplit = dateTimeWithGMT.split("GMT"); + sdf.setTimeZone(TimeZone.getTimeZone("GMT"+dateSplit[1])); + return sdf.parse(dateSplit[0]); + } else { + sdf.setTimeZone(TimeZone.getTimeZone(dateSplit[1])); + return sdf.parse(dateSplit[0]); + } + + + } @Override public ORCCertificate getCertificate(String referenceNumber) throws Exception { From ec716e5477c2a096aa6ee1a0acd95151d8a6331b Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Wed, 15 Jan 2020 00:51:26 +0500 Subject: [PATCH 2/6] formatting the parse date method --- .../ORCPublicCertificateDatabaseImpl.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index e38ecb1b9b0..db665a4b792 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -355,50 +355,49 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat } public Date parseDate(final String dateString) throws ParseException { - DateFormat dateFormat= null; - if(dateString.contains("GMT")) { + DateFormat dateFormat = null; + if (dateString.contains("GMT")) { try { return timeAsGmt(dateString); - } catch(Exception ex) { - + } catch (Exception ex) { + } } - for(String df: dateFormatsWithTimeZone) { + for (String df : dateFormatsWithTimeZone) { try { dateFormat = new SimpleDateFormat(df); return dateFormat.parse(dateString); - } catch(Exception ex) { - + } catch (Exception ex) { + } } - for(String df: dateFormatsWithoutTimeZone) { + for (String df : dateFormatsWithoutTimeZone) { try { - TimeZone timeZone = TimeZone.getTimeZone("UTC"); - dateFormat= new SimpleDateFormat(df); + TimeZone timeZone = TimeZone.getTimeZone("UTC"); + dateFormat = new SimpleDateFormat(df); dateFormat.setTimeZone(timeZone); return dateFormat.parse(dateString); - } catch(Exception ex) { - + } catch (Exception ex) { + } } - + return null; } private Date timeAsGmt(String dateTimeWithGMT) throws ParseException { final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS"); - String []dateSplit = dateTimeWithGMT.split(" "); - if( dateSplit.length <2 ) { + String[] dateSplit = dateTimeWithGMT.split(" "); + if (dateSplit.length < 2) { dateSplit = dateTimeWithGMT.split("GMT"); - sdf.setTimeZone(TimeZone.getTimeZone("GMT"+dateSplit[1])); + sdf.setTimeZone(TimeZone.getTimeZone("GMT" + dateSplit[1])); return sdf.parse(dateSplit[0]); } else { sdf.setTimeZone(TimeZone.getTimeZone(dateSplit[1])); return sdf.parse(dateSplit[0]); } - - - } + + } @Override public ORCCertificate getCertificate(String referenceNumber) throws Exception { From efdd7eaf0db605fdd4e23488608a0563c7d7f3cc Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Wed, 15 Jan 2020 12:24:19 +0500 Subject: [PATCH 3/6] adding test cases along with some logging --- .../orc/TestORCPublicCertificateDatabase.java | 26 +++++++++++++++++++ .../orc/ORCPublicCertificateDatabase.java | 4 +++ .../ORCPublicCertificateDatabaseImpl.java | 11 ++++---- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index 03180de4dfa..69dee2f8fd1 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -12,6 +12,7 @@ import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; +import org.junit.Assert; import org.junit.Before; import org.junit.Ignore; import org.junit.Test; @@ -112,6 +113,31 @@ public class TestORCPublicCertificateDatabase { } assertTrue(foundYear); } + + @Test + public void testParseDateSuccessCases() { + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00Z")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000GMT+2")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000 GMT+2")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000+0800")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000+08:00")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000-08")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000Z")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000z")); + Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00z")); + } + + @Test + public void testParseDateFailureCases() { + Assert.assertNull(db.parseDate("2019-02-21")); + Assert.assertNull(db.parseDate("2019-02-21T10:38GMT+2")); + Assert.assertNull(db.parseDate("2019-02-21T10:38+0800")); + Assert.assertNull(db.parseDate("2019-02-21T10:38+08:00")); + Assert.assertNull(db.parseDate("2019-02-21T10:38-08")); + Assert.assertNull(db.parseDate("2019-02-21T10:38Z")); + Assert.assertNull(db.parseDate("2019-02-21T10z")); + Assert.assertNull(db.parseDate("2019-02-21T10:38z")); + } private void assertSoulmate(final String referenceNumber, CertificateHandle handle) { assertEquals("SOULMATE", handle.getYachtName()); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java index dd717b8b94e..4019f1632af 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java @@ -1,6 +1,8 @@ package com.sap.sailing.domain.orc; +import java.text.ParseException; import java.util.Arrays; +import java.util.Date; import java.util.Set; import java.util.UUID; import java.util.concurrent.Future; @@ -166,4 +168,6 @@ public interface ORCPublicCertificateDatabase { * parameters. */ Future> search(String yachtName, String sailNumber, BoatClass boatClass); + + Date parseDate(final String dateString); } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index db665a4b792..7ddd98c362b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -354,13 +354,14 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat sailNumber, boatClassName, designer, builder, yearBuilt, issueDate, certType, isOneDesign, isProvisional); } - public Date parseDate(final String dateString) throws ParseException { + @Override + public Date parseDate(final String dateString) { DateFormat dateFormat = null; if (dateString.contains("GMT")) { try { return timeAsGmt(dateString); } catch (Exception ex) { - + logger.fine("Date is not in GMT format :"+dateString); } } for (String df : dateFormatsWithTimeZone) { @@ -368,7 +369,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat dateFormat = new SimpleDateFormat(df); return dateFormat.parse(dateString); } catch (Exception ex) { - + logger.fine("Date is not parsable by "+df+" format :"+dateString); } } for (String df : dateFormatsWithoutTimeZone) { @@ -378,10 +379,10 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat dateFormat.setTimeZone(timeZone); return dateFormat.parse(dateString); } catch (Exception ex) { - + logger.fine("Date is not parsable by "+df+" format :"+dateString); } } - + logger.fine("Date is not parsable by any of the format :"+dateString); return null; } From 7d875ea874472a2627ae42bbcfb8c9aafe3282a4 Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Thu, 16 Jan 2020 04:06:05 +0500 Subject: [PATCH 4/6] test cases completed for parseDate --- .../orc/TestORCPublicCertificateDatabase.java | 39 +++++++++++++------ .../ORCPublicCertificateDatabaseImpl.java | 8 ++-- 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index 69dee2f8fd1..a0cf4ab8586 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -4,8 +4,14 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; import java.util.Calendar; +import java.util.Date; import java.util.GregorianCalendar; +import java.util.LinkedHashMap; +import java.util.Map; import java.util.Set; import java.util.TimeZone; import java.util.UUID; @@ -26,10 +32,21 @@ import com.sap.sse.common.Util; public class TestORCPublicCertificateDatabase { private ORCPublicCertificateDatabase db; - + Map dateComparisonMap = new LinkedHashMap(); @Before public void setUp() { db = new ORCPublicCertificateDatabaseImpl(); + dateComparisonMap.put("2019-02-21T10:38:59Z", "2019-02-21 10:38:59"); + dateComparisonMap.put("2019-02-21T12:00:00.000GMT+2", "2019-02-21 10:00:00"); + dateComparisonMap.put("2019-02-21T15:00:00.000 GMT+2", "2019-02-21 13:00:00"); + dateComparisonMap.put("2019-02-21T10:38:55.000-0800", "2019-02-21 18:38:55"); + dateComparisonMap.put("2019-02-21T10:38:32.000+08:00", "2019-02-21 02:38:32"); + dateComparisonMap.put("2019-02-21T10:38:09.000-06", "2019-02-21 16:38:09"); + dateComparisonMap.put("2019-02-21T10:38:22.000Z", "2019-02-21 10:38:22"); + dateComparisonMap.put("2019-02-21T10:38:00.000z", "2019-02-21 10:38:00"); + dateComparisonMap.put("2019-02-21T10:38:46z", "2019-02-21 10:38:46"); + dateComparisonMap.put("2019-02-21T10:38:17", "2019-02-21 10:38:17"); + dateComparisonMap.put("2019-02-21T10:38:33.000", "2019-02-21 10:38:33"); } @Test @@ -115,21 +132,19 @@ public class TestORCPublicCertificateDatabase { } @Test - public void testParseDateSuccessCases() { - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00Z")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000GMT+2")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000 GMT+2")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000+0800")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000+08:00")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000-08")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000Z")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00.000z")); - Assert.assertNotNull(db.parseDate("2019-02-21T10:38:00z")); + public void testParseDateSuccessCases() throws ParseException { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + for (String date : dateComparisonMap.keySet()) { + Date convertedDate = db.parseDate(date); + Assert.assertEquals(convertedDate.getTime() / 1000, + dateFormat.parse(dateComparisonMap.get(date)).getTime() / 1000); + } } @Test public void testParseDateFailureCases() { - Assert.assertNull(db.parseDate("2019-02-21")); + Assert.assertNull(db.parseDate("2019-02-21T20:38")); Assert.assertNull(db.parseDate("2019-02-21T10:38GMT+2")); Assert.assertNull(db.parseDate("2019-02-21T10:38+0800")); Assert.assertNull(db.parseDate("2019-02-21T10:38+08:00")); diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index 7ddd98c362b..fcbe9fe7e4b 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -361,7 +361,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat try { return timeAsGmt(dateString); } catch (Exception ex) { - logger.fine("Date is not in GMT format :"+dateString); + logger.fine("Date is not in GMT format :" + dateString); } } for (String df : dateFormatsWithTimeZone) { @@ -369,7 +369,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat dateFormat = new SimpleDateFormat(df); return dateFormat.parse(dateString); } catch (Exception ex) { - logger.fine("Date is not parsable by "+df+" format :"+dateString); + logger.fine("Date is not parsable by " + df + " format :" + dateString); } } for (String df : dateFormatsWithoutTimeZone) { @@ -379,10 +379,10 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat dateFormat.setTimeZone(timeZone); return dateFormat.parse(dateString); } catch (Exception ex) { - logger.fine("Date is not parsable by "+df+" format :"+dateString); + logger.fine("Date is not parsable by " + df + " format :" + dateString); } } - logger.fine("Date is not parsable by any of the format :"+dateString); + logger.fine("Date is not parsable by any of the format :" + dateString); return null; } From f47bf7423ebdab5a13464cab879093dc4cc01fab Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Sun, 19 Jan 2020 03:08:02 +0500 Subject: [PATCH 5/6] throwing parse exception and handling it in test cases --- .../orc/TestORCPublicCertificateDatabase.java | 28 +++++++++++++------ .../orc/ORCPublicCertificateDatabase.java | 2 +- .../ORCPublicCertificateDatabaseImpl.java | 4 +-- 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index a0cf4ab8586..7bdb6c166e3 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -7,10 +7,13 @@ import static org.junit.Assert.assertTrue; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.util.ArrayList; +import java.util.Arrays; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar; import java.util.LinkedHashMap; +import java.util.List; import java.util.Map; import java.util.Set; import java.util.TimeZone; @@ -33,6 +36,8 @@ import com.sap.sse.common.Util; public class TestORCPublicCertificateDatabase { private ORCPublicCertificateDatabase db; Map dateComparisonMap = new LinkedHashMap(); + List dateFailureCases =null; + @Before public void setUp() { db = new ORCPublicCertificateDatabaseImpl(); @@ -47,6 +52,9 @@ public class TestORCPublicCertificateDatabase { dateComparisonMap.put("2019-02-21T10:38:46z", "2019-02-21 10:38:46"); dateComparisonMap.put("2019-02-21T10:38:17", "2019-02-21 10:38:17"); dateComparisonMap.put("2019-02-21T10:38:33.000", "2019-02-21 10:38:33"); + dateFailureCases = Arrays.asList("2019-02-21T10:44GMT+2","2019-02-21T10:38+0800","2019-02-21T10:38+08:00", + "2019-02-21T10:38-08","2019-02-21T10:38Z","2019-02-21T10z","2019-02-21T10:38z"); + } @Test @@ -143,15 +151,17 @@ public class TestORCPublicCertificateDatabase { } @Test - public void testParseDateFailureCases() { - Assert.assertNull(db.parseDate("2019-02-21T20:38")); - Assert.assertNull(db.parseDate("2019-02-21T10:38GMT+2")); - Assert.assertNull(db.parseDate("2019-02-21T10:38+0800")); - Assert.assertNull(db.parseDate("2019-02-21T10:38+08:00")); - Assert.assertNull(db.parseDate("2019-02-21T10:38-08")); - Assert.assertNull(db.parseDate("2019-02-21T10:38Z")); - Assert.assertNull(db.parseDate("2019-02-21T10z")); - Assert.assertNull(db.parseDate("2019-02-21T10:38z")); + public void testParseDateFailureCases() throws ParseException { + for(String dateString: dateFailureCases) { + try { + db.parseDate(dateString); + Assert.fail(dateString+" is parsable"); // as date must not be parsable + } catch(ParseException e) { + // ignoring exception as date must fail. + } + } + Assert.assertTrue(true); + } private void assertSoulmate(final String referenceNumber, CertificateHandle handle) { diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java index 4019f1632af..02ed2d8ef72 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/ORCPublicCertificateDatabase.java @@ -169,5 +169,5 @@ public interface ORCPublicCertificateDatabase { */ Future> search(String yachtName, String sailNumber, BoatClass boatClass); - Date parseDate(final String dateString); + Date parseDate(final String dateString) throws ParseException; } diff --git a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java index fcbe9fe7e4b..64b4a67b71e 100755 --- a/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java +++ b/java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java @@ -355,7 +355,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat } @Override - public Date parseDate(final String dateString) { + public Date parseDate(final String dateString) throws ParseException { DateFormat dateFormat = null; if (dateString.contains("GMT")) { try { @@ -383,7 +383,7 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat } } logger.fine("Date is not parsable by any of the format :" + dateString); - return null; + throw new ParseException("Date is not parsable by any of the format :" + dateString,0); } private Date timeAsGmt(String dateTimeWithGMT) throws ParseException { From 5ad027bcc65c06cc9cd65f7b972e9d40ab878d35 Mon Sep 17 00:00:00 2001 From: Usman Ali Date: Mon, 17 Feb 2020 00:22:18 +0500 Subject: [PATCH 6/6] refactoring the testParseDateSuccessCases by using GregorianCalendar --- .../orc/TestORCPublicCertificateDatabase.java | 44 +++++++++---------- 1 file changed, 21 insertions(+), 23 deletions(-) diff --git a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java index 7bdb6c166e3..bcd73569ab0 100755 --- a/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java +++ b/java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java @@ -4,10 +4,7 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; -import java.text.DateFormat; import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; @@ -35,23 +32,27 @@ import com.sap.sse.common.Util; public class TestORCPublicCertificateDatabase { private ORCPublicCertificateDatabase db; - Map dateComparisonMap = new LinkedHashMap(); + Map dateComparisonMap = new LinkedHashMap(); List dateFailureCases =null; @Before public void setUp() { db = new ORCPublicCertificateDatabaseImpl(); - dateComparisonMap.put("2019-02-21T10:38:59Z", "2019-02-21 10:38:59"); - dateComparisonMap.put("2019-02-21T12:00:00.000GMT+2", "2019-02-21 10:00:00"); - dateComparisonMap.put("2019-02-21T15:00:00.000 GMT+2", "2019-02-21 13:00:00"); - dateComparisonMap.put("2019-02-21T10:38:55.000-0800", "2019-02-21 18:38:55"); - dateComparisonMap.put("2019-02-21T10:38:32.000+08:00", "2019-02-21 02:38:32"); - dateComparisonMap.put("2019-02-21T10:38:09.000-06", "2019-02-21 16:38:09"); - dateComparisonMap.put("2019-02-21T10:38:22.000Z", "2019-02-21 10:38:22"); - dateComparisonMap.put("2019-02-21T10:38:00.000z", "2019-02-21 10:38:00"); - dateComparisonMap.put("2019-02-21T10:38:46z", "2019-02-21 10:38:46"); - dateComparisonMap.put("2019-02-21T10:38:17", "2019-02-21 10:38:17"); - dateComparisonMap.put("2019-02-21T10:38:33.000", "2019-02-21 10:38:33"); + /** + * By default GregorianCalendar month starts from 0 as January and so on. In below cases 1 specifies the date + * month as February. + */ + dateComparisonMap.put("2019-02-21T10:38:59Z", new GregorianCalendar(2019, 1, 21, 15, 38, 59)); + dateComparisonMap.put("2019-02-21T12:00:00.000GMT+2", new GregorianCalendar(2019, 1, 21, 15, 00, 00)); + dateComparisonMap.put("2019-02-21T15:00:00.000 GMT-2", new GregorianCalendar(2019, 1, 21, 22, 00, 00)); + dateComparisonMap.put("2019-02-21T10:38:55.000-0800", new GregorianCalendar(2019, 1, 21, 23, 38, 55)); + dateComparisonMap.put("2019-02-21T10:38:32.000+08:00", new GregorianCalendar(2019, 1, 21, 07, 38, 32)); + dateComparisonMap.put("2019-02-21T10:38:09.000-06", new GregorianCalendar(2019, 1, 21, 21, 38, 9)); + dateComparisonMap.put("2019-02-21T10:38:22.000Z", new GregorianCalendar(2019, 1, 21, 15, 38, 22)); + dateComparisonMap.put("2019-02-21T10:38:00.000z", new GregorianCalendar(2019, 1, 21, 15, 38, 00)); + dateComparisonMap.put("2019-02-21T10:38:46z", new GregorianCalendar(2019, 1, 21, 15, 38, 46)); + dateComparisonMap.put("2019-02-21T10:38:17", new GregorianCalendar(2019, 1, 21, 15, 38, 17)); + dateComparisonMap.put("2019-02-21T10:38:33.000", new GregorianCalendar(2019, 1, 21, 15, 38, 33)); dateFailureCases = Arrays.asList("2019-02-21T10:44GMT+2","2019-02-21T10:38+0800","2019-02-21T10:38+08:00", "2019-02-21T10:38-08","2019-02-21T10:38Z","2019-02-21T10z","2019-02-21T10:38z"); @@ -141,27 +142,24 @@ public class TestORCPublicCertificateDatabase { @Test public void testParseDateSuccessCases() throws ParseException { - DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss"); - dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); for (String date : dateComparisonMap.keySet()) { Date convertedDate = db.parseDate(date); - Assert.assertEquals(convertedDate.getTime() / 1000, - dateFormat.parse(dateComparisonMap.get(date)).getTime() / 1000); + assertEquals(convertedDate.getTime(), dateComparisonMap.get(date).getTimeInMillis()); } } @Test public void testParseDateFailureCases() throws ParseException { - for(String dateString: dateFailureCases) { + for (String dateString : dateFailureCases) { try { db.parseDate(dateString); - Assert.fail(dateString+" is parsable"); // as date must not be parsable - } catch(ParseException e) { + Assert.fail(dateString + " is parsable"); // as date must not be parsable + } catch (ParseException e) { // ignoring exception as date must fail. } } Assert.assertTrue(true); - + } private void assertSoulmate(final String referenceNumber, CertificateHandle handle) {