mirror of
https://github.com/eclipse-sailing-analytics/sailing-analytics.git
synced 2026-11-15 14:56:41 +00:00
Merge branch 'parse-orc-date' into bug5170
Conflicts: java/com.sap.sailing.domain.test/src/com/sap/sailing/domain/orc/TestORCPublicCertificateDatabase.java java/com.sap.sailing.domain/src/com/sap/sailing/domain/orc/impl/ORCPublicCertificateDatabaseImpl.java
This commit is contained in:
commit
2e4273e5f5
3 files changed
+88
-13
No files matched your search
+32
-6
@@ -4,36 +4,62 @@ import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertFalse;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.util.Arrays;
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDate;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.ArrayList;
|
||||
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;
|
||||
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.Rule;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.sap.sailing.domain.base.impl.BoatClassImpl;
|
||||
import com.sap.sailing.domain.common.BoatClassMasterdata;
|
||||
import com.sap.sailing.domain.common.orc.ORCCertificate;
|
||||
import com.sap.sailing.domain.orc.ORCPublicCertificateDatabase.CertificateHandle;
|
||||
import com.sap.sailing.domain.orc.impl.ORCPublicCertificateDatabaseImpl;
|
||||
import com.sap.sse.common.CountryCode;
|
||||
import com.sap.sse.common.CountryCodeFactory;
|
||||
import com.sap.sse.common.Util;
|
||||
|
||||
public class TestORCPublicCertificateDatabase {
|
||||
private ORCPublicCertificateDatabase db;
|
||||
|
||||
@Rule
|
||||
public IgnoreInvalidOrcCertificatesRule customIgnoreRule = new IgnoreInvalidOrcCertificatesRule();
|
||||
Map<String, GregorianCalendar> dateComparisonMap = new LinkedHashMap<String, GregorianCalendar>();
|
||||
List<String> dateFailureCases =null;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
db = new ORCPublicCertificateDatabaseImpl();
|
||||
/**
|
||||
* 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");
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
+4
@@ -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<Set<ORCCertificate>> search(String yachtName, String sailNumber, BoatClass boatClass);
|
||||
|
||||
Date parseDate(final String dateString) throws ParseException;
|
||||
}
|
||||
+52
-7
@@ -72,6 +72,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");
|
||||
|
||||
/**
|
||||
@@ -352,15 +354,58 @@ public class ORCPublicCertificateDatabaseImpl implements ORCPublicCertificateDat
|
||||
}
|
||||
|
||||
private Date parseDate(String dateString) throws ParseException {
|
||||
final StringBuilder stringBuilder = new StringBuilder(dateString);
|
||||
final char timeZoneCharacter = stringBuilder.charAt(stringBuilder.length() - 1);
|
||||
if (timeZoneCharacter == 'z' || timeZoneCharacter == 'Z' || timeZoneCharacter == 'X') {
|
||||
stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||
// final StringBuilder stringBuilder = new StringBuilder(dateString);
|
||||
// final char timeZoneCharacter = stringBuilder.charAt(stringBuilder.length() - 1);
|
||||
// if (timeZoneCharacter == 'z' || timeZoneCharacter == 'Z' || timeZoneCharacter == 'X') {
|
||||
// stringBuilder.deleteCharAt(stringBuilder.length() - 1);
|
||||
// }
|
||||
// if (stringBuilder.indexOf("+") == -1) {
|
||||
// stringBuilder.append("+0000");
|
||||
}
|
||||
|
||||
@Override
|
||||
public Date parseDate(final String dateString) throws ParseException {
|
||||
DateFormat dateFormat = null;
|
||||
if (dateString.contains("GMT")) {
|
||||
try {
|
||||
return timeAsGmt(dateString);
|
||||
} catch (Exception ex) {
|
||||
logger.fine("Date is not in GMT format :" + dateString);
|
||||
}
|
||||
}
|
||||
if (stringBuilder.indexOf("+") == -1) {
|
||||
stringBuilder.append("+0000");
|
||||
for (String df : dateFormatsWithTimeZone) {
|
||||
try {
|
||||
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) {
|
||||
try {
|
||||
TimeZone timeZone = TimeZone.getTimeZone("UTC");
|
||||
dateFormat = new SimpleDateFormat(df);
|
||||
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);
|
||||
throw new ParseException("Date is not parsable by any of the format :" + dateString,0);
|
||||
}
|
||||
|
||||
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]);
|
||||
}
|
||||
return isoTimestampFormat.parse(stringBuilder.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in new issue
Block a user