summaryrefslogtreecommitdiffstats
path: root/src/org/uic/barcode/ticket/api/utils
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/uic/barcode/ticket/api/utils')
-rw-r--r--src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoder.java14
-rw-r--r--src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV2.java16
-rw-r--r--src/org/uic/barcode/ticket/api/utils/DateTimeUtils.java251
-rw-r--r--src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoder.java15
-rw-r--r--src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoderV2.java7
5 files changed, 271 insertions, 32 deletions
diff --git a/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoder.java b/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoder.java
index 78deb8a..5bc419c 100644
--- a/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoder.java
+++ b/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoder.java
@@ -881,7 +881,7 @@ public class Api2OpenAsnEncoder {
asnData.setTariffs(encodeTariffCollection(document.getTariffs()));
- asnData.setActivatedDays(document.getActivatedDays(),document.getValidFrom());
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
if (document.getClassCode() != ITravelClassType.second){
asnData.setClassCode(convertTravelClass(document.getClassCode()));
@@ -1558,13 +1558,7 @@ public class Api2OpenAsnEncoder {
}
- if(document.getActivatedDays()!= null && document.getActivatedDays().size() > 0) {
- if (document.getValidFrom() != null) {
- asnData.setActivatedDays(document.getActivatedDays(),document.getValidFrom());
- } else {
- asnData.setActivatedDays(document.getActivatedDays(),issuingDate);
- }
- }
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
asnData.setClassCode(convertTravelClass(document.getClassCode()));
@@ -1697,9 +1691,7 @@ public class Api2OpenAsnEncoder {
asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
- if(document.getActivatedDays()!= null && document.getActivatedDays().size() > 0) {
- asnData.setActivatedDays(document.getActivatedDays(), document.getValidFrom());
- }
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
asnData.setExtension(encodeExtension(document.getExtension()));
diff --git a/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV2.java b/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV2.java
index 97abcfa..48583b9 100644
--- a/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV2.java
+++ b/src/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV2.java
@@ -886,7 +886,7 @@ public class Api2OpenAsnEncoderV2 {
asnData.setTariffs(encodeTariffCollection(document.getTariffs()));
- asnData.setActivatedDays(document.getActivatedDays(),document.getValidFrom());
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
if (document.getClassCode() != ITravelClassType.second && document.getClassCode() != null){
asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
@@ -1562,14 +1562,8 @@ public class Api2OpenAsnEncoderV2 {
}
}
-
- if(document.getActivatedDays()!= null && document.getActivatedDays().size() > 0) {
- if (document.getValidFrom() != null) {
- asnData.setActivatedDays(document.getActivatedDays(),document.getValidFrom());
- } else {
- asnData.setActivatedDays(document.getActivatedDays(),issuingDate);
- }
- }
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
+
if (document.getClassCode() != null) {
asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
}
@@ -1703,9 +1697,7 @@ public class Api2OpenAsnEncoderV2 {
asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
- if(document.getActivatedDays()!= null && document.getActivatedDays().size() > 0) {
- asnData.setActivatedDays(document.getActivatedDays(), document.getValidFrom());
- }
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
asnData.setExtension(encodeExtension(document.getExtension()));
diff --git a/src/org/uic/barcode/ticket/api/utils/DateTimeUtils.java b/src/org/uic/barcode/ticket/api/utils/DateTimeUtils.java
new file mode 100644
index 0000000..a0283c7
--- /dev/null
+++ b/src/org/uic/barcode/ticket/api/utils/DateTimeUtils.java
@@ -0,0 +1,251 @@
+package org.uic.barcode.ticket.api.utils;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.TimeZone;
+import java.util.concurrent.TimeUnit;
+
+public class DateTimeUtils {
+
+ public static Long getDateDifference(Date issuingDate, Date localDate) {
+
+ if (issuingDate == null || localDate == null) return null;
+
+ Calendar startCal = Calendar.getInstance();
+ startCal.clear();
+ startCal.setTime(issuingDate);
+ startCal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ startCal.set(Calendar.HOUR_OF_DAY, 0);
+ startCal.set(Calendar.MINUTE, 0);
+ startCal.set(Calendar.SECOND, 0);
+ startCal.set(Calendar.MILLISECOND, 0);
+ Date start = startCal.getTime();
+
+ Calendar endCal = Calendar.getInstance();
+ endCal.clear();
+ endCal.setTime(localDate);
+ endCal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ endCal.set(Calendar.HOUR_OF_DAY, 0);
+ endCal.set(Calendar.MINUTE, 0);
+ endCal.set(Calendar.SECOND, 0);
+ endCal.set(Calendar.MILLISECOND, 0);
+ Date end = endCal.getTime();
+
+ long diff = TimeUnit.DAYS.convert(end.getTime() - start.getTime(), TimeUnit.MILLISECONDS );
+ //long diff = localDate.getTime() - issuingDate.getTime();
+ //long dayDiff = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
+
+ return new Long(diff);
+
+ }
+
+ public static Long getDateDifferenceLocal(Date referenceDate, Date localDate) {
+
+ if (referenceDate == null || localDate == null) return null;
+
+ Calendar issuingCal = Calendar.getInstance();
+ issuingCal.clear();
+ issuingCal.setTime(referenceDate);
+ issuingCal.set(Calendar.HOUR_OF_DAY, 0);
+ issuingCal.set(Calendar.MINUTE, 0);
+ issuingCal.set(Calendar.SECOND, 0);
+ issuingCal.set(Calendar.MILLISECOND, 0);
+
+ Calendar fromCal = Calendar.getInstance();
+ fromCal.clear();
+ fromCal.setTime(localDate);
+ fromCal.set(Calendar.HOUR_OF_DAY, 0);
+ fromCal.set(Calendar.MINUTE, 0);
+ fromCal.set(Calendar.SECOND, 0);
+ fromCal.set(Calendar.MILLISECOND, 0);
+
+ long diff = localDate.getTime() - referenceDate.getTime();
+ long dayDiff = TimeUnit.DAYS.convert(diff, TimeUnit.MILLISECONDS);
+
+ return new Long(dayDiff);
+
+ }
+
+ public static Date getLocalDateFromDifference(Date issuingDate, int diff , Long time ) {
+
+ if (issuingDate == null) return null;
+
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.setTime(issuingDate);
+ cal.add(Calendar.DAY_OF_YEAR, diff);
+
+ if (time != null) {
+ int hours = time.intValue() / 60;
+ int minutes = time.intValue() - hours * 60;
+ cal.set(Calendar.HOUR_OF_DAY, hours);
+ cal.set(Calendar.MINUTE,minutes);
+ }
+
+ return cal.getTime();
+
+ }
+
+
+ public static void setTime(Calendar cal, Long time){
+
+ if (time != null) {
+ int hours = time.intValue() / 60;
+ int minutes = time.intValue() - hours * 60;
+ cal.set(Calendar.HOUR_OF_DAY, hours);
+ cal.set(Calendar.MINUTE,minutes);
+ }
+
+
+ }
+
+ public static Long getTime (Calendar cal) {
+
+ if (cal == null ||
+ !cal.isSet(Calendar.HOUR_OF_DAY) ||
+ !cal.isSet(Calendar.MINUTE) ) {
+ return null;
+ }
+
+ int time = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);
+ if (time > 0) {
+ return new Long (time );
+ }
+ return null;
+ }
+
+ public static Long getTime (Date date) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.setTime(date);
+
+ if (cal == null ||
+ !cal.isSet(Calendar.HOUR_OF_DAY) ||
+ !cal.isSet(Calendar.MINUTE) ) {
+ return null;
+ }
+
+ int time = cal.get(Calendar.HOUR_OF_DAY) * 60 + cal.get(Calendar.MINUTE);
+ if (time > 0) {
+ return new Long (time );
+ }
+ return null;
+ }
+
+ public static Date getDate(Date issuingDate, Long date, Long time){
+
+ if (issuingDate == null) return null;
+
+ if (date == null) {
+ date = 0L;
+ }
+
+ Calendar issuingCal = Calendar.getInstance();
+ issuingCal.clear();
+ issuingCal.setTime(issuingDate);
+
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.set(Calendar.YEAR,issuingCal.get(Calendar.YEAR) );
+ cal.set(Calendar.DAY_OF_YEAR,issuingCal.get(Calendar.DAY_OF_YEAR) );
+
+ cal.add(Calendar.DAY_OF_YEAR, date.intValue());
+
+ if (time == null) {
+ DateTimeUtils.setTime(cal,0L);
+ } else {
+ DateTimeUtils.setTime(cal,time);
+ }
+ return cal.getTime();
+
+ }
+
+
+ /**
+ * Gets the UTC offset.
+ *
+ * @param date and time of the issuing date
+ * @param date and time of the departure
+ * @return the UTC offset in multiples of 15 minutes
+ * the offset needs to be added to local time to get the UTC time (UTC = local + offset)
+ */
+ public static Long getUTCoffset(Date local) {
+
+
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.setTime(local);
+
+ /*
+ * Returns the amount of time in milliseconds to add to UTC to get standard time in this
+ * time zone. Because this value is not affected by daylight saving time, it is called raw offset.
+ * If an underlying TimeZone implementation subclass supports historical GMT offset changes, the method
+ * returns the raw offset value of the current date. In Honolulu, for example, its raw offset
+ * changed from GMT-10:30 to GMT-10:00 in 1947, and this method
+ * always returns -36000000 milliseconds (i.e., -10 hours).
+ */
+ int minuteOffset = - cal.getTimeZone().getRawOffset()/ ( 1000 * 60 * 15 );
+
+ return new Long (minuteOffset);
+
+ }
+
+ public static Date getUTCDate(Date issuingDate, Long date, Long time, Long UTCOffset) {
+
+ if (issuingDate == null) return null;
+
+ if (UTCOffset == null) return null;
+
+ if (time == null) return null;
+
+ if (date == null) {
+ date = 0L;
+ }
+
+ Calendar issuingCal = Calendar.getInstance();
+ issuingCal.clear();
+ issuingCal.setTime(issuingDate);
+
+ Calendar cal = Calendar.getInstance();
+ cal.clear();
+ cal.set(Calendar.YEAR,issuingCal.get(Calendar.YEAR) );
+ cal.set(Calendar.DAY_OF_YEAR,issuingCal.get(Calendar.DAY_OF_YEAR) );
+ cal.add(Calendar.DAY_OF_YEAR, date.intValue());
+
+ int hours = time.intValue() / 60;
+ int minutes = time.intValue() - hours * 60;
+ cal.set(Calendar.HOUR_OF_DAY, hours);
+ cal.set(Calendar.MINUTE,minutes);
+
+ cal.add(Calendar.MINUTE, (int) (UTCOffset * 15) );
+
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+
+ return cal.getTime();
+
+ }
+
+
+ public static Collection<Long> getActivatedDays(Date referenceDate, Collection<Date> days) {
+
+ ArrayList<Long> lDays = new ArrayList<Long>();
+
+ if (referenceDate == null) return lDays;
+
+ for (Date day : days) {
+ long dateDiff2 = DateTimeUtils.getDateDifference(referenceDate,day);
+ lDays.add(dateDiff2);
+ }
+
+ return lDays;
+
+ }
+
+ public static Date dateToUTC(Date date){
+ return new Date(date.getTime() - Calendar.getInstance().getTimeZone().getOffset(date.getTime()));
+ }
+
+}
diff --git a/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoder.java b/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoder.java
index 46f201d..46d2c1b 100644
--- a/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoder.java
+++ b/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoder.java
@@ -189,7 +189,12 @@ public class OpenAsn2ApiDecoder {
}
if (asnUicRailTicketData.getTransportDocument() != null && !asnUicRailTicketData.getTransportDocument().isEmpty()) {
- populateTravelDocuments(asnUicRailTicketData.getTransportDocument(),uicRailTicket,uicRailTicket.getIssuerDetails().getIssuingDate() );
+
+ // date is already converted to local time, use UTC for internal calculations
+ Date localIssuingDate = uicRailTicket.getIssuerDetails().getIssuingDate();
+ Date issuingDate = DateTimeUtils.dateToUTC(localIssuingDate);
+
+ populateTravelDocuments(asnUicRailTicketData.getTransportDocument(),uicRailTicket, issuingDate);
}
@@ -1627,13 +1632,7 @@ public class OpenAsn2ApiDecoder {
document.setValidUntil(asnDocument.getValidUntilDate(issuingDate));
document.setValidUntilUTCoffset(asnDocument.getValidUntilUTCOffset());
- if (asnDocument.getActivatedDay()!=null && !asnDocument.getActivatedDay().isEmpty()) {
- if (document.getValidFrom() != null) {
- document.getActivatedDays().addAll(asnDocument.getActivatedDays(document.getValidFrom()));
- } else {
- document.getActivatedDays().addAll(asnDocument.getActivatedDays(issuingDate));
- }
- }
+ document.getActivatedDays().addAll(asnDocument.getActivatedDays(issuingDate));
document.setExtension(convertExtension(asnDocument.getExtension()));
document.setInfoText(asnDocument.getInfoText());
diff --git a/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoderV2.java b/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoderV2.java
index 4aca9eb..c6eac0e 100644
--- a/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoderV2.java
+++ b/src/org/uic/barcode/ticket/api/utils/OpenAsn2ApiDecoderV2.java
@@ -191,7 +191,12 @@ public class OpenAsn2ApiDecoderV2 {
}
if (asnUicRailTicketData.getTransportDocument() != null && !asnUicRailTicketData.getTransportDocument().isEmpty()) {
- populateTravelDocuments(asnUicRailTicketData.getTransportDocument(),uicRailTicket,uicRailTicket.getIssuerDetails().getIssuingDate() );
+
+ // date is already converted to local time, use UTC for internal calculations
+ Date localIssuingDate = uicRailTicket.getIssuerDetails().getIssuingDate();
+ Date issuingDate = DateTimeUtils.dateToUTC(localIssuingDate);
+
+ populateTravelDocuments(asnUicRailTicketData.getTransportDocument(),uicRailTicket, issuingDate);
}