From 9c27db0284c86583c135282e637f5e4dcb220c89 Mon Sep 17 00:00:00 2001 From: CGantert345 <57003061+CGantert345@users.noreply.github.com> Date: Wed, 12 May 2021 14:00:22 +0200 Subject: - Bug fix StaticHeader date format - Dynamic content for the dynamic content of the dynamic frame --- .../uic/barcode/dynamicContent/fdc1/TimeStamp.java | 144 +++++++++++++++++++++ 1 file changed, 144 insertions(+) create mode 100644 src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java (limited to 'src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java') diff --git a/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java new file mode 100644 index 0000000..32cce65 --- /dev/null +++ b/src/main/java/org/uic/barcode/dynamicContent/fdc1/TimeStamp.java @@ -0,0 +1,144 @@ +package org.uic.barcode.dynamicContent.fdc1; + +import java.time.Instant; +import java.time.temporal.ChronoField; +import java.util.Calendar; +import java.util.Date; +import java.util.TimeZone; + +import org.uic.barcode.asn1.datatypes.FieldOrder; +import org.uic.barcode.asn1.datatypes.IntRange; +import org.uic.barcode.asn1.datatypes.Sequence; + +// TODO: Auto-generated Javadoc +/** + * The Class TimeStamp. + */ +@Sequence +public class TimeStamp { + + + /* + -- Moment of generation of the dynamic content, expressed in UTC : + -- * dynamicContentDay is the number of days from issuing date + -- (UicRailTicketData.issuingDetail.issuingYear and issuingDay) + -- The range 0..1070 allows a validity equal to that of the validFrom (700) plus + -- validUntil (370) elements of the different transport documents of UicRailTicketData. + -- * dynamicContentTime is the number of seconds of the day + -- (from 0 = 0:00:00 to 86399 = 23:59:59) + -- These two elements shall be either both present, either both absent + dynamicContentDay INTEGER (0..366), + * + */ + @FieldOrder(order = 0) + @IntRange(minValue=1, maxValue=366) + public Long day; + + /** The second of day. */ + // dynamicContentTime INTEGER (0..86399) OPTIONAL, + @FieldOrder(order = 1) + @IntRange(minValue=0, maxValue=86399) + public Long secondOfDay; + + + + /** + * Instantiates a new time stamp and sets the time-stamp to now. + */ + public TimeStamp() { + Instant now = Instant.now(); + day = new Long(now.get(ChronoField.DAY_OF_YEAR)); + secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY)); + } + + /** + * Sets the the time-stamp to now. + */ + public void setNow() { + Instant now = Instant.now(); + day = new Long(now.get(ChronoField.DAY_OF_YEAR)); + secondOfDay = new Long(now.get(ChronoField.SECOND_OF_DAY)); + } + + /** + * Gets the day. + * + * @return the day + */ + public Long getDay() { + return day; + } + + /** + * Sets the day. + * + * @param day the new day + */ + public void setDay(Long day) { + this.day = day; + } + + /** + * Gets the time. + * + * @return the time + */ + public Long getTime() { + return secondOfDay; + } + + /** + * Sets the time. + * + * @param time the new time + */ + public void setTime(Long time) { + this.secondOfDay = time; + } + + /** + * Gets the time. + * + * @return the date and time of content creation in UTC + */ + public Date getTimeAsDate() { + + Calendar cal = Calendar.getInstance(); + int dayOfYear = cal.get(Calendar.DAY_OF_YEAR); + + if (dayOfYear - day.intValue() > 250) { + cal.add(Calendar.YEAR, 1); + } + if (day.intValue() - dayOfYear > 250) { + cal.add(Calendar.YEAR, -1); + } + + cal.setTimeZone(TimeZone.getTimeZone("UTC")); + cal.set(Calendar.SECOND,0); + cal.set(Calendar.HOUR,0); + cal.set(Calendar.MINUTE,0); + cal.set(Calendar.DAY_OF_YEAR, day.intValue()); + cal.add(Calendar.SECOND, secondOfDay.intValue()); + + return cal.getTime(); + } + + /** + * Sets the date time. + * + * @param dateUTC the current date and time in UTC + */ + public void setDateTime(Date dateUTC) { + + Calendar cal = Calendar.getInstance(); + cal.setTime(dateUTC); + + day = Long.valueOf(cal.get(Calendar.DAY_OF_YEAR)); + + secondOfDay = (long) cal.get(Calendar.SECOND); + secondOfDay = secondOfDay + 60 * (long) cal.get(Calendar.MINUTE); + secondOfDay = secondOfDay + 60 * 60 * (long) cal.get(Calendar.HOUR_OF_DAY); + + } + +} -- cgit v1.2.3