summaryrefslogtreecommitdiffstats
path: root/src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java')
-rw-r--r--src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java2336
1 files changed, 2336 insertions, 0 deletions
diff --git a/src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java b/src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java
new file mode 100644
index 0000000..83406e8
--- /dev/null
+++ b/src/main/java/org/uic/barcode/ticket/api/utils/Api2OpenAsnEncoderV3.java
@@ -0,0 +1,2336 @@
+/*
+ *
+ */
+package org.uic.barcode.ticket.api.utils;
+
+import java.util.Collection;
+import java.util.Date;
+
+import org.uic.barcode.asn1.datatypes.Asn1BigInteger;
+import org.uic.barcode.asn1.datatypesimpl.SequenceOfStringIA5;
+import org.uic.barcode.asn1.datatypesimpl.SequenceOfStringUTF8;
+import org.uic.barcode.asn1.datatypesimpl.SequenceOfUnrestrictedLong;
+import org.uic.barcode.ticket.EncodingFormatException;
+import org.uic.barcode.ticket.api.asn.omv3.BerthDetailData;
+import org.uic.barcode.ticket.api.asn.omv3.BerthTypeType;
+import org.uic.barcode.ticket.api.asn.omv3.BoardingOrArrivalType;
+import org.uic.barcode.ticket.api.asn.omv3.CarCarriageReservationData;
+import org.uic.barcode.ticket.api.asn.omv3.CardReferenceType;
+import org.uic.barcode.ticket.api.asn.omv3.CodeTableType;
+import org.uic.barcode.ticket.api.asn.omv3.CompartmentDetailsType;
+import org.uic.barcode.ticket.api.asn.omv3.CompartmentGenderType;
+import org.uic.barcode.ticket.api.asn.omv3.ConfirmationTypeType;
+import org.uic.barcode.ticket.api.asn.omv3.ControlData;
+import org.uic.barcode.ticket.api.asn.omv3.CountermarkData;
+import org.uic.barcode.ticket.api.asn.omv3.CustomerCardData;
+import org.uic.barcode.ticket.api.asn.omv3.CustomerStatusType;
+import org.uic.barcode.ticket.api.asn.omv3.DelayConfirmation;
+import org.uic.barcode.ticket.api.asn.omv3.DeltaCoordinates;
+import org.uic.barcode.ticket.api.asn.omv3.DocumentData;
+import org.uic.barcode.ticket.api.asn.omv3.ExtensionData;
+import org.uic.barcode.ticket.api.asn.omv3.FIPTicketData;
+import org.uic.barcode.ticket.api.asn.omv3.GenderType;
+import org.uic.barcode.ticket.api.asn.omv3.GeoCoordinateSystemType;
+import org.uic.barcode.ticket.api.asn.omv3.GeoCoordinateType;
+import org.uic.barcode.ticket.api.asn.omv3.GeoUnitType;
+import org.uic.barcode.ticket.api.asn.omv3.HemisphereLatitudeType;
+import org.uic.barcode.ticket.api.asn.omv3.HemisphereLongitudeType;
+import org.uic.barcode.ticket.api.asn.omv3.IncludedOpenTicketType;
+import org.uic.barcode.ticket.api.asn.omv3.IssuingData;
+import org.uic.barcode.ticket.api.asn.omv3.LineType;
+import org.uic.barcode.ticket.api.asn.omv3.LinkMode;
+import org.uic.barcode.ticket.api.asn.omv3.LoadingDeckType;
+import org.uic.barcode.ticket.api.asn.omv3.LuggageRestrictionType;
+import org.uic.barcode.ticket.api.asn.omv3.OpenTicketData;
+import org.uic.barcode.ticket.api.asn.omv3.ParkingGroundData;
+import org.uic.barcode.ticket.api.asn.omv3.PassData;
+import org.uic.barcode.ticket.api.asn.omv3.PassengerType;
+import org.uic.barcode.ticket.api.asn.omv3.PlacesType;
+import org.uic.barcode.ticket.api.asn.omv3.PolygoneType;
+import org.uic.barcode.ticket.api.asn.omv3.PriceTypeType;
+import org.uic.barcode.ticket.api.asn.omv3.RegionalValidityType;
+import org.uic.barcode.ticket.api.asn.omv3.RegisteredLuggageType;
+import org.uic.barcode.ticket.api.asn.omv3.ReservationData;
+import org.uic.barcode.ticket.api.asn.omv3.ReturnRouteDescriptionType;
+import org.uic.barcode.ticket.api.asn.omv3.RoofRackType;
+import org.uic.barcode.ticket.api.asn.omv3.RouteSectionType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfBerthDetailData;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfCardReferenceType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfCarrierNum;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfCountries;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfCustomerStatusType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfDeltaCoordinates;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfDocumentData;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfExtensionData;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfIncludedOpenTicketType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfPlaceNum;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfRegionalValidityType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfRegisteredLuggageType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfServiceBrands;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfTariffType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfTicketLinkType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfTransportTypes;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfTravelerId;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfTravelerType;
+import org.uic.barcode.ticket.api.asn.omv3.SequenceOfViaStationType;
+import org.uic.barcode.ticket.api.asn.omv3.SeriesDetailType;
+import org.uic.barcode.ticket.api.asn.omv3.ServiceType;
+import org.uic.barcode.ticket.api.asn.omv3.StationPassageData;
+import org.uic.barcode.ticket.api.asn.omv3.TariffType;
+import org.uic.barcode.ticket.api.asn.omv3.TicketDetailData;
+import org.uic.barcode.ticket.api.asn.omv3.TicketLinkType;
+import org.uic.barcode.ticket.api.asn.omv3.TicketType;
+import org.uic.barcode.ticket.api.asn.omv3.TimeRangeType;
+import org.uic.barcode.ticket.api.asn.omv3.TokenType;
+import org.uic.barcode.ticket.api.asn.omv3.TrainLinkType;
+import org.uic.barcode.ticket.api.asn.omv3.TrainValidityType;
+import org.uic.barcode.ticket.api.asn.omv3.TravelClassType;
+import org.uic.barcode.ticket.api.asn.omv3.TravelerData;
+import org.uic.barcode.ticket.api.asn.omv3.TravelerType;
+import org.uic.barcode.ticket.api.asn.omv3.UicRailTicketData;
+import org.uic.barcode.ticket.api.asn.omv3.ValidityPeriodDetailType;
+import org.uic.barcode.ticket.api.asn.omv3.ValidityPeriodType;
+import org.uic.barcode.ticket.api.asn.omv3.VatDetailType;
+import org.uic.barcode.ticket.api.asn.omv3.ViaStationType;
+import org.uic.barcode.ticket.api.asn.omv3.VoucherData;
+import org.uic.barcode.ticket.api.asn.omv3.ZoneType;
+import org.uic.barcode.ticket.api.spec.IBerth;
+import org.uic.barcode.ticket.api.spec.ICarCarriageReservation;
+import org.uic.barcode.ticket.api.spec.ICardReference;
+import org.uic.barcode.ticket.api.spec.ICompartmentDetails;
+import org.uic.barcode.ticket.api.spec.ICompartmentGenderType;
+import org.uic.barcode.ticket.api.spec.IControlDetail;
+import org.uic.barcode.ticket.api.spec.ICounterMark;
+import org.uic.barcode.ticket.api.spec.ICustomerCard;
+import org.uic.barcode.ticket.api.spec.ICustomerStatusDescription;
+import org.uic.barcode.ticket.api.spec.IDelayConfirmation;
+import org.uic.barcode.ticket.api.spec.IDocumentData;
+import org.uic.barcode.ticket.api.spec.IExtension;
+import org.uic.barcode.ticket.api.spec.IFipTicket;
+import org.uic.barcode.ticket.api.spec.IGeoCoordinate;
+import org.uic.barcode.ticket.api.spec.IGeoCoordinateSystemType;
+import org.uic.barcode.ticket.api.spec.IGeoUnitType;
+import org.uic.barcode.ticket.api.spec.IHemisphereLatitudeType;
+import org.uic.barcode.ticket.api.spec.IHemisphereLongitudeType;
+import org.uic.barcode.ticket.api.spec.IIncludedOpenTicket;
+import org.uic.barcode.ticket.api.spec.IIssuingDetail;
+import org.uic.barcode.ticket.api.spec.ILine;
+import org.uic.barcode.ticket.api.spec.ILinkMode;
+import org.uic.barcode.ticket.api.spec.ILoadingDeckType;
+import org.uic.barcode.ticket.api.spec.ILuggageRestriction;
+import org.uic.barcode.ticket.api.spec.IOpenTicket;
+import org.uic.barcode.ticket.api.spec.IParkingGround;
+import org.uic.barcode.ticket.api.spec.IPass;
+import org.uic.barcode.ticket.api.spec.IPlaces;
+import org.uic.barcode.ticket.api.spec.IPolygone;
+import org.uic.barcode.ticket.api.spec.IPriceTypeType;
+import org.uic.barcode.ticket.api.spec.IRegionalValidity;
+import org.uic.barcode.ticket.api.spec.IRegisteredLuggage;
+import org.uic.barcode.ticket.api.spec.IReservation;
+import org.uic.barcode.ticket.api.spec.IReturnRouteDescription;
+import org.uic.barcode.ticket.api.spec.IRoofRackType;
+import org.uic.barcode.ticket.api.spec.IRouteSection;
+import org.uic.barcode.ticket.api.spec.ISeriesDataDetails;
+import org.uic.barcode.ticket.api.spec.IServiceType;
+import org.uic.barcode.ticket.api.spec.IStationCodeTable;
+import org.uic.barcode.ticket.api.spec.IStationPassage;
+import org.uic.barcode.ticket.api.spec.ITariff;
+import org.uic.barcode.ticket.api.spec.ITicketLink;
+import org.uic.barcode.ticket.api.spec.ITicketType;
+import org.uic.barcode.ticket.api.spec.ITimeRange;
+import org.uic.barcode.ticket.api.spec.IToken;
+import org.uic.barcode.ticket.api.spec.ITrainLink;
+import org.uic.barcode.ticket.api.spec.ITrainValidity;
+import org.uic.barcode.ticket.api.spec.ITravelClassType;
+import org.uic.barcode.ticket.api.spec.ITraveler;
+import org.uic.barcode.ticket.api.spec.ITravelerDetail;
+import org.uic.barcode.ticket.api.spec.IUicRailTicket;
+import org.uic.barcode.ticket.api.spec.IValidityDetails;
+import org.uic.barcode.ticket.api.spec.IValidityRange;
+import org.uic.barcode.ticket.api.spec.IVatDetail;
+import org.uic.barcode.ticket.api.spec.IViaStation;
+import org.uic.barcode.ticket.api.spec.IVoucher;
+import org.uic.barcode.ticket.api.spec.IZone;
+
+/**
+ * The Class Api2OpenAsnEncoder.
+ */
+public class Api2OpenAsnEncoderV3 {
+
+ /**
+ * encode to asn1 model.
+ *
+ * @param uicTicket the uic ticket
+ * @return the encoded byte array
+ * @throws EncodingFormatException the encoding format exception
+ */
+ public byte[] encode(IUicRailTicket uicTicket) throws EncodingFormatException {
+
+ UicRailTicketData asnUicRailTicketData = populateToAsn1Model(uicTicket);
+
+ return asnUicRailTicketData.encode();
+
+ }
+
+
+ /**
+ * Populate asn1 model.
+ *
+ * @param uicTicket the uic ticket
+ * @return the org.uic.ticket.asn.om. uic rail ticket data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ public UicRailTicketData populateToAsn1Model(IUicRailTicket uicTicket) throws EncodingFormatException {
+
+ UicRailTicketData asnTicket = new UicRailTicketData();
+
+ if (uicTicket.getIssuerDetails() != null) {
+ asnTicket.setIssuingDetail(encodeIssuingDetails(uicTicket.getIssuerDetails()));
+ }
+
+
+ if (uicTicket.getControlDetails() != null) {
+ asnTicket.setControlDetail(encodeControlDetails(uicTicket.getControlDetails(), uicTicket.getIssuerDetails().getIssuingDate()));
+ }
+
+
+ if (uicTicket.getExtensions() != null && !uicTicket.getExtensions().isEmpty()){
+
+ SequenceOfExtensionData asnList = new SequenceOfExtensionData();
+ for (IExtension extension : uicTicket.getExtensions()){
+ ExtensionData asnExtension = encodeExtension(extension);
+ if (asnExtension!= null) {
+ asnList.add(asnExtension);
+ }
+ }
+ if (!asnList.isEmpty()){
+ asnTicket.setExtension(asnList);
+ }
+
+
+ }
+
+
+ if (uicTicket.getTravelerDetails() != null) {
+ asnTicket.setTravelerDetail(encodeTravelers(uicTicket.getTravelerDetails(),uicTicket.getIssuerDetails().getIssuingDate() ));
+ }
+
+ if (uicTicket.getDocumentData() != null && !uicTicket.getDocumentData().isEmpty()) {
+
+ SequenceOfDocumentData documents = new SequenceOfDocumentData();
+
+ for (IDocumentData document : uicTicket.getDocumentData()){
+
+ DocumentData asnDocument = null;
+
+ if (document instanceof IReservation) {
+ asnDocument = convertReservation((IReservation) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IOpenTicket) {
+ asnDocument = convertOpenTicket((IOpenTicket) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof ICarCarriageReservation) {
+ asnDocument = convertCarCarriageReservation((ICarCarriageReservation) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IFipTicket) {
+ asnDocument = convertFipTicket((IFipTicket) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IPass) {
+ asnDocument = convertPass((IPass) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IVoucher) {
+ asnDocument = convertVoucher((IVoucher) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof ICounterMark) {
+ asnDocument = convertCounterMark((ICounterMark) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IParkingGround) {
+ asnDocument = convertParkingGround((IParkingGround) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof IStationPassage) {
+ asnDocument = convertStationPassage((IStationPassage) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+ if (document instanceof ICustomerCard) {
+ asnDocument = encodeCustomerCard((ICustomerCard) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+
+ if (document instanceof IDelayConfirmation) {
+ asnDocument = encodeDelayConfirmation((IDelayConfirmation) document , uicTicket.getIssuerDetails().getIssuingDate());
+ }
+
+
+ if (asnDocument!= null && document.getToken()!= null) {
+ asnDocument.setToken(encodeToken(document.getToken()));
+ }
+
+ if (asnDocument != null) {
+ documents.add(asnDocument);
+ }
+ }
+ asnTicket.setTransportDocument(documents);
+ }
+
+
+ return asnTicket;
+ }
+
+ private DocumentData encodeDelayConfirmation(IDelayConfirmation document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ DelayConfirmation asnData = new DelayConfirmation();
+ asnDocument.getTicket().setDelayConfirmation(asnData);
+
+ asnData.setTrainIA5(UicEncoderUtils.getIA5NonNum(document.getTrain()));
+ asnData.setTrainNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getTrain())));
+
+ asnData.setReferenceNum(UicEncoderUtils.getNum(document.getReference()));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+ asnData.setStationIA5(UicEncoderUtils.getIA5NonNum(document.getStation()));
+ asnData.setStationNum(UicEncoderUtils.getNum(document.getStation()));
+
+
+ asnData.setPlannedArrivalDate(document.getArrivalDate());
+ asnData.setDepartureUTCOffset(document.getArrivalUTCoffset());
+
+ asnData.setAffectedTickets(encodeTicketLickList(document.getLinkedTickets()));
+
+ asnData.setConfirmationType(ConfirmationTypeType.values()[document.getConfirmationType()]);
+
+ asnData.setDelay(new Long(document.getDelay()));
+
+ asnData.setTrainCancelled(document.isTrainCancelled());
+
+
+ asnData.setInfoText(document.getInfoText());
+
+ asnData.setStationNameUTF8(document.getStationName());
+
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ return asnDocument;
+ }
+
+
+ /**
+ * Convert car carriage reservation.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertCarCarriageReservation( ICarCarriageReservation document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ CarCarriageReservationData asnData = new CarCarriageReservationData();
+ asnDocument.getTicket().setCarCarriageReservation(asnData);
+
+ asnData.setTrainIA5(UicEncoderUtils.getIA5NonNum(document.getTrain()));
+ asnData.setTrainNum(UicEncoderUtils.getNum(document.getTrain()));
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setReferenceNum(UicEncoderUtils.getNum(document.getReference()));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUICReservation && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setCarrierNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getCarriers())));
+ asnData.setCarrierIA5(UicEncoderUtils.getIA5NonNumList(document.getCarriers()));
+
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ asnData.setCompartmentDetails(encodeCompartmentDetails(document.getCompartmentDetails()));
+
+
+ if (document.getPriceType()!= IPriceTypeType.travelPrice && document.getPriceType() != null){
+ asnData.setPriceType(PriceTypeType.valueOf(document.getPriceType().name()));
+ }
+
+
+ if (document.getServiceBrand()!= null) {
+ asnData.setServiceBrand(UicEncoderUtils.getRestrictedInt(document.getServiceBrand().getServiceBrand(),1,9999));
+ asnData.setServiceBrandAbrUTF8(document.getServiceBrand().getServiceBrandAbbreviation());
+ asnData.setServiceBrandNameUTF8(document.getServiceBrand().getServiceBrandDescription());
+
+ }
+ if (document.getStationCodeTable() != IStationCodeTable.stationUICReservation && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnData.setFromStationNameUTF8(document.getFromStationName());
+ asnData.setToStationNameUTF8(document.getToStationName());
+
+
+ asnData.setAttachedBicycles(UicEncoderUtils.getRestrictedInt(document.getAttachedBicycles(),1,5));
+ asnData.setAttachedBoats(UicEncoderUtils.getRestrictedInt(document.getAttachedBoats(),1,2));
+ asnData.setAttachedSurfboards(UicEncoderUtils.getRestrictedInt(document.getAttachedSurfboards(),1,5));
+
+ if (document.getLoadingDeck() != ILoadingDeckType.upper && document.getLoadingDeck() != null){
+ asnData.setLoadingDeck(LoadingDeckType.valueOf(document.getLoadingDeck().name()));
+ }
+
+ asnData.setLoadingListEntry(UicEncoderUtils.getRestrictedInt(document.getAttachedSurfboards(),1,200));
+
+ asnData.setBoatCategory(UicEncoderUtils.getRestrictedInt(document.getBoatCategory(),1,6));
+ asnData.setCarCategory(UicEncoderUtils.getRestrictedInt(document.getCarCategory(),1,9));
+ asnData.setCoach(UicEncoderUtils.getIA5(document.getCoach()));
+
+ asnData.setRoofRackHeight(UicEncoderUtils.getRestrictedInt(document.getRoofRackHeight(),1,99));
+
+ if (document.getRoofRackType()!= IRoofRackType.norack && document.getRoofRackType() != null) {
+ asnData.setRoofRackType(RoofRackType.valueOf(document.getRoofRackType().name()));
+ }
+
+ if (document.getTariff() != null) {
+ asnData.setTariff(encodeTariff(document.getTariff()));
+ }
+ asnData.setNumberPlate(UicEncoderUtils.getIA5(document.getNumberPlate()));
+ asnData.setPlace(UicEncoderUtils.getIA5(document.getPlace()));
+
+ if (document.isTextileRoof() ) {
+ asnData.setTextileRoof(true);
+ } else {
+ asnData.setTextileRoof(false);
+ }
+
+ asnData.setTrailerPlate(UicEncoderUtils.getIA5(document.getTrailerPlate()));
+
+ asnData.setLoadingDates(document.getBeginLoading(),document.getEndLoading(), issuingDate);
+
+ asnData.setLoadingUTCOffset(document.getLoadingTimeUTCoffset());
+
+ asnData.setPrice(document.getPrice());
+
+ if (document.getVatDetails() != null && !document.getVatDetails().isEmpty()){
+ for (IVatDetail vat : document.getVatDetails()) {
+ asnData.addVatDetail(encodeVatDetail(vat));
+ }
+ }
+
+
+ return asnDocument;
+ }
+
+
+ /**
+ * Encode places.
+ *
+ * @param places the places
+ * @return the places type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private PlacesType encodePlaces(IPlaces places) throws EncodingFormatException {
+
+ if (places == null) {
+ return null;
+ }
+
+ PlacesType asnData = new PlacesType();
+
+ asnData.setCoach(UicEncoderUtils.getIA5(places.getCoach()));
+ asnData.setPlaceDescription(places.getPlaceDescription());
+ asnData.setPlaceString(UicEncoderUtils.getIA5(places.getPlaceString()));
+ asnData.setPlaceNum(SequenceOfPlaceNum.getSequence(UicEncoderUtils.getNumList(places.getPlaces())));
+ asnData.setPlaceIA5(UicEncoderUtils.getIA5NonNumList(places.getPlaces()));
+
+ return asnData;
+ }
+
+
+ /**
+ * Encode compartment details.
+ *
+ * @param compartmentDetails the compartment details
+ * @return the compartment details type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private CompartmentDetailsType encodeCompartmentDetails(ICompartmentDetails compartmentDetails) throws EncodingFormatException {
+
+ if (compartmentDetails == null) {
+ return null;
+ }
+ CompartmentDetailsType asnData = new CompartmentDetailsType();
+
+ asnData.setCoachType(UicEncoderUtils.getRestrictedInt(compartmentDetails.getCoachType(), 1,99));
+ asnData.setCoachTypeDescr(compartmentDetails.getCoachTypeDescr());
+ asnData.setCompartmentType(UicEncoderUtils.getRestrictedInt(compartmentDetails.getCompartmentType(), 1,99));
+ asnData.setCompartmentTypeDescr(compartmentDetails.getCompartmentTypeDescr());
+ asnData.setSpecialAllocation(UicEncoderUtils.getRestrictedInt(compartmentDetails.getSpecialAllocation(), 1,99));
+ asnData.setSpecialAllocationDescr(compartmentDetails.getSpecialAllocationDescr());
+
+ return asnData;
+ }
+
+ /**
+ * Encode berths.
+ *
+ * @param berths the berths
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfBerthDetailData encodeBerths(Collection<IBerth> berths) throws EncodingFormatException {
+
+ if (berths == null || berths.isEmpty()) {
+ return null;
+ }
+ SequenceOfBerthDetailData asnList = new SequenceOfBerthDetailData();
+
+ for ( IBerth berth : berths){
+ BerthDetailData asnBerth = new BerthDetailData();
+
+ if (berth.getType() != null) {
+ asnBerth.setBerthType(BerthTypeType.valueOf(berth.getType().name()));
+ }
+
+ if (berth.getGender()!= ICompartmentGenderType.family && berth.getGender() != null) {
+ asnBerth.setGender(CompartmentGenderType.valueOf(berth.getGender().name()));
+ }
+
+ asnBerth.setNumberOfBerths(UicEncoderUtils.getRestrictedInt(berth.getNumberOfBerths(), 1 , 999 ));
+
+ asnList.add(asnBerth);
+ }
+
+ if (asnList.isEmpty()) {
+ return null;
+ }
+ return asnList;
+ }
+
+ /**
+ * Convert reservation.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertReservation(IReservation document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ ReservationData asnData = new ReservationData();
+ asnDocument.getTicket().setReservation(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setReferenceNum(UicEncoderUtils.getNum(document.getReference()));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ asnData.setCarrierNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getCarriers())));
+ asnData.setCarrierIA5(UicEncoderUtils.getIA5NonNumList(document.getCarriers()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUICReservation && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnData.setFromStationNameUTF8(document.getFromStationName());
+ asnData.setToStationNameUTF8(document.getToStationName());
+
+ asnData.setTrainIA5(UicEncoderUtils.getIA5NonNum(document.getTrain()));
+ asnData.setTrainNum(UicEncoderUtils.getNum(document.getTrain()));
+
+ asnData.setTariff(encodeTariffCollection(document.getTariffs()));
+
+ asnData.setDepartureArrivalDates(document.getDepartureDate(),document.getArrivalDate(), issuingDate);
+
+ if (document.getDepartureUTCoffset() != null) {
+ asnData.setDepartureUTCOffset(document.getDepartureUTCoffset());
+ if (document.getArrivalUTCoffset() != null && document.getArrivalUTCoffset() != document.getDepartureUTCoffset()){
+ asnData.setArrivalUTCOffset(document.getArrivalUTCoffset());
+ }
+ }
+
+
+
+ if (document.getClassCode() != ITravelClassType.second && document.getClassCode() != null){
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+
+ asnData.setBerth(encodeBerths(document.getBerths()));
+
+ asnData.setCompartmentDetails(encodeCompartmentDetails(document.getCompartmentDetails()));
+
+ asnData.setLuggage(encodeLuggage(document.getLuggageRestriction()));
+
+ asnData.setNumberOfOverbooked(UicEncoderUtils.getRestrictedInt(document.getNumberOfOverbooked(), 1, 200));
+ asnData.setNumberOfSupplements(UicEncoderUtils.getRestrictedInt(document.getNumberOfSupplements(), 1, 200));
+
+ if (document.getPriceType()!= IPriceTypeType.travelPrice && document.getPriceType() != null){
+ asnData.setPriceType(PriceTypeType.valueOf(document.getPriceType().name()));
+ }
+ asnData.setTypeOfSupplement(UicEncoderUtils.getRestrictedInt(document.getTypeOfSupplement(), 1, 9));
+
+ asnData.setPlaces(encodePlaces(document.getPlaces()));
+ asnData.setBicyclePlaces(encodePlaces(document.getBicyclePlaces()));
+
+
+ if (document.getService() != IServiceType.seat && document.getService() != null) {
+ asnData.setService(ServiceType.valueOf(document.getService().name()));
+ }
+
+ if (document.getServiceBrand()!= null) {
+ asnData.setServiceBrand(UicEncoderUtils.getRestrictedInt(document.getServiceBrand().getServiceBrand(),1,9999));
+ asnData.setServiceBrandAbrUTF8(document.getServiceBrand().getServiceBrandAbbreviation());
+ asnData.setServiceBrandNameUTF8(document.getServiceBrand().getServiceBrandDescription());
+
+ }
+
+ if (document.getServiceLevel() != null && document.getServiceLevel().length() > 2) {
+ throw new EncodingFormatException("Service level too long");
+ }
+ asnData.setServiceLevel(UicEncoderUtils.getIA5(document.getServiceLevel()));
+
+ asnData.setPrice(document.getPrice());
+
+ if (document.getVatDetails() != null && !document.getVatDetails().isEmpty()){
+ for (IVatDetail vat : document.getVatDetails()) {
+ asnData.addVatDetail(encodeVatDetail(vat));
+ }
+ }
+
+ return asnDocument;
+ }
+
+ /**
+ * Encode included addons.
+ *
+ * @param tickets the tickets
+ * @param issuingDate the issuing date
+ * @param classCode the class code
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfIncludedOpenTicketType encodeIncludedAddons(Collection<IIncludedOpenTicket> tickets, Date issuingDate, ITravelClassType classCode) throws EncodingFormatException {
+
+ if (tickets == null || tickets.isEmpty()) {
+ return null;
+ }
+ SequenceOfIncludedOpenTicketType asnList = new SequenceOfIncludedOpenTicketType();
+
+ for ( IIncludedOpenTicket ticket : tickets){
+
+ IncludedOpenTicketType asnTicket = encodeIncludedOpenTicket(ticket,issuingDate,classCode);
+ if (asnTicket!=null) {
+ asnList.add(asnTicket);
+ }
+ }
+
+ if (asnList.isEmpty()) {
+ return null;
+ }
+ return asnList;
+ }
+
+
+ /**
+ * Encode included open ticket.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @param classCode the class code
+ * @return the included open ticket type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private IncludedOpenTicketType encodeIncludedOpenTicket(IIncludedOpenTicket document, Date issuingDate, ITravelClassType classCode) throws EncodingFormatException {
+
+ if (document == null) return null;
+
+ IncludedOpenTicketType asnData = new IncludedOpenTicketType();
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setIncludedCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getIncludedCarriers())));
+ asnData.setIncludedCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getIncludedCarriers()));
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,9999)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,9999)));
+
+ asnData.setExcludedTransportTypes(SequenceOfTransportTypes.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedTransportTypes(),0,31)));
+ asnData.setIncludedTransportTypes(SequenceOfTransportTypes.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedTransportTypes(),0,31)));
+
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+
+ if (document.getTariffs() != null && document.getTariffs().size() > 0){
+ asnData.setTariffs(encodeTariffCollection(document.getTariffs()));
+ }
+
+ if (document.getClassCode() != classCode && document.getClassCode() != null){
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+ if (document.getExternalIssuer() > 0) {
+ asnData.setExternalIssuerId(new Long(document.getExternalIssuer()));
+ }
+
+ if (document.getAuthorizationCode() > 0) {
+ asnData.setIssuerAutorizationId(new Long(document.getAuthorizationCode()));
+ }
+
+ if (document.getValidRegionList()!= null && document.getValidRegionList().size() > 0) {
+ asnData.setValidRegion(encodeRegionCollection(document.getValidRegionList(), issuingDate));
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Encode return description.
+ *
+ * @param route the route
+ * @param issuingDate the issuing date
+ * @return the return route description type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private ReturnRouteDescriptionType encodeReturnDescription(IReturnRouteDescription route, Date issuingDate) throws EncodingFormatException {
+
+ if (route == null) return null;
+
+ ReturnRouteDescriptionType asnData = new ReturnRouteDescriptionType();
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(route.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(route.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(route.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(route.getToStation()));
+
+ asnData.setFromStationNameUTF8(route.getFromStationName());
+ asnData.setToStationNameUTF8(route.getToStationName());
+
+ if (route.getValidRegionList()!= null && route.getValidRegionList().size() > 0) {
+ asnData.setValidReturnRegion(encodeRegionCollection(route.getValidRegionList(), issuingDate));
+ }
+
+ if (route.getValidRegionDesc() != null && route.getValidRegionDesc().length() > 0){
+ asnData.setValidReturnRegionDesc(route.getValidRegionDesc());
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Encode luggage.
+ *
+ * @param luggageRestriction the luggage restriction
+ * @return the luggage restriction type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private LuggageRestrictionType encodeLuggage(ILuggageRestriction luggageRestriction) throws EncodingFormatException {
+
+ if (luggageRestriction== null) return null;
+
+ LuggageRestrictionType asnData = new LuggageRestrictionType();
+
+ asnData.setMaxHandLuggagePieces(UicEncoderUtils.getRestrictedIntWithDefault(luggageRestriction.getMaxHandLuggagePieces(),1,99,3));
+
+ asnData.setMaxNonHandLuggagePieces(UicEncoderUtils.getRestrictedIntWithDefault(luggageRestriction.getMaxNonHandLuggagePieces(),1,99,1));
+
+ if (luggageRestriction.getRegisteredLuggage() != null && luggageRestriction.getRegisteredLuggage().size() > 0) {
+ asnData.setRegisteredLuggage(encodeRegisteredLuggage(luggageRestriction.getRegisteredLuggage()));
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Encode registered luggage.
+ *
+ * @param registeredLuggage the registered luggage
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfRegisteredLuggageType encodeRegisteredLuggage(Collection<IRegisteredLuggage> registeredLuggage) throws EncodingFormatException {
+ if (registeredLuggage== null || registeredLuggage.isEmpty()) {
+ return null;
+ }
+ SequenceOfRegisteredLuggageType asnList = new SequenceOfRegisteredLuggageType();
+
+ for ( IRegisteredLuggage luggage : registeredLuggage){
+ RegisteredLuggageType asnLuggage = new RegisteredLuggageType();
+ asnLuggage.setMaxSize(UicEncoderUtils.getRestrictedInt(luggage.getMaxSize(),1,300));
+ asnLuggage.setMaxWeight(UicEncoderUtils.getRestrictedInt(luggage.getMaxWeight(),1,99));
+ asnLuggage.setRegistrationId(luggage.getRegistrationId());
+
+ asnList.add(asnLuggage);
+ }
+
+ if (asnList.isEmpty()){
+ return null;
+ }
+ return asnList;
+ }
+
+ /**
+ * Convert open ticket.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertOpenTicket(IOpenTicket document,Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ OpenTicketData asnData = new OpenTicketData();
+ asnTicket.setOpenTicket(asnData);
+
+ asnDocument.setTicket(asnTicket);
+ asnTicket.setOpenTicket(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+ asnData.setReferenceNum(UicEncoderUtils.getNum(document.getReference()));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnData.setFromStationNameUTF8(document.getFromStationName());
+ asnData.setToStationNameUTF8(document.getToStationName());
+
+ asnData.setCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getIncludedCarriers())));
+ asnData.setCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getIncludedCarriers()));
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,32000)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,32000)));
+
+ asnData.setExcludedTransportTypes(SequenceOfTransportTypes.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedTransportTypes(),0,31)));
+ asnData.setIncludedTransportTypes(SequenceOfTransportTypes.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedTransportTypes(),0,31)));
+
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+
+ asnData.setTariffs(encodeTariffCollection(document.getTariffs()));
+
+ if (document.getActivatedDays() != null && !document.getActivatedDays().isEmpty()) {
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
+ }
+ if (document.getClassCode() != ITravelClassType.second && document.getClassCode() != null){
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+ if (document.getExternalIssuer()>0) {
+ asnData.setExtIssuerId(new Long(document.getExternalIssuer()));
+ }
+
+ if (document.getAuthorizationCode()>0) {
+ asnData.setIssuerAutorizationId(new Long (document.getAuthorizationCode()));
+ }
+
+ if (document.getValidRegionList() != null && document.getValidRegionList().size() > 0) {
+ asnData.setValidRegion(encodeRegionCollection(document.getValidRegionList(), issuingDate));
+ }
+ asnData.setValidRegionDesc(document.getValidRegionDesc());
+
+ if (document.getIncludedAddOns() != null && document.getIncludedAddOns().size() > 0) {
+ asnData.setIncludedAddOns(encodeIncludedAddons(document.getIncludedAddOns(),issuingDate, document.getClassCode()));
+ }
+
+ if (document.getLuggageRestriction() != null) {
+ asnData.setLuggage(encodeLuggage(document.getLuggageRestriction()));
+ }
+
+ if (document.isReturnIncluded()) {
+ asnData.setReturnIncluded(true);
+ asnData.setReturnDescription(encodeReturnDescription(document.getReturnDescription(),issuingDate));
+ } else {
+ asnData.setReturnIncluded(false);
+ }
+
+ asnData.setPrice(document.getPrice());
+
+ if (document.getVatDetails() != null && !document.getVatDetails().isEmpty()){
+ for (IVatDetail vat : document.getVatDetails()) {
+ asnData.addVatDetail(encodeVatDetail(vat));
+ }
+ }
+
+
+ return asnDocument;
+ }
+
+ /**
+ * Convert counter mark.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertCounterMark(ICounterMark document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ CountermarkData asnData = new CountermarkData();
+ asnDocument.getTicket().setCounterMark(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+
+ asnData.setTicketReferenceNum(UicEncoderUtils.getNum(document.getTicketReference()));
+ asnData.setTicketReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getTicketReference()));
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnData.setFromStationNameUTF8(document.getFromStationName());
+ asnData.setToStationNameUTF8(document.getToStationName());
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+
+
+ asnData.setReferenceNum(UicEncoderUtils.getNum(document.getReference()));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnData.setFromStationNameUTF8(document.getFromStationName());
+ asnData.setToStationNameUTF8(document.getToStationName());
+
+ asnData.setCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getIncludedCarriers())));
+ asnData.setCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getIncludedCarriers()));
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,32000)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,32000)));
+
+ if (document.getValidRegionList() != null && document.getValidRegionList().size() > 0) {
+ asnData.setValidRegion(encodeRegionCollection(document.getValidRegionList(), issuingDate));
+ }
+ asnData.setValidRegionDesc(document.getValidRegionDesc());
+
+ if (document.getClassCode() != ITravelClassType.second && document.getClassCode() != null){
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+
+
+ if (document.isReturnIncluded()) {
+ asnData.setReturnIncluded(true);
+ if (document.getReturnDescription()!= null) {
+ asnData.setReturnDescription(encodeReturnDescription(document.getReturnDescription(),issuingDate));
+ }
+ } else {
+ asnData.setReturnIncluded(false);
+ }
+
+ return asnDocument;
+ }
+
+
+
+ /**
+ * Encode via station collection.
+ *
+ * @param stations the stations
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfViaStationType encodeViaStationCollection(Collection<IViaStation> stations) throws EncodingFormatException {
+ if (stations== null || stations.isEmpty()) {
+ return null;
+ }
+ SequenceOfViaStationType asnList = new SequenceOfViaStationType();
+
+ for ( IViaStation station : stations) {
+ ViaStationType asnData = encodeViaStation(station);
+ if (asnData != null) {
+ asnList.add(asnData);
+ }
+ }
+
+ if (asnList.isEmpty()) {
+ return null;
+ }
+
+ return asnList;
+ }
+
+
+ /**
+ * Encode via station.
+ *
+ * @param document the data
+ * @return the via station type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private ViaStationType encodeViaStation(IViaStation document) throws EncodingFormatException {
+ if (document == null) return null;
+
+ ViaStationType asnData =new ViaStationType();
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setStationIA5(UicEncoderUtils.getIA5NonNum(document.getStation()));
+ asnData.setStationNum(UicEncoderUtils.getNum(document.getStation()));
+
+ asnData.setAlternativeRoutes(encodeViaStationCollection(document.getAlternativeRoutes()));
+
+ if (document.isBorder()) {
+ asnData.setBorder(true);
+ } else {
+ asnData.setBorder(false);
+ }
+
+ asnData.setCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getCarriers())));
+ asnData.setCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getCarriers()));
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,32000)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,32000)));
+
+ asnData.setRoute(encodeViaStationCollection(document.getRoute()));
+
+ if (document.getRouteId() > 0){
+ asnData.setSeriesId(new Long(document.getRouteId()));
+ }
+ return asnData;
+ }
+
+ /**
+ * Encode zone.
+ *
+ * @param document the data
+ * @return the zone type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private ZoneType encodeZone(IZone document) throws EncodingFormatException {
+ if (document == null) return null;
+
+ ZoneType asnData =new ZoneType();
+
+ if (document.getBinaryZoneId() != null && document.getBinaryZoneId().length > 0) {
+ asnData.setBinaryZoneId(document.getBinaryZoneId());
+ }
+ asnData.setCarrierNum(UicEncoderUtils.getNum(document.getCarrier()));
+ asnData.setCarrierIA5(UicEncoderUtils.getIA5NonNum(document.getCarrier()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+ asnData.setEntryStationIA5(UicEncoderUtils.getIA5NonNum(document.getEntryStation()));
+ asnData.setEntryStationNum(UicEncoderUtils.getNum(document.getEntryStation()));
+
+ asnData.setTerminatingStationIA5(UicEncoderUtils.getIA5NonNum(document.getTerminatingStation()));
+ asnData.setTerminatingStationNum(UicEncoderUtils.getNum(document.getTerminatingStation()));
+
+ asnData.setZoneId(SequenceOfUnrestrictedLong.getSequence(UicEncoderUtils.encodeIntegerCollection(document.getZoneIds())));
+
+ if (document.getCity() > 0) {
+ asnData.setCity(Asn1BigInteger.toAsn1(document.getCity()));
+ }
+
+ if (document.getNUTScode() != null && document.getNUTScode().length() > 0) {
+ asnData.setNutsCode(document.getNUTScode());
+ }
+
+ return asnData;
+ }
+
+
+
+
+
+ /**
+ * Encode train link.
+ *
+ * @param data the data
+ * @param issuingDate the issuing date
+ * @return the train link type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private TrainLinkType encodeTrainLink(ITrainLink data, Date issuingDate) throws EncodingFormatException {
+ if (data == null) return null;
+
+ TrainLinkType asnData =new TrainLinkType();
+
+ asnData.setFromStationIA5(UicEncoderUtils.getIA5NonNum(data.getFromStation()));
+ asnData.setFromStationNum(UicEncoderUtils.getNum(data.getFromStation()));
+
+ asnData.setToStationIA5(UicEncoderUtils.getIA5NonNum(data.getToStation()));
+ asnData.setToStationNum(UicEncoderUtils.getNum(data.getToStation()));
+
+ asnData.setFromStationName(data.getFromStationName());
+ asnData.setToStationName(data.getToStationName());
+
+ asnData.setTrainIA5(UicEncoderUtils.getIA5NonNum(data.getTrain()));
+ asnData.setTrainNum(UicEncoderUtils.getNum(data.getTrain()));
+
+ asnData.setDepartureDate(data.getDepartureDateTime(), issuingDate);
+
+ return asnData;
+ }
+
+ /**
+ * Encode polygone.
+ *
+ * @param data the data
+ * @return the polygone type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private PolygoneType encodePolygone(IPolygone data) throws EncodingFormatException {
+ if (data == null) return null;
+ if (data.getEdges() == null || data.getEdges().isEmpty()) {
+ return null;
+ }
+
+ PolygoneType asnData = new PolygoneType();
+ SequenceOfDeltaCoordinates asnList = new SequenceOfDeltaCoordinates();
+
+ boolean firstEdge = true;
+
+ for ( IGeoCoordinate edge : data.getEdges()) {
+
+ if (firstEdge) {
+ asnData.setFirstEdge(encodeGeoCoordinate(edge));
+ firstEdge = false;
+ } else {
+ DeltaCoordinates delta = new DeltaCoordinates();
+ delta.setLatitude(Asn1BigInteger.toAsn1(asnData.getFirstEdge().getLatitude() - edge.getLatitude()));
+ delta.setLatitude(Asn1BigInteger.toAsn1(asnData.getFirstEdge().getLongitude() - edge.getLongitude()));
+ }
+
+ }
+ if (!asnList.isEmpty()) {
+ asnData.setEdges(asnList);
+ }
+ return asnData;
+ }
+
+ /**
+ * Encode line.
+ *
+ * @param document the data
+ * @return the line type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private LineType encodeLine(ILine document) throws EncodingFormatException {
+ if (document == null) return null;
+ LineType asnData =new LineType();
+
+ asnData.setBinaryZoneId(document.getBinaryZoneId());
+ asnData.setCarrierNum(UicEncoderUtils.getNum(document.getCarrier()));
+ asnData.setCarrierIA5(UicEncoderUtils.getIA5NonNum(document.getCarrier()));
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+ asnData.setEntryStationIA5(UicEncoderUtils.getIA5NonNum(document.getEntryStation()));
+ asnData.setEntryStationNum(UicEncoderUtils.getNum(document.getEntryStation()));
+
+ asnData.setTerminatingStationIA5(UicEncoderUtils.getIA5NonNum(document.getTerminatingStation()));
+ asnData.setTerminatingStationNum(UicEncoderUtils.getNum(document.getTerminatingStation()));
+
+ if (document.getCity() > 0) {
+ asnData.setCity(new Long(document.getCity()));
+ }
+
+ asnData.setLineId(SequenceOfUnrestrictedLong.getSequence(UicEncoderUtils.encodeIntegerCollection(document.getLineIds())));
+
+ return asnData;
+ }
+
+
+
+ /**
+ * Encode region collection.
+ *
+ * @param regionList the region list
+ * @param issuingDate the issuing date
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfRegionalValidityType encodeRegionCollection(Collection<IRegionalValidity> regionList, Date issuingDate) throws EncodingFormatException {
+
+ if (regionList == null || regionList.isEmpty()) {
+ return null;
+ }
+
+ SequenceOfRegionalValidityType asnList = new SequenceOfRegionalValidityType();
+
+ for ( IRegionalValidity region :regionList) {
+
+ RegionalValidityType asnRegion = new RegionalValidityType();
+
+ if (region instanceof ILine ) {
+ LineType line = encodeLine((ILine)region);
+ if (line == null){
+ break;
+ }
+ asnRegion.setLines(line);
+ asnList.add(asnRegion);
+ } else if (region instanceof IPolygone ) {
+ PolygoneType line = encodePolygone((IPolygone)region);
+ if (line == null){
+ break;
+ }
+ asnRegion.setPolygone(line);
+ asnList.add(asnRegion);
+ } else if (region instanceof ITrainLink ) {
+ TrainLinkType trainLink = encodeTrainLink((ITrainLink)region, issuingDate);
+ if (trainLink == null){
+ break;
+ }
+ asnRegion.setTrainLink(trainLink);
+ asnList.add(asnRegion);
+ } else if (region instanceof IViaStation ) {
+ ViaStationType viaStation = encodeViaStation((IViaStation)region);
+ if (viaStation == null){
+ break;
+ }
+ asnRegion.setViaStations(viaStation);
+ asnList.add(asnRegion);
+ } else if (region instanceof IZone ) {
+ ZoneType zone = encodeZone((IZone)region);
+ if (zone == null){
+ break;
+ }
+ asnRegion.setZones(zone);
+ asnList.add(asnRegion);
+ }
+
+ }
+
+ if (asnList.isEmpty()) {
+ return null;
+ }
+
+ return asnList;
+ }
+
+ /**
+ * Convert parking ground.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertParkingGround(IParkingGround document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ ParkingGroundData asnData = new ParkingGroundData();
+ asnDocument.getTicket().setParkingGround(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setReferenceNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getReference())));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnData.setStationIA5(UicEncoderUtils.getIA5NonNum(document.getStation()));
+ asnData.setStationNum(UicEncoderUtils.getNum(document.getStation()));
+
+ asnData.setAccessCode(UicEncoderUtils.getIA5(document.getAccessCode()));
+ asnData.setEntryTrack(document.getEntryTrack());
+
+ if (document.getFromParkingDate() != null){
+ asnData.setParkingDates(document.getFromParkingDate(),document.getToParkingDate(),issuingDate);
+ }
+
+ asnData.setLocation(document.getLocation());
+ asnData.setNumberPlate(UicEncoderUtils.getIA5(document.getNumberPlate()));
+ asnData.setParkingGroundId(UicEncoderUtils.getIA5(document.getParkingGroundId()));
+ asnData.setSpecialInformation(document.getSpecialInformation());
+
+ asnData.setPrice(document.getPrice());
+
+ if (document.getVatDetails() != null && !document.getVatDetails().isEmpty()){
+ for (IVatDetail vat : document.getVatDetails()) {
+ asnData.addVatDetail(encodeVatDetail(vat));
+ }
+ }
+
+ return asnDocument;
+ }
+
+
+ /**
+ * Encode route section.
+ *
+ * @param document the route
+ * @return the route section type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private RouteSectionType encodeRouteSection(IRouteSection document) throws EncodingFormatException {
+
+ if (document == null) return null;
+
+ RouteSectionType asnRoute = new RouteSectionType();
+
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnRoute.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+ asnRoute.setFromStationIA5(UicEncoderUtils.getIA5NonNum(document.getFromStation()));
+ asnRoute.setFromStationNum(UicEncoderUtils.getNum(document.getFromStation()));
+
+ asnRoute.setToStationIA5(UicEncoderUtils.getIA5NonNum(document.getToStation()));
+ asnRoute.setToStationNum(UicEncoderUtils.getNum(document.getToStation()));
+
+ asnRoute.setFromStationNameUTF8(document.getFromStationName());
+ asnRoute.setToStationNameUTF8(document.getToStationName());
+
+
+ return asnRoute;
+ }
+
+ /**
+ * Encode tariff collection.
+ *
+ * @param tariffs the tariffs
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfTariffType encodeTariffCollection(Collection<ITariff> tariffs) throws EncodingFormatException {
+
+ if (tariffs== null || tariffs.isEmpty()) {
+ return null;
+ }
+
+ SequenceOfTariffType tariffList = new SequenceOfTariffType();
+
+ for (ITariff tariff :tariffs){
+
+ TariffType asnTariff = encodeTariff(tariff);
+
+ if (asnTariff != null) {
+ tariffList.add(asnTariff);
+ }
+ }
+
+ if (tariffList.isEmpty()) {
+ return null;
+ }
+
+ return tariffList;
+ }
+
+ /**
+ * Encode tariff.
+ *
+ * @param tariff the tariff
+ * @return the tariff type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private TariffType encodeTariff(ITariff tariff) throws EncodingFormatException {
+
+ if (tariff == null ) {
+ return null;
+ }
+
+ TariffType asnTariff = new TariffType();
+
+ asnTariff.setAgeAbove(UicEncoderUtils.getRestrictedInt(tariff.getAgeAbove(),2,120));
+ asnTariff.setAgeBelow(UicEncoderUtils.getRestrictedInt(tariff.getAgeBelow(),1,40));
+
+ asnTariff.setNumberOfPassengers(UicEncoderUtils.getRestrictedIntWithDefault(tariff.getNumberOfPassengers(),1,200,1));
+
+
+ try {
+ if (tariff.getPassengerType() != null) {
+ asnTariff.setPassengerType(PassengerType.valueOf(tariff.getPassengerType().name()));
+ }
+ } catch (Exception e){
+ //no value found
+ }
+
+
+ asnTariff.setReductionCard(encodeCardReferences(tariff.getReductionCards()));
+ asnTariff.setRestrictedToCountryOfResidence(tariff.isRestrictedToCountryOfResidence());
+ asnTariff.setRestrictedToRouteSection(encodeRouteSection(tariff.getRestrictedToRouteSection()));
+
+ if (tariff.getSeriesDataDetails()!= null) {
+ asnTariff.setSeriesDataDetails(encodeSeriesDataDetails(tariff.getSeriesDataDetails()));
+ }
+
+
+ asnTariff.setTariffDesc(tariff.getTariffDescription());
+ asnTariff.setTariffIdIA5(UicEncoderUtils.getIA5NonNum(tariff.getTariffId()));
+ asnTariff.setTariffIdNum(UicEncoderUtils.getNum(tariff.getTariffId()));
+
+ asnTariff.setTraverlerid(SequenceOfTravelerId.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(tariff.getTravelerIds(), 1, 254)));
+
+ return asnTariff;
+ }
+
+ private SeriesDetailType encodeSeriesDataDetails( ISeriesDataDetails seriesDataDetails) throws EncodingFormatException {
+ SeriesDetailType details = new SeriesDetailType();
+ details.setSeries(UicEncoderUtils.getRestrictedInt(seriesDataDetails.getSeries(), 1, 99999));
+ details.setSupplyingCarrier(UicEncoderUtils.getRestrictedInt(seriesDataDetails.getSupplyingCarrier(), 1, 9999));
+ details.setOfferIdentification(UicEncoderUtils.getRestrictedInt(seriesDataDetails.getOfferIdentification(), 1, 99));
+ return null;
+ }
+
+ /**
+ * Convert voucher.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertVoucher(IVoucher document, Date issuingDate) throws EncodingFormatException {
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+
+ VoucherData asnData = new VoucherData();
+ asnDocument.getTicket().setVoucher(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+ asnData.setReferenceNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getReference())));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setInfoText(document.getInfoText());
+
+ asnData.setValidity(document.getValidFrom(), document.getValidUntil());
+
+ asnData.setType(UicEncoderUtils.getRestrictedInt(document.getType(), 1,9999));
+
+ asnData.setValue(UicEncoderUtils.getRestrictedInt(document.getAmount(),1,9999999));
+
+ return asnDocument;
+ }
+
+ /**
+ * Convert pass.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertPass(IPass document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ PassData asnData = new PassData();
+ asnDocument.getTicket().setPass(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+ asnData.setReferenceNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getReference())));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setInfoText(document.getInfoText());
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ asnData.setIncludedCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getIncludedCarriers())));
+ asnData.setIncludedCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getIncludedCarriers()));
+
+ asnData.setExcludedCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getExcludedCarriers())));
+ asnData.setExcludedCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getExcludedCarriers()));
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+ if (document.getActivatedDays() != null && !document.getActivatedDays().isEmpty()) {
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
+ }
+ if (document.getClassCode() != null) {
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+ if (document.getCountries() != null && document.getCountries().size() > 0){
+ asnData.setCountries(SequenceOfCountries.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getCountries(),1,250)));
+ }
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,32000)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,32000)));
+
+ asnData.setNumberOfDaysOfTravel(UicEncoderUtils.getRestrictedInt(document.getNumberOfDaysOfTravel(), 1, 93));
+ asnData.setNumberOfPossibleTrips(UicEncoderUtils.getRestrictedInt(document.getNumberOfPossibleTrips(), 1, 30));
+ asnData.setNumberOfValidityDays(UicEncoderUtils.getRestrictedInt(document.getNumberOfValidityDays(), 1, 370));
+ asnData.setPassDescription(document.getPassDescription());
+ if (document.getPassType() > 0 ){
+ asnData.setPassType(new Long(document.getPassType()));
+ }
+
+ asnData.setTariffs(encodeTariffCollection(document.getTariffs()));
+
+
+
+ if(document.getValidRegionList()!= null && document.getValidRegionList().size() > 0) {
+ asnData.setValidRegion(encodeRegionCollection(document.getValidRegionList(), issuingDate));
+ }
+
+ if (document.getValidityDetails() != null) {
+ asnData.setValidityPeriodDetails(encodeValidityDetails(document.getValidityDetails(), issuingDate));
+ }
+
+
+
+ asnData.setPrice(document.getPrice());
+
+ if (document.getVatDetails() != null && !document.getVatDetails().isEmpty()){
+ for (IVatDetail vat : document.getVatDetails()) {
+ asnData.addVatDetail(encodeVatDetail(vat));
+ }
+ }
+
+ if (document.getTrainValidity() != null) {
+ asnData.setTrainValidity(convert(document.getTrainValidity(), issuingDate));
+ }
+
+ return asnDocument;
+ }
+
+
+ private TrainValidityType convert(ITrainValidity document, Date issuingDate) throws EncodingFormatException {
+
+ TrainValidityType asnData = new TrainValidityType();
+
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+ asnData.setIncludedCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getIncludedCarriers())));
+ asnData.setIncludedCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getIncludedCarriers()));
+
+ asnData.setExcludedCarriersNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getExcludedCarriers())));
+ asnData.setExcludedCarriersIA5(UicEncoderUtils.getIA5NonNumList(document.getExcludedCarriers()));
+
+ asnData.setExcludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getExcludedServiceBrands(),1,32000)));
+ asnData.setIncludedServiceBrands(SequenceOfServiceBrands.getSequence(UicEncoderUtils.encodeRestrictedIntegerCollection(document.getIncludedServiceBrands(),1,32000)));
+
+ asnData.setValidityDates(document.getFromDate(), document.getUntilDate(), issuingDate);
+
+ if (document.getBoardingOrArrival() != null) {
+ asnData.setBordingOrArrival(BoardingOrArrivalType.valueOf(document.getBoardingOrArrival().name()));
+ }
+
+ return asnData;
+ }
+
+
+ private ValidityPeriodDetailType encodeValidityDetails( IValidityDetails validityDetails, Date referenceDate) throws EncodingFormatException {
+
+ if ( (validityDetails.getTimeRanges() == null || validityDetails.getTimeRanges().isEmpty())
+ ||
+ (validityDetails.getValidityRanges() == null || validityDetails.getValidityRanges().isEmpty()) ) {
+ return null;
+ }
+
+
+ ValidityPeriodDetailType asnData = new ValidityPeriodDetailType();
+
+ if (validityDetails.getTimeRanges() != null) {
+ for (ITimeRange range : validityDetails.getTimeRanges()) {
+
+ if (range.getFromTime() == range.getUntilTime()){
+ break;
+ }
+
+ TimeRangeType asnRange = new TimeRangeType();
+ asnRange.setFromTime(new Long(range.getFromTime()));
+ asnRange.setUntilTime(new Long(range.getUntilTime()));
+
+ asnData.getExcludedTimeRange().add(asnRange);
+ }
+ }
+
+ if (validityDetails.getValidityRanges() != null) {
+ for (IValidityRange range : validityDetails.getValidityRanges()) {
+
+ ValidityPeriodType asnRange = new ValidityPeriodType();
+
+ asnRange.setValidityDates(range.getFromDate(), range.getUntilDate(), referenceDate);
+
+ if (range.getValidFromUTCoffset() != null) {
+ asnRange.setValidFromUTCOffset(range.getValidFromUTCoffset());
+ if (range.getValidUntilUTCoffset() != null && range.getValidUntilUTCoffset() != range.getValidFromUTCoffset()){
+ asnRange.setValidUntilUTCOffset(range.getValidUntilUTCoffset());
+ }
+ }
+
+
+ asnData.getValidityPeriod().add(asnRange);
+ }
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Convert fip ticket.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertFipTicket(IFipTicket document, Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+
+ FIPTicketData asnData = new FIPTicketData();
+ asnDocument.getTicket().setFipTicket(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+ asnData.setReferenceNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getReference())));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ asnData.setCarrierNum(SequenceOfCarrierNum.getSequence(UicEncoderUtils.getNumList(document.getCarriers())));
+ asnData.setCarrierIA5(UicEncoderUtils.getIA5NonNumList(document.getCarriers()));
+
+ if (document.getClassCode() != null) {
+ asnData.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+ if (!document.isIncludesSupplements()){
+ asnData.setIncludesSupplements(false);
+ }
+ asnData.setNumberOfTravelDays(UicEncoderUtils.getRestrictedInt(document.getNumberOfTravelDates(), 1, 8));
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getActivatedDays() != null && !document.getActivatedDays().isEmpty()) {
+ asnData.addActivatedDays(DateTimeUtils.getActivatedDays(document.getValidFrom(), document.getActivatedDays()));
+ }
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ return asnDocument;
+ }
+
+ /**
+ * Convert station passage.
+ *
+ * @param document the document
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData convertStationPassage(IStationPassage document,Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ StationPassageData asnData = new StationPassageData();
+ asnDocument.getTicket().setStationPassage(asnData);
+
+ asnData.setProductOwnerNum(UicEncoderUtils.getNum(document.getProductOwner()));
+ asnData.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(document.getProductOwner()));
+
+ asnData.setProductIdNum(UicEncoderUtils.getNum(document.getProductId()));
+ asnData.setProductIdIA5(UicEncoderUtils.getIA5NonNum(document.getProductId()));
+
+ asnData.setReferenceNum(Asn1BigInteger.toAsn1(UicEncoderUtils.getNum(document.getReference())));
+ asnData.setReferenceIA5(UicEncoderUtils.getIA5NonNum(document.getReference()));
+
+ if (document.getNumberOfdaysAllowed() > 0) {
+ asnData.setNumberOfDaysValid(new Long(document.getNumberOfdaysAllowed()));
+ }
+
+ asnData.setProductName(document.getProductName());
+
+ if (document.getStationCodeTable() != IStationCodeTable.stationUIC && document.getStationCodeTable() != null){
+ asnData.setStationCodeTable(CodeTableType.valueOf(document.getStationCodeTable().name()));
+ }
+
+
+ if (document.getStations()!= null && !document.getStations().isEmpty()){
+ SequenceOfStringIA5 stationsIA5 = new SequenceOfStringIA5();
+ SequenceOfUnrestrictedLong stationsNum = new SequenceOfUnrestrictedLong();
+
+ for (String station : document.getStations()) {
+ String ia5 = UicEncoderUtils.getIA5NonNum(station);
+ Long num = UicEncoderUtils.getNum(station);
+ if (ia5 != null && ia5.length() > 0) {
+ stationsIA5.add(ia5);
+ }
+ if (num != null && num > 0){
+ stationsNum.add(num);
+ }
+ }
+ if (!stationsIA5.isEmpty()){
+ asnData.setStationIA5(stationsIA5);
+ }
+ if (!stationsNum.isEmpty()){
+ asnData.setStationNum(stationsNum);
+ }
+ }
+
+ if (document.getStationNames()!= null && !document.getStationNames().isEmpty()) {
+
+ SequenceOfStringUTF8 asnList = new SequenceOfStringUTF8();
+ for ( String text :document.getStationNames()){
+ if (text.length() > 0) {
+ asnList.add(text);
+ }
+ }
+
+ if (!asnList.isEmpty()) {
+ asnData.setStationNameUTF8(asnList);
+ }
+
+ }
+
+ asnData.setValidityDates(document.getValidFrom(), document.getValidUntil(), issuingDate);
+
+ if (document.getValidFromUTCoffset() != null) {
+ asnData.setValidFromUTCOffset(document.getValidFromUTCoffset());
+ if (document.getValidUntilUTCoffset() != null && document.getValidUntilUTCoffset() != document.getValidFromUTCoffset()){
+ asnData.setValidUntilUTCOffset(document.getValidUntilUTCoffset());
+ }
+ }
+
+
+ asnData.setExtension(encodeExtension(document.getExtension()));
+
+ asnData.setAreaCodeNum(SequenceOfUnrestrictedLong.getSequence(UicEncoderUtils.getNumList(document.getAreaCodes())));
+ asnData.setAreaCodeIA5(UicEncoderUtils.getIA5NonNumList(document.getAreaCodes()));
+
+ asnData.setAreaNameUTF8(UicEncoderUtils.encodeStringCollection(document.getAreaNames()));
+
+ return asnDocument;
+ }
+
+
+ /**
+ * Encode control details.
+ *
+ * @param data the data
+ * @param issuingDate the issuing date
+ * @return the control data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private ControlData encodeControlDetails(IControlDetail data, Date issuingDate) throws EncodingFormatException {
+
+ if (data == null) return null;
+
+ ControlData asnData = new ControlData();
+
+ asnData.setExtension(encodeExtension(data.getExtension()));
+
+ if (data.isAgeCheckRequired()) {
+ asnData.setAgeCheckRequired(true);
+ } else {
+ asnData.setAgeCheckRequired(false);
+ }
+
+ if (data.isIdentificationByIdCard()){
+ asnData.setIdentificationByIdCard(true);
+ } else {
+ asnData.setIdentificationByIdCard(false);
+ }
+
+ if (data.isIdentificationByPassportId()){
+ asnData.setIdentificationByPassportId(true);
+ } else {
+ asnData.setIdentificationByPassportId(false);
+ }
+
+ if (data.isOnlineValidationRequired()){
+ asnData.setOnlineValidationRequired(true);
+ } else {
+ asnData.setOnlineValidationRequired(false);
+ }
+
+ if (data.isPassportValidationRequired()){
+ asnData.setPassportValidationRequired(true);
+ } else {
+ asnData.setPassportValidationRequired(false);
+ }
+
+ if (data.isReductionCardCheckRequired()){
+ asnData.setReductionCardCheckRequired(true);
+ } else {
+ asnData.setReductionCardCheckRequired(false);
+ }
+
+ asnData.setInfoText(data.getInfoText());
+
+ asnData.setRandomDetailedValidationRequired(UicEncoderUtils.getRestrictedInt(data.getRandomDetailedValidationRequired(), 0,99));
+
+ asnData.setIdentificationItem(UicEncoderUtils.getUnRestrictedInt(data.getIdentificationItem()));
+
+ asnData.setIncludedTickets(encodeTicketLickList(data.getLinkedTickets()));
+
+ asnData.setIdentificationByCardReference(encodeCardReferences(data.getIdentificationByCardReference()));
+
+ return asnData;
+ }
+
+
+
+ /**
+ * Encode card references.
+ *
+ * @param cardReferences the card references
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfCardReferenceType encodeCardReferences(Collection<ICardReference> cardReferences) throws EncodingFormatException {
+
+ if (cardReferences == null || cardReferences.isEmpty()) return null;
+
+ SequenceOfCardReferenceType asnList = new SequenceOfCardReferenceType();
+
+ for (ICardReference card : cardReferences){
+
+ CardReferenceType asnCard = new CardReferenceType();
+
+ if (card.getCardId() != null && card.getCardId().length() > 0){
+ //only longs allowed
+ try {
+ long num = Long.parseLong(card.getCardId());
+ asnCard.setCardIdNum(num);
+ } catch (Exception e ){
+ asnCard.setCardIdIA5(card.getCardId());
+ }
+ }
+
+
+ asnCard.setCardIssuerNum(UicEncoderUtils.getNum(card.getCardIssuer()));
+ asnCard.setCardIssuerIA5(UicEncoderUtils.getIA5NonNum(card.getCardIssuer()));
+ asnCard.setCardName(card.getCardName());
+ asnCard.setCardType(UicEncoderUtils.getUnRestrictedInt(card.getCardType()));
+
+ asnCard.setLeadingCardIdNum(UicEncoderUtils.getNum(card.getLeadingCardId()));
+ asnCard.setLeadingCardIdIA5(UicEncoderUtils.getIA5NonNum(card.getLeadingCardId()));
+
+ asnCard.setTrailingCardIdNum(UicEncoderUtils.getNum(card.getTrailingCardId()));
+ asnCard.setTrailingCardIdIA5(UicEncoderUtils.getIA5NonNum(card.getTrailingCardId()));
+
+ asnList.add(asnCard);
+
+ }
+
+
+ if (asnList.isEmpty()) return null;
+
+ return asnList;
+ }
+
+ /**
+ * Encode ticket lick list.
+ *
+ * @param linkedTickets the linked tickets
+ * @return the list
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private SequenceOfTicketLinkType encodeTicketLickList(Collection<ITicketLink> linkedTickets) throws EncodingFormatException {
+
+ if (linkedTickets == null || linkedTickets.isEmpty()) return null;
+
+ SequenceOfTicketLinkType asnList = new SequenceOfTicketLinkType();
+
+ for (ITicketLink ticket : linkedTickets){
+
+ TicketLinkType asnTicket = new TicketLinkType();
+
+ asnTicket.setIssuerName(ticket.getIssuer());
+
+ asnTicket.setIssuerPNR(ticket.getIssuerPNR());
+
+ asnTicket.setProductOwnerNum(UicEncoderUtils.getNum(ticket.getProductOwner()));
+ asnTicket.setProductOwnerIA5(UicEncoderUtils.getIA5NonNum(ticket.getProductOwner()));
+
+ asnTicket.setReferenceNum(UicEncoderUtils.getNum(ticket.getReference()));
+ asnTicket.setReferenceIA5(UicEncoderUtils.getIA5NonNum(ticket.getReference()));
+
+ if (ticket.getTicketType() != ITicketType.openTicket && ticket.getTicketType() != null){
+ asnTicket.setTicketType(TicketType.valueOf(ticket.getTicketType().name()));
+ }
+
+ if (ticket.getLinkMode() != ILinkMode.issuedTogether && ticket.getLinkMode() != null){
+ asnTicket.setLinkMode(LinkMode.valueOf(ticket.getLinkMode().name()));
+ }
+
+ asnList.add(asnTicket);
+ }
+
+ if (asnList.isEmpty()) return null;
+
+ return asnList;
+ }
+
+ /**
+ * Encode travelers.
+ *
+ * @param data the data
+ * @param issuingDate the issuing date
+ * @return the traveler data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private TravelerData encodeTravelers(ITravelerDetail data,Date issuingDate) throws EncodingFormatException {
+
+ if (data == null) return null;
+
+ TravelerData asnData = new TravelerData();
+
+ asnData.setGroupName(data.getGroupName());
+
+ asnData.setPreferedLanguage(data.getPreferredLanguage());
+
+ if (data.getTravelers()!=null && !data.getTravelers().isEmpty()) {
+
+ SequenceOfTravelerType asnTravelers = new SequenceOfTravelerType();
+
+ for (ITraveler traveler : data.getTravelers()){
+
+ TravelerType asnTraveler = encodeTraveler(traveler);
+
+ if (asnTraveler !=null){
+ asnTravelers.add(asnTraveler);
+ }
+ }
+
+ if (!asnTravelers.isEmpty()) {
+ asnData.setTraveler(asnTravelers);
+ }
+
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Encode issuing details.
+ *
+ * @param data the data
+ * @return the issuing data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private IssuingData encodeIssuingDetails(IIssuingDetail data) throws EncodingFormatException {
+
+ if (data == null){
+ throw new EncodingFormatException("Issuind data missing");
+ }
+
+ IssuingData asnData = new IssuingData();
+
+ if (!data.isActivated()){
+ asnData.setActivated(false);
+ } else {
+ asnData.setActivated(true);
+ }
+
+ if (!data.isSecurePaperTicket()) {
+ asnData.setSecurePaperTicket(false);
+ } else {
+ asnData.setSecurePaperTicket(true);
+ }
+
+ asnData.setExtension(encodeExtension(data.getExtension()));
+
+
+ asnData.setIssuedOnLine(UicEncoderUtils.getRestrictedInt(data.getIssuedOnLine(), 1, 99999));
+
+ asnData.setIssuedOnTrainNum(UicEncoderUtils.getNum(data.getIssuedOnTrain()));
+ asnData.setIssuedOnTrainIA5(UicEncoderUtils.getIA5NonNum(data.getIssuedOnTrain()));
+
+
+ asnData.setSecurityProviderNum(UicEncoderUtils.getNum(data.getSecurityProvider()));
+
+
+ if (data.getIssuer()!= null && !data.getIssuer().equals(data.getSecurityProvider()) ){
+ asnData.setIssuerNum(UicEncoderUtils.getNum(data.getIssuer()));
+ asnData.setIssuerIA5(UicEncoderUtils.getIA5NonNum(data.getIssuer()));
+ }
+
+ asnData.setIssuerName(data.getIssuerName());
+ asnData.setIssuerPNR(UicEncoderUtils.getIA5(data.getIssuerPNR()));
+
+
+ asnData.setIssuingDate(data.getIssuingDate());
+
+ if (data.isSpecimen()){
+ asnData.setSpecimen(true);
+ } else {
+ asnData.setSpecimen(false);
+ }
+
+ if (data.getPointOfSale()!= null){
+ asnData.setPointOfSale(encodeGeoCoordinate(data.getPointOfSale()));
+ }
+
+ return asnData;
+ }
+
+ /**
+ * Encode geo coordinate.
+ *
+ * @param point the point
+ * @return the geo coordinate type
+ */
+ private GeoCoordinateType encodeGeoCoordinate(IGeoCoordinate point) {
+
+ if (point == null) return null;
+
+ GeoCoordinateType asnPoint = new GeoCoordinateType();
+
+ asnPoint.setLatitude(point.getLatitude());
+ asnPoint.setLongitude(point.getLongitude());
+
+ if (point.getUnit() != IGeoUnitType.milliDegree && point.getUnit() != null){
+ asnPoint.setGeoUnit(GeoUnitType.valueOf(point.getUnit().name()));
+ }
+
+ if (point.getAccuracy() != null) {
+ asnPoint.setAccuracy(GeoUnitType.valueOf(point.getAccuracy().name()));
+ }
+
+ if (point.getHemisphereLatitude() != IHemisphereLatitudeType.east && point.getHemisphereLatitude() != null) {
+ asnPoint.setHemisphereLatitude(HemisphereLatitudeType.valueOf(point.getHemisphereLatitude().name()));
+ }
+
+ if (point.getHemisphereLongitude() != IHemisphereLongitudeType.north && point.getHemisphereLongitude() != null) {
+ asnPoint.setHemisphereLongitude(HemisphereLongitudeType.valueOf(point.getHemisphereLongitude().name()));
+ }
+
+ if (point.getSystem() != IGeoCoordinateSystemType.wgs84 && point.getSystem() != null){
+ asnPoint.setCoordinateSystem(GeoCoordinateSystemType.valueOf(point.getSystem().name()));
+ }
+
+
+ return asnPoint;
+ }
+
+ /**
+ * Encode customer card.
+ *
+ * @param document the customer card
+ * @param issuingDate the issuing date
+ * @return the document data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private DocumentData encodeCustomerCard(ICustomerCard document,Date issuingDate) throws EncodingFormatException {
+
+ DocumentData asnDocument = new DocumentData();
+ TicketDetailData asnTicket = new TicketDetailData();
+ asnDocument.setTicket(asnTicket);
+
+ CustomerCardData asnCustomerCard = new CustomerCardData();
+ asnDocument.getTicket().setCustomerCard(asnCustomerCard);
+
+
+ if (document.getCardId() != null && document.getCardId().length() > 0){
+ //only longs allowed
+ try {
+ long num = Long.parseLong(document.getCardId());
+ asnCustomerCard.setCardIdNum(num);
+ } catch (Exception e ){
+ asnCustomerCard.setCardIdIA5(document.getCardId());
+ }
+ }
+
+
+ asnCustomerCard.setCardType(UicEncoderUtils.getRestrictedInt(document.getCardType(),1,1000));
+
+ asnCustomerCard.setCardTypeDescr(document.getCardTypeDescr());
+
+ if (document.getClassCode() != null) {
+ asnCustomerCard.setClassCode(TravelClassType.valueOf(document.getClassCode().name()));
+ }
+
+ if (document.getCustomer()!=null){
+ asnCustomerCard.setCustomer(encodeTraveler(document.getCustomer()));
+ }
+
+ asnCustomerCard.setCustomerStatus(UicEncoderUtils.getUnRestrictedInt(document.getCustomerStatus()));
+
+ asnCustomerCard.setCustomerStatusDescr(document.getCustomerStatusDescr());
+
+ asnCustomerCard.setExtension(encodeExtension(document.getExtension()));
+
+ asnCustomerCard.setIncludedServices(SequenceOfUnrestrictedLong.getSequence(UicEncoderUtils.getUnRestrictedIntList(document.getIncludedServices())));
+
+ asnCustomerCard.setValidity(document.getValidFrom(), document.getValidUntil());
+
+ return asnDocument;
+ }
+
+ private TokenType encodeToken(IToken token) throws EncodingFormatException {
+ TokenType asnToken = new TokenType();
+ asnToken.setToken(token.getToken());
+ asnToken.setTokenProviderNum(UicEncoderUtils.getNum(token.getTokenProvider()));
+ asnToken.setTokenProviderIA5(UicEncoderUtils.getIA5NonNum(token.getTokenProvider()));
+ asnToken.setTokenSpecification(token.getTokenSpecification());
+ return asnToken;
+ }
+
+
+
+
+ private VatDetailType encodeVatDetail(IVatDetail vatDetail) {
+
+ if (vatDetail == null) return null;
+
+ VatDetailType asnVatDetail = new VatDetailType();
+
+ asnVatDetail.setAmount(vatDetail.getAmount());
+ asnVatDetail.setCountry(new Long(vatDetail.getCountry()));
+ asnVatDetail.setPercentage(new Long(vatDetail.getPercentage()));
+ asnVatDetail.setVatId(vatDetail.getVatId());
+
+ return asnVatDetail;
+
+ }
+
+ /**
+ * Encode traveler.
+ *
+ * @param traveler the traveler
+ * @return the traveler type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private TravelerType encodeTraveler(ITraveler traveler) throws EncodingFormatException {
+
+ if (traveler == null) return null;
+
+ TravelerType asnTraveler = new TravelerType();
+
+ asnTraveler.setCountryOfResidence(UicEncoderUtils.getRestrictedInt(traveler.getCountryOfResidence(), 1, 999));
+ asnTraveler.setCountryOfPassport(UicEncoderUtils.getRestrictedInt(traveler.getPassportCountry(), 1, 999));
+ asnTraveler.setCountryOfIdCard(UicEncoderUtils.getRestrictedInt(traveler.getIDCardCountry(), 1, 999));
+
+
+ asnTraveler.setCustomerIdNum(UicEncoderUtils.getNum(traveler.getCustomerId()));
+ asnTraveler.setCustomerIdIA5(UicEncoderUtils.getIA5NonNum(traveler.getCustomerId()));
+
+ asnTraveler.setDateOfBirth(traveler.getDateOfBirth());
+
+ asnTraveler.setFirstName(traveler.getFirstName());
+ asnTraveler.setSecondName(traveler.getSecondName());
+ asnTraveler.setLastName(traveler.getLastName());
+ if (traveler.getGender() != null) {
+ asnTraveler.setGender(GenderType.valueOf(traveler.getGender().toString()));
+ }
+ asnTraveler.setIdCard(UicEncoderUtils.getIA5(traveler.getIdCard()));
+ asnTraveler.setPassportId(UicEncoderUtils.getIA5(traveler.getPassportId()));
+ asnTraveler.setTitle(UicEncoderUtils.getIA5(traveler.getTitle()));
+
+ if (traveler.getPassengerType() != null) {
+ asnTraveler.setPassengerType(PassengerType.valueOf(traveler.getPassengerType().name()));
+ }
+
+ asnTraveler.setPassengerWithReducedMobility(traveler.isPassengerWithReducedMobility());
+ if (traveler.isTicketHolder()){
+ asnTraveler.setTicketHolder(true);
+ } else {
+ asnTraveler.setTicketHolder(false);
+ }
+
+ if (traveler.getStatusCollection()!= null && !traveler.getStatusCollection().isEmpty()){
+
+ SequenceOfCustomerStatusType asnList = new SequenceOfCustomerStatusType();
+
+ for (ICustomerStatusDescription status : traveler.getStatusCollection() ) {
+ asnList.add(mapCustomerStatusType(status));
+ }
+ if (!asnList.isEmpty()) {
+ asnTraveler.setStatus(asnList);
+ }
+ }
+
+
+ return asnTraveler;
+ }
+
+ /**
+ * Map customer status type.
+ *
+ * @param status the status
+ * @return the customer status type
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private CustomerStatusType mapCustomerStatusType(ICustomerStatusDescription status) throws EncodingFormatException {
+
+ CustomerStatusType asnStatus = new CustomerStatusType();
+
+ if (status.getStatus() > 0) {
+ asnStatus.setCustomerStatus(new Long(status.getStatus()));
+ }
+ asnStatus.setCustomerStatusDescr(status.getDescription());
+ asnStatus.setStatusProviderIA5(UicEncoderUtils.getIA5NonNum(status.getStatusProvider()));
+ asnStatus.setStatusProviderNum(UicEncoderUtils.getNum(status.getStatusProvider()));
+
+ return asnStatus;
+ }
+
+ /**
+ * Encode extension.
+ *
+ * @param extension the extension
+ * @return the extension data
+ * @throws EncodingFormatException the encoding format exception
+ */
+ private ExtensionData encodeExtension(IExtension extension) throws EncodingFormatException {
+
+ if (extension==null) return null;
+
+ if (extension.getBinarydata() == null || extension.getBinarydata().length == 0) {
+ throw new EncodingFormatException("Extension does not include data");
+ }
+
+ if (extension.getId() == null || extension.getId().length() == 0) {
+ throw new EncodingFormatException("Extension does not include id");
+ }
+
+ ExtensionData asnExtension = new ExtensionData();
+
+ asnExtension.setExtensionData(extension.getBinarydata());
+ asnExtension.setExtensionId(UicEncoderUtils.getIA5(extension.getId()));
+
+ return asnExtension;
+ }
+
+
+}