summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java')
-rw-r--r--src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java268
1 files changed, 268 insertions, 0 deletions
diff --git a/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java
new file mode 100644
index 0000000..034057a
--- /dev/null
+++ b/src/main/java/org/uic/barcode/dynamicContent/dfcb1/UicDynamicContentData1.java
@@ -0,0 +1,268 @@
+/*
+ *
+ */
+package org.uic.barcode.dynamicContent.dfcb1;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.TimeZone;
+
+import org.uic.barcode.asn1.datatypes.Asn1Default;
+import org.uic.barcode.asn1.datatypes.Asn1Optional;
+import org.uic.barcode.asn1.datatypes.CharacterRestriction;
+import org.uic.barcode.asn1.datatypes.FieldOrder;
+import org.uic.barcode.asn1.datatypes.HasExtensionMarker;
+import org.uic.barcode.asn1.datatypes.IntRange;
+import org.uic.barcode.asn1.datatypes.RestrictedString;
+import org.uic.barcode.asn1.datatypes.Sequence;
+import org.uic.barcode.asn1.datatypesimpl.OctetString;
+import org.uic.barcode.asn1.uper.UperEncoder;
+import org.uic.barcode.dynamicFrame.DataType;
+
+
+/**
+ * The Class UicDynamicContentData.
+ *
+ * The dynamic content for FDC1
+ *
+ */
+
+
+@Sequence
+@HasExtensionMarker
+public class UicDynamicContentData1 {
+
+ //-- 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
+ /** The day. */
+ //dynamicContentDay INTEGER (0..1070) DEFAULT 0,
+ @FieldOrder(order = 0)
+ @Asn1Default(value="0")
+ @IntRange(minValue=0, maxValue=1070)
+ public Long day;
+
+ /** The second of day. */
+ // dynamicContentTime INTEGER (0..86399) OPTIONAL,
+ @FieldOrder(order = 1)
+ @IntRange(minValue=0, maxValue=86399)
+ public Long secondOfDay;
+
+ //-- Coordinates of the place where the dynamic content has been generated
+ // -- (same GeoCoordinateType type as in UicRailTicketData)
+ /** The geo coordinate. */
+ //dynamicContentGeoCoordinate GeoCoordinateType OPTIONAL,
+ @FieldOrder(order = 2)
+ @Asn1Optional public GeoCoordinateType geoCoordinate;
+ //-- Response from the mobile to any data received from the terminal.
+ //-- The data received from the terminal may be a random number, or any other information.
+ //-- The response may be the data itself, a hashing of this data, or any other response.
+ // -- This response may be completed with other information: IMEI, mobile phone number...
+ //-- The type used is ExtensionData, as it is fully adapted.
+ // -- extensionId shall be set to:
+ // -- * "=" if the data included in extensionData is exactly the one that was transmitted by the terminal,
+ // -- * any other value (chosen by the issuer) in other cases.
+ /** The challenge response. */
+ //dynamicContentResponseToChallenge ExtensionData OPTIONAL,
+ @FieldOrder(order = 3)
+ @Asn1Optional public ExtensionData challengeResponse;
+
+ /** The extension. */
+ //-- proprietary data defined bilaterally
+ @FieldOrder(order = 4)
+ @Asn1Optional public ExtensionData extension;
+ //dynamicContentExtension ExtensionData OPTIONAL,
+
+ // challenge string asked by the TCO
+ @FieldOrder(order = 5)
+ @RestrictedString(CharacterRestriction.IA5String)
+ @Asn1Optional public String challengeString;
+
+ // hashed phone id
+ @FieldOrder(order = 6)
+ public OctetString phoneIdHash;
+
+ // hashed e-passport-id
+ @FieldOrder(order = 7)
+ public OctetString passHash;
+
+ //...
+
+ /**
+ * 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 geo coordinate.
+ *
+ * @return the geo coordinate
+ */
+ public GeoCoordinateType getGeoCoordinate() {
+ return geoCoordinate;
+ }
+
+ /**
+ * Sets the geo coordinate.
+ *
+ * @param geoCoordinate the new geo coordinate
+ */
+ public void setGeoCoordinate(GeoCoordinateType geoCoordinate) {
+ this.geoCoordinate = geoCoordinate;
+ }
+
+ /**
+ * Gets the challenge response.
+ *
+ * @return the challenge response
+ */
+ public ExtensionData getChallengeResponse() {
+ return challengeResponse;
+ }
+
+ /**
+ * Sets the challenge response.
+ *
+ * @param challengeResponse the new challenge response
+ */
+ public void setChallengeResponse(ExtensionData challengeResponse) {
+ this.challengeResponse = challengeResponse;
+ }
+
+ /**
+ * Gets the extension.
+ *
+ * @return the extension
+ */
+ public ExtensionData getExtension() {
+ return extension;
+ }
+
+ /**
+ * Sets the extension.
+ *
+ * @param extension the new extension
+ */
+ public void setExtension(ExtensionData extension) {
+ this.extension = extension;
+ }
+
+ /**
+ * Gets the time.
+ *
+ * @param issuingDate the issuing date in UTC
+ * @return the date and time of content creation in UTC
+ */
+ public Date getTime(Date issuingDate) {
+
+ Calendar cal = Calendar.getInstance();
+ cal.setTime(issuingDate);
+ cal.setTimeZone(TimeZone.getTimeZone("UTC"));
+ cal.set(Calendar.SECOND,0);
+ cal.set(Calendar.HOUR,0);
+ cal.set(Calendar.MINUTE,0);
+ cal.add(Calendar.DATE, day.intValue());
+ cal.add(Calendar.SECOND, secondOfDay.intValue());
+
+ return cal.getTime();
+ }
+
+ /**
+ * Sets the date time.
+ *
+ * @param dateUTC the current date and time in UTC
+ * @param issuingDateUTC the issuing date and time in UTC
+ */
+ public void setDateTime(Date dateUTC, Date issuingDateUTC) {
+
+ Calendar cal1 = Calendar.getInstance();
+ cal1.setTime(issuingDateUTC);
+
+ Calendar cal2 = Calendar.getInstance();
+ cal2.setTime(dateUTC);
+
+ int days1 = cal1.get(Calendar.DATE);
+ int days2 = cal2.get(Calendar.DATE);
+
+ day = new Long (days2 - days1);
+
+ secondOfDay = (long) cal2.get(Calendar.SECOND);
+ secondOfDay = secondOfDay + 60 * (long) cal2.get(Calendar.MINUTE);
+ secondOfDay = secondOfDay + 60 * 60 * (long) cal2.get(Calendar.HOUR_OF_DAY);
+
+ }
+
+ public static String getFormat() {
+ return "FDC1";
+ }
+
+ public DataType getDataType() {
+ DataType data = new DataType();
+ data.setFormat(UicDynamicContentData1.getFormat());
+ data.setByteData(UperEncoder.encode(this));
+ return data;
+ }
+
+ public String getChallengeString() {
+ return challengeString;
+ }
+
+ public void setChallengeString(String challengeString) {
+ this.challengeString = challengeString;
+ }
+
+ public OctetString getPhoneIdHash() {
+ return phoneIdHash;
+ }
+
+ public void setPhoneIdHash(OctetString phoneIdHash) {
+ this.phoneIdHash = phoneIdHash;
+ }
+
+ public OctetString getPassHash() {
+ return passHash;
+ }
+
+ public void setPassHash(OctetString passHash) {
+ this.passHash = passHash;
+ }
+
+
+
+}