----------------------------------------------------------------------------------------------------------------------- Prowide Core - CHANGELOG ----------------------------------------------------------------------------------------------------------------------- RELEASE 9.2.12 - March 2022 * (GH-103) fixed invalid ConstraintValidator annotation on CurrencyValidator * (GH-95) patterns getters are now non-final to avoid overwriting; static constants have been deprecated * RJE and PPC readers, added a constructor with explicit charset (same in swift parser from input stream) * Validate.notNull -> Objects.requireNonNull * Spotbugs code review RELEASE 9.2.11 - January 2022 * Added LineWrapper (utils) to replace Apache's WordUtils.wrap and thus the commons-text dependency * Added convenient method in the envelop message MT798 to get the sub-message type as a SwiftMessage * Added a copy constructor to the Tag class RELEASE 9.2.10 - January 2022 * (PW-815) Fixed getValue in field 12H (SCORE) where narrative is optional * (GH-89) MT530: Fixed repetition of sequence C ADDINFO * Updated dependency: gson:2.8.8 -> gson:2.8.9 * Java 11 and 17 compatibility updates * Added plugins for automatic versioning and code quality reporting RELEASE 9.2.9 - December 2021 * (GH-78) Fixed MT537#getSequenceBList where sequence B delimiter "STAT" overlaps with C3 and D1a1B1a delimiters * (GH-74) Fixed parser for Field48 and similar cases to avoid trimming content when the component contains also the slash separator as part of the value * (GH-62) Added com.prowidesoftware.core as automatic module name in the MANIFEST for JPMS support * Fields getComponentLabel is now public, returning the specific label for each field component * Fixed bug in PartyIdentifierUtils.getPartyIdentifier * Fixes in field component names and optional status * Fixes in field parsing * Incompatible change in field 71N (changed from 7 Narrative lines to Code + 6 Narrative lines) * Incompatible change for field 11T to have two lines (MT new-line DATE + TIME) * Fixed Structured Narrative parsing to return an empty Narrative object with null string values RELEASE 9.2.8 - November 2021 * (PW-764) Added new variant values (RFDD, ISLFIN) * (PW-703) Block 2 parser: lenient parser to avoid duplicate error when exception on invalid Input/Output indicator * (CR-23) Enhanced getValueDisplay for fields (no decimal separator for numbers that are not amounts) RELEASE 9.2.7 - October 2021 * Field 98D, 98E and 98G: removed invalid get{Component4|Sign}AsCurrency and set{Component4|Sign}(Currency) as no currency applies to these fields * Fields 94L and 85L: separated component 2 (Legal Entity Identifier) into two (Legal Entity Identifier Code and Legal Entity Identifier Number). Kept get/setLegalEntityIdentifier for backwards compatibility * Field 94H: second component now has get{name}AsBIC and set{name}(BIC) methods * Field 56B: now inherits from OptionBPartyField (to have get/setPartyIdentifier) * Field 26C: separated component 5 into 5 (Denomination) and 6 (Form) for compatibility with Swift. Kept get/setDenominationForm for backwards compatibility * Field 26A: now has 2 components (Number 1 and Number 2) for compatibility with Swift. get/setNumber is kept for backwards compatibility * Field 23: fixed getValue and parse to properly handle missing intermediate fields * Field 14S: has 4 new compatibility methods: getRateSource/setRateSource for Source and Number components and getTimeAndLocation/setTimeAndLocation for Time and Location components * Field 12: component is now of expected to have a numeric type * Code cleanup for Fields and Date|BIC|Amount|Currency Container * Added support for BigDecimal and Long component types (instead of just Number) in several fields * Fixed display text generation for fields having a date with pattern MMDD (only the month was included in the text) * OptionAPartyField: added set/getPartyIdentifier (for components 1 and 2) and renamed BIC to IdentifierCode. Affects fields 42A, 51A, 52A, 53A, 54A, 55A, 56A, 57A, 58A, 81A, 82A, 83A, 84A, 85A, 86A, 87A, 88A, 89A, 91A and 96A * OptionDPartyField: added set/getPartyIdentifier (for components 1 and 2). Affects fields 42D, 50D, 51D, 52D, 53D, 54D, 55D, 56D, 57D, 58D, 81D, 82D, 83D, 84D, 85D, 86D, 87D, 88D, 89D, 91D and 96D * OptionBPartyField: added set/getPartyIdentifier (for components 1 and 2). Affects fields 52B, 53B, 54B, 55B, 57B, 58B, 82B, 84B, 85B, 86B, 87B and 88B * Prepared Option A, B and D classes to support the PartyIdentifier interface with methods getPartyIdentifier and setPartyIdentifier * Enhanced Block2 creation by enriching Block Type to "O" or "I". * (PW-746) Fixed MT reference extraction for 20C in categories other than 5, and with MUR as fallback option * (CR-23) Added SwiftMessage#getMOR * Updated dependency: Apache Commons Lang 3.8.1 -> 3.12.0 * Updated dependency: Apache Commons Text 1.6 -> 1.9 * Updated dependency: Gson 2.8.2 -> 2.8.8 RELEASE 9.2.6 - October 2021 * (GH-60) Enhanced parser for field 98C * (PW-703) Enhanced SwiftParser in order to validate "Input" or "Output" Block 2 type * Enhanced the MtId to automatically extract the variant from String identifiers such as "fin.103.STP" or "202.COV" RELEASE 9.2.5 - September 2021 * (PW-664) Parser enhancement to be lenient on LF before block identifier RELEASE 9.2.4 - August 2021 * MultiLineField: preserve starting component separator when getting lines with offset RELEASE 9.2.3 - August 2021 * Added user assigned country codes (example "XE") as valid codes in the IsoUtils country validation * Added field classes for SCORE messages: 11T, 12[S,R], 25G, 31[J,K,T], 34[D,K,L,M,S,T,U,X,V,W], 49[J,K,L] (to be used in the proprietary payload of the MT798 envelop) * MT564: Minor scheme fix, 92a TAXR and WITL can be repeated in CASHMOVE (E2) RELEASE 9.2.2 - July 2021 * (PW-627) fixed Narrative.builder() to compute "//" size in the lines wrapping * (PW-581) the MultiLineField API now preserves any starting and trailing spaces in field lines * MT565: fixed repetition of sequence B2 (multiple to single) * MT548: Minor scheme fix, added letter option "C" in field "98C:SCTS" in sequence "C1a1B1" RELEASE 9.2.1 - June 2021 * Added "ignore block 3" and "ignore priority" options to the SwiftMessageComparator * Added field classes for SCORE messages: 12[H,K,L], 20E, 25F, 29[D,F], 31R, 78B (to be used in the proprietary payload of the MT798 envelop) * Enhanced parser for LogicalTerminalAddress when the parameter has 9 characters * (PW-534) allowed null value for the Tag constructor RELEASE 9.2.0 - May 2021 * SWIFT Standard release update 2021 (live 21 November 2021) * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy) * Fixed the getSequence API in MT classes when the sequence boundary field is repetitive, in some scenarios produced invalid results * (PW-519) Field92H: Added "Rate Status" accessors * (PW-519) Field92J: Replaced "Narrative" accessors by "Rate Status" accessors RELEASE 9.1.4 - April 2021 * Fixed getConditionalQualifier in fields 69C, 69D and 92H * Fixed field 41D isOptional(component) method * (PW-510) Fixed parser of field 90L * (PW-508) Fixed validator pattern in field 98K * Added MultiLineField interface implementation to fields: 45C, 45L and 49Z * Removed MultiLineField interface implementation to field 77H since its value is always a single line * (PW-501) Added getNarrative(deli), getNameAndAddress(deli) and similar getters in Field classes to get a concatenation of the relevant components with a specific delimiter * (PW-501) Fixed the getNarrative(), getNameAndAddress() and similar getters in Field classes to do a simple join of the relevant components, without CRLF and without components value trim * (PW-505) Fixed SwiftFormatUtils#decimalsInAmount(BigDecimal) * NPE prevention in AbstractMT.getFields() when the parsed FIN content is invalid * Added UETRUtils to generate the GPI unique end-to-end transaction reference, mandatory for several payment messages * Added customizable strategies to set the MtSwiftMessage metadata fields: reference, main amount, value date, etc... * Added field classes for SCORE messages: 13E, 21S, 21T, 27A, 29P, 29S, 29U, 49Z (to be used in the proprietary payload of the MT798 envelop) * (PW-451) Added backward compatible implementation in setComponent* and SetNarrative* API of narrative container fields: 29A, 37N, 70, 71B, 71D, 72Z, 72, 73A, 73, 74, 75, 76, 77A, 77B, 77D, 77 * (PW-445) Added backward compatible fromJson for narrative container fields: 29A, 37N, 45B, 46B, 49M, 49N, 70, 71B, 71D, 72Z, 72, 73A, 73, 74, 75, 76, 77A, 77B, 77D, 77J, 77 * Added Direction to the SwiftBlock2Field enumeration * Added more message type cases to the SwiftMessageUtils valueDate * Minor fixes in MT530 model: fields B/22F and C/90[A,B] RELEASE 9.1.3 - December 2020 * Changed SwiftMessage#isGpi() to be true for: 103, 199, 299, 192, 196, 202COV or 205COV (mandatory outgoing GPI types) * Removed the indexes from the AbstractSwiftMessage JPA mapping (can be created directly in the DB as needed) * Added options in the MT message comparator to ignore the LT identifier or test flag when comparing header LT addresses * Added asTestBic in BIC to create a test BIC by setting the second component of the location to zero * Added API in the SwiftBlock2Output to set the MIR date and receiver date time fields from Calendar object RELEASE 9.1.2 - October 2020 * Fixed set of MUR when an MtSwiftMessage is created from an acknowledge (service 21 message) * Changed AbstractSwiftMessage JPA mapping to EAGER load the status trail and the properties * Added a new MessageDirection enum as alternative to the legacy MessageIOType RELEASE 9.1.1 - September 2020 * Fixed parser for fields 94L and 95L * Added MurMessageComparator to match ACKs based on the MUR * Changed the SwiftMessage#getMUR to retrieve field 108 from either block 3 or block 4 (system messages) * Enhanced the AckMessageComparator to still match on differences in block 2 optional fields or block 4 EOL characters * Minor refactor in MtSwiftMessage update from model (SwiftMessage) * Added a trim to the content parsed from the RJE reader * Fixed setPdm in MtSwiftMessage that was over writing the pde field * Minor changes in the MtSwiftMessage to avoid log warnings when setting metadata from message model * Added convenient field getters in the ServiceMessage21 (ACK/NAK) model class and made the getMtId() return "gpa.021" RELEASE 9.1.0 - May 2020 * SWIFT Standard release update 2020 (live 22 November 2020) * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy) * Enhanced components namings in field 98[DEGH] * Added rich API to parse and build narrative fields: 29A, 37N, 45B, 46B, 49M, 49N, 70, 71B, 71D, 72Z, 72, 73A, 73, 74, 75, 76, 77A, 77B, 77D, 77J, 77 * Mx related classes moved to the prowide-iso20022 project (open source since October 2020) RELEASE 8.0.2 - April 2019 - LTS maintenance version for current SRU (2019) * Added IBAN validation for Seychelles * Added field setters API in the SwiftBlock5 * Added SwiftBlock5Field enumeration with commonly used block 5 trailer fields * (CR #235) Added SafeXmlUtils to disallow XXE in all XML parsing code * Fixed parser for fields 70[C,D,E,G], 94E, 95V when first line second component contains slashes * Changed default root element for Mx from message to RequestPayload * Fixed month day parsing in SwiftFormatUtils for leap years * Added MxParser#containsLegacyHeader() to check weather the message uses the legacy SWIFT header or the ISO business header * Added MtSwiftMessage constructor from AbstractMT * Fixed parser to preserve trailing lines in field values, even if the lines are empty (empty trailing lines were trimmed before) * (CR #203) Enhanced parser for party fields, explicit /D/ and /C/ is parsed as mark, otherwise any content following the / is parsed as account * Fixed field 108 order and overwrite if exist logic in SwiftBlock3#generateMUR * (CR #207) Added optional parameter in SwiftWriter and FINWriterVisitor to control whether field values should be trimmed RELEASE 8.0.1 - October 2019 - LTS version for SRU2019 * Added SwiftMessageUtils#currencyAmount to retrieve the main currency and amount from a message * (CR #192) Fixed ConversionService#getFIN(SwiftMessage) to avoid altering the message parameter when removing empty blocks * Added an optional SwiftWriter#writeMessage with ignoreEmptyBlocks parameter * SwiftMessage#setUserBlocks(List) made public * Removed the trim to field values in the XML to enable consistent round trip conversion between FIN and XML * Explicit UTF-8 encoding was added where necessary to ensure portability * Added MultiLineField implementation to 45D, 49G, 49M and 49N RELEASE 8.0.0 - May 2019 * JRE requirement increased to Java 1.8 * SWIFT Standard release update 2019 (live 17 November 2019) * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy) * Added common hierarchy for option J party fields RELEASE 7.10.4 - May 2019 - LTS maintenance version for current SRU (2018) * Updated dependencies: apache-commons-lang 3.7 -> 3.8.1 * Updated dependencies: apache-text 1.3 -> 1.6 * Added copy constructors to MT header blocks * Added setDate(Calendar) to MIR object * (Issue #25) Fixed padding in PPCWriter * Added helper API SwiftTagListBlock#splitByTagName to get sub-blocks by field boundary * Fixed IOB exception in SwiftBlock2Output#setMIR in lenient mode * SwiftParser#tagStarts changed to protected to allow overwriting in custom parsers for non-compliant messages * Moved getMessageType from MtSwiftMessage to parent class AbstractSwiftMessage * Added getVariant and getMtId to MtSwiftMessage; added getMxId to MxSwiftMessage * Added setMUR in SwiftMessage * Added helper method in SwiftWriter to ensure break lines of any String has CRLF * Added setSignature and getSignature to SwiftMessage and AbstractMT to set and retrieve MDG tag in S block (LAU computation available in Prowide Integrator) * Added propertyValue to AbstractSwiftMessage to check if a property is set with a given value * Changed IsoUtils implementation to use Currency.getAvailableCurrencies() in the initialization * Deprecated AckSystemMessage in favor of ServiceMessage21 * Fixed negative index bug in AbstractSwiftMessage#getPreviousStatusInfo when message has less than two statuses in the trail * Fixed getLines API in Fields that in some cases was trimming the first line starting slash from the result * Fixed eventual NPE produced in MxSwiftMessage#updateFromMessage() when creating MxSwiftMessage from XML document * Fixed column length for "variant" in MxSwiftMessage persistence mapping * Added a fields() method in SwiftTagListBlock to get all block Tag objects as Field objects * Added API to field 50F and 59F to get structured content for the line numbers RELEASE 7.10.3 - October 2018 - LTS version for SRU2018 * License changed from LGPL to the more permissive Apache License 2.0 * Fixed serialization of field 48 * Completed SwiftMessageUtils#currencyAmount for missing MTs * Fixed NPE in SwiftBlock4.removeEmptySequences with fields 15A as sequence boundary * (Issue #15) MxParser.java typo analiseMessage -> analyseMessage * Added getFields() to MT classes * Added bean validation annotations for BIC, IBAN, ISO country and currency * Enhanced the BIC internal model to allow accessor for all subfields * Enhanced the BIC validation with enum to report the specific validation problem found * Changed the default SwiftParser behavior to lenient, meaning by default it will not throw any IllegalArgumentException when headers size is invalid * Fixed FIN writer to preserve trailing spaces in tag value * Added JPA annotations to the SWIFT model intended for persistence (AbstractSwiftMessage and subclasses) * Removed the old Hibernate XML mapping AbstractSwiftMessage.hbm.xml (in favor of generic JPA annotations in model) * Added SwiftTagListBlock#removeSubBlocks to remove all instances of a given subblock * (Issue #13) Fixed SwifttagListBlock#removeSubBlock * Added JsonSerializable interface to all model classes implementing toJson() * Added toJson and fromJson to MT and Field classes * Added toJson and fromJson to the MtSwiftMessage and MxSwiftMessage model * Added field 434 in SwiftBlock3Builder RELEASE 7.10.2 - May 2018 * Revamped the JSON API implementation using Gson, added missing fromJson methods RELEASE 7.10.1 - April 2018 * FIN writer: reverted the trim in tag values introduced in 7.8.9 RELEASE 7.10.0 - April 2018 * SWIFT Standard release update 2018 * JRE requirement increased to Java 1.7 * Dependencies: updated apache commons-lang from 2.6 to 3.7 * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy) * Added API in SwiftMessage for the SWIFT gpi service: getters and setters for the service type identifier and UETR * Added an automatically generated UETR when creating new MT instances for 103, 103 STP, 103 REMIT, 202, 202 COV, 205, or 205 COV * Added API in SwiftMessage to set the variant (STP, REMIT, COV) * New helper API for block 3 (SwiftBlock3Builder) to ensure only expected fields are added and in proper order RELEASE 7.9.7 - April 2018 - LTS maintenance version for current SRU (2017) * Dependencies: added gson 2.8.2 * Added full IBAN validation including control digits and custom account numbers per country * Added SwiftCharset and SwiftCharsetUtils helper API to validate SWIFT related charsets. * Added SwiftTagListBlock#getFieldByQualifiers(name, qualifier, conditionalQualifier) to gather generic fields based on qualifiers content * Added addTag(index, tag) and setTag(index, tag) in SwiftTagListBlock to insert new field in specific positions * Added Field#is(String ...) to test component 1 of fields against a list of possible values * Added non-ISO country code XK (Kosovo) to IsoUtils * Added API in IsoUtils to add custom codes for countries and currencies * Added read-only properties in AbstractSwiftMessage for the message creation year, month and day of moth * Added support for custom split char in RJE reader/writer * Fixed missing repetitive 35B in MT549 * Build migrated to Gradle RELEASE 7.9.6 - December 2017 * Fixed conversion to XML with compressed parameter true in ConversionService RELEASE 7.9.5 - December 2017 * Fixed getValueDisplay in field 50F to strip the starting slash in the account number * Added getLabelForLineNumber(String subfieldNumber) in Field50F to return the labels for the structured line identifiers * Enhanced getComponentLabel(final int number) in Field50F to return proper dynamic labels based on line number identifiers * Added getCorrespondentBIC to SwiftMessage and AbstractSwiftMessage * Expanded sender/receiver in MtSwiftMessage and MxSwiftMessage from BIC8 to BIC11 in order to keep branch information in those cached attributes * Added checksumBody to AbstractSwiftMessage for proprietary checksum calculated on the body only, as a complement to the existing checksum on the whole message * Fixed AbstractSwiftMessage#copyTo(msg) implementation to perform hard copy of list objects (similar to a copy constructor implementation) * Expanded precision in getValueDisplay for all numeric fields to preserve the decimal digits present in the original value * Implemented SwiftMessage#getUUID and added getUID(Calendar, Long) * Implemented SwiftMessageUtils#calculateChecksum as MD5 hash on whole FIN message content and added new checksum for the text block only RELEASE 7.9.4 - November 2017 * Internal code maintenance release RELEASE 7.9.3 - October 2017 - LTS version for SRU2017 * JRE requirement increased to Java 1.6 * Added API in BIC to return the distinguished name (DN) for a BIC * Added equalsIgnoreCR in Tag to compare values regardless of carriage return character being present or not in new lines * Fixed MxParser#parseBusinessApplicationHeaderV01 (it was setting the FinInstnId/Nm as BIC) * Removed invalid component in field 86J * Fixed order of components in fields 98J and 98K * Completed the component labels for all fields * Changed field 22C structure into individual components for the function * Enhanced fields parse/serialization to preserve any whitespace in a component RELEASE 7.9.2 - August 2017 * Fixed FINWriterVisitor to prevent printing 'null' tag values * Deprecated custom resource properties for currency and country codes, in favor of Java nativa API in Currency and Locale * Removed package-info.class from target jar to avoid class modifier issue in Java8 runtime * Fixed serialization of field 50F to allow the first line without a starting forward slash RELEASE 7.9.1 - June 2017 * (Issue #5) Enhanced performance in SwiftParser * Removed sequence API for inner loops (non sequence) in MTs 306, 320, 340, 360, 361, 362, 410, 412, 420, 422, 450, 456 RELEASE 7.9 - May 2017 * SWIFT Standard release update 2017 (live 19 November 2017 for MT and 18 November for MX) * (Issue #2) maven build issues * (Issue #3) Field61 component 5 treated as amount * (Issue #4) Field72 structure fixed to allow 6 components at most * Field99A implements AmountContainer * Field95L implements BICContainer RELEASE 7.8.9 - May 2017 - LTS maintenance version for current SRU (2016) * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy) * Added convenient isType(int) to SwiftMessage * Fixed amounts() in AmountContainer fields RELEASE 7.8.8 - March 2017 * Added hashcode and equals to MxId * Added MUR generation in block 3 * Added a multi-purpose SwiftMessageComparator for MT, as an abstraction of the existing AckMessageComparator * Added helper API to remove empty sequences in block 4 * Added ACK/NAK identifier constants and API in AbstractSwiftMessage * Added getDateAsCalendar in MIR/MOR * Added MtCategory enum for MT message categories and convenient category API in SwiftMessage * Added support for system and service messages in metadata gathered from SwiftMesasge in MtSwiftMessage * Added isServiceMessage in SwiftMessage * Added static factory method parse to SwiftMessage * Added new fields in AbstractSwiftMessage to hold main currency and amount, automatically set for most MTs from fields 32a, 33a, 34a, 19a and 62a * Added conversion to and from LT address in SwiftFormatUtils * (CR #10) Added comprehensive implementation of MT and Field classes for system messages (category 0) * Added custom name for internal loop sequences in MTs 110, 360, 361, 604, 605, 609, 824, 920, 935, 940, 942, 971 and 973 * Added more options to retrieve information from the status trail in AbstractSwiftMessage * Reduced visibility from public to protected for MTs inner sequence classes mutable fields; START, END, TAIL. * Fixed analyze and strip API in MxParser to support nested Document elements * Fixed MT500 removed invalid fields after GENL linkage sequence * Fixed AckMessageComparator to cover all fields in block 2 input and output * Fixed getSender and getReceiver for service messages in SwiftMessage * Fixed MT600, removed invalid fields 26F, 34G, 31C in sequence A * Fixed parse for DATE1 (MMDD) to handle properly leap years * Fixed RJEWriter to avoid writing the split character '$' and the end of the file, afterwards the last message * Expanded helper API in AckSystemMessage * TagListBlock tags field made private instead of package protected * Enabled mutability of LogicalTerminalAddress objects, allowing setting the branch from superclass BIC * Enhanced parser for fields 11R, 11S and 37H (NPE prevention) * Removed invalid generated code for internal loops (non-sequence) in MTs: 110, 201, 360, 361, 559, 604, 605, 609, 824, 920, 935, 940, 942, 971, 973 * Enhanced from() and to() methods in BusinessHeader to catch more options RELEASE 7.8.7 - December 2016 * Fixed getMessageType in MT103_STP, MT102_STP, MT103_REMIT, MT202COV and MT205COV to return the number without the validation flag (as expected per javadoc definition) * MT518 fixed fieldset for Field 70 * MT330 fixed qualifier in Field 22 * MT513 and MT514 Field 11 moved outside previous fieldset * MT541 to MT547 Field 90[A,B] changed to fieldset. * MT564 fixed fieldset items in Field93[B,C] * MT565 to MT567 Sequence D, fixed field 13 * MT609 and MT798_763 fixed qualifiers in Field 29 * When creating MT instances, the validation flag (STP, REMIT, COV) will be automatically created as block 3 field 119 when applies for the created MT * Log warning when creating MTnnn objects from invalid message types, for example calling MT103.parse(fin) and passing FIN content for an MT 202 * Ignore validation flag (STP, REMIT, COV) if it is not valid for the message type, when creating MT object from SwiftMessage (to avoid ClassNotFoundException) * Enhanced semantic in AckMessageComparator when a blocks are null or empty (see javadoc for details on how blank blocks are handled in comparison) RELEASE 7.8.6 - November 2016 * MxParser; IOB exception prevention in strip methods when XML has empty header or document * Prevention for IOB exception in ensureEOLS when converting MT message from model into FIN text * Expanded API in SwiftParser with static parse methods for each MT block * Expanded API in SwiftWriter to serialize any MT block into its native SWIFT representation, also made visit API in SwiftMessage static RELEASE 7.8.5 - October 2016 - LTS version for SRU2016 * Added getSubBlockByTagNames and getSubBlocksByTagNames in SwiftTagListBlock to retrieve subblocks based on comprehensive list or tag names * Added API in BusinessHeader to create valid BAH from simple parameters * Added API in BIC to get the branch and institution * Added API to match message identifier by regex, for example fin.*STP * Added API to strip header and document portion of Mx message in XML format * Added analizeMessage in MxParser, lightweight API to retrieve structure information from an MX messages * Added enumerations for message priority and delivery monitoring in MT block 2 * Added json() to AbstractMT * Added getComponentLabel(int) in Field classes * Added updateFrom AbstractMT to MtSwiftMessage * Added reference as class attribute in AbstractSwiftMessage (set by subclasses) * Added FileFormat attribute to AbstractSwiftMessage for clear identification of content in implementing subclasses * Added constructor of MxSwiftMessage from AbstracMX * Added API to get BIC codes from DN in Mx messages * Added MtId class, analogous to the existing MxId for MX messages * SwiftParser parsing of block 4 published as static public method * Added AbstractMessage as base class for specific MTnnn and MXmmm model hierarchy * Added MessageStandardType with MT and MX values and ServiceIdType for header service id values * Added nextSwiftMessage in RJE/PPC readers for system messages support * Added valuesNumeric to MT enumeration MtType * Added getValueDisplay with optional locale parameter to display formatted field and individual components values * Added MTVariant enum and getVariant API in swift messages * Added CONDITIONAL_QUALIFIER component number as static class field for all generic fields (fields implementing the GenericField interface) * Added BusinessHeader serialization into xml and Element objects * Added business header parse from Element object in MxParser * Added RJEReader and RJEWriter to create MT message files in RJE format * Added PPCWriter to create MT message files in DOS-PPC format (also enhanced API for the existing PPCFileReader) * Added path() API in MxNode * Added MtType, an enumeration of all available MTnnn implementations * Added parse to Field classes to update field components from full value * Added append lists of Tag or Field to TagListBlock * Added support for attributes in MxNode * Added generic setters for attributes in header blocks 1 and 2 using qualified names (#setField) * Added write XML method for MX business header * Added validName as static method in Field, to validate field names * Added getField static API in Field to create new instances with reflection given the field name and value * Added reference(msg) to SwiftMessageUtils to get the sender reference from messages that contain a reference field * Added SwiftMessageRevision to the swift messages model, to hold and track changes in swift messages * Fixed parser for field 98F * Fixed field 61 parse allowing EC and ED as credit/debit mark subfield * Fixed from() and to() methods in BusinessHeader to return the BIC code for both possible header types * FIxed serialization of component 1 in field 50F * Fixed parser and serialization in Field98F * Fixed SwiftMessage.toJson single quote to double quote in timestamp field * Fixed getLabel when used with the parameters combination of a valid mt and a null sequence * Fixed getValue in Field61, * Added proper implementation for isOptional(component) in Field61 * Fixed components trim to null in parser for several fields when the component value is not present * Fixed separators trim in getLine API * Fixed setComponentN(Number) when component is not a SWIFT amount, Number is now serialized as an integer (without decimal separator) * Fixed MT parser to allow additional lines in a field start with colon ':' * Fixed field 32R second component changed from currency to string to allow codewords ’FOZ’, ’GOZ’, ’GRM’, ’KLO’, ‘LIT’, ’LOT’, ‘OTH’, ‘PND’, ’TAL’, ’TOL’, ‘TON’, ‘TOZ’, ’UNT’ * Fixed field 33B first component changed from currency to string to allow codeword ’PCT’ used in MT601 * Fixed API inconsistencies in MtSwiftMessage when updating from SwiftMessage objects. * Bugfix MT506 added mandatory field 28E * Added missing getters for Sequence E1 in MT300 * Changed MX messages detection in MxParser to lighter implementation using Stax * Normalized Input/Output Outgoing/Incoming API in AbstractMT and SwiftMessage * SwiftMessage.toJson changed timestamp format to the recommended ISO 8601 * MxSwiftMessage meta-data (sender, receiver, reference, identifier) read and set from raw XML content * Added support in XmlParser for the field version of Core proprietary XML format for MTs, the parser now reads both formats seamlessly * Better header API in MxSwiftMessage to support both ISO and SWIFT business headers * Elaborated identifier in MtSwiftMessage, using fin.[.] instead of just the message type * Added comprehensive sequence names into pw_swift_label property files * Added translations of pw_swift_label property files to FR, DE and IT (complementing the existent EN, ES and RU files) * Completed pw_swift_label property files for all field + mt + sequence combinations * Complete application header parsing in MxParser * Better application header detection in MxParser based on namespaces * Added component labels for field 13K * Fields 11R and 11S component 3 split into two independent components. * In Field61, component 6 was splitted into two independent components to hold the "transaction type" and the "identification code" as stated in the standard definition for function * Added SwiftParserConfiguration to encapsulate several parsing options, allowing fast parsing of AbstractMT by reading the text block in raw format RELEASE 7.7 * valueDate in SwiftMessageUtils * isType(int...) in SwiftMessage * Enhanced the getSequence API in MT classes with support to nested sequences, allowing for ex: getSequenceE1(getSequenceEList().get(n)) * getLine API for FieldNN classes based on semantic lines number identification * Copy constructors for FieldNN classes, performing a deep copy of the components' list * MxParser message detection * New generic XML model and API, as backbone for MX messages. * Headers Blocks: new generic getters in blocks 1 and 2 to retrieve attributes using full qualified names from enums; for example getField(SwiftBlock1Field.LogicalTerminal) * Static labels for subfields in FieldNN classes to allow for example getComponent(Field93B.BALANCE) * BIC: API to check for live and non-live bics * MxParser: parseApplicationHeader and constructors from several sources * Added missing labels' API to fields: 36E, 69A, 69C, 69D, 70C, 70D, 70G, 90F, 90J, 92D, 92L, 92M, 92N, 92R * Added the ApplicationHeader attribute to AbstractMX * Added API to search nodes or content by path or name in the MxNode tree returned by the MxParser * Added json() and xml() methods to MT classes * Added write to file and output streams to AbstractMT and AbstractMX * Added consistent constructors from String, File or InputStream to MTnnn classes * Added static parse methods to create MTnnn objects from String, File, InputStream or MtSwiftMessage * Added consistent constructors from String, File or InputStream to AbstractSwiftMessage and subclasses MtSwiftMessage and MxSwiftMessage * Added static parse methods to create MtSwiftMessage and MxSwiftMessage objects from String, File or InputStream * Lib: added read from input streams * NPE prevention in SwiftFormatUtils.getCurrency * Fixed getSender and getReceiver for MTxxx to return accurate information regardless the message being of type input or output (also to be consistent with analogous methods in SwiftMessage) * Added CR and LF to charset z and x at SwiftcharsetUtils * Fixed validation of fields 70F, 77S and 77T that unnecessary restricted the allowed amount of lines (not it is unlimited because charset Z allows CRLF). * Fixed OutOfBound exception at MxNode findFirst implementation when a node has multiple children * Fixed getDescription for Field35B, now returning component 3 instead of 2 * Better API consistency between MT and MX implementations, with common ways to parse and build. * Changed sender and receiver attributes for MtSwiftMessage to hold BIC8 instead of full LT identifiers. * Deprecated the use of model message inside MtSwiftMessage * Simplified distribution zip with -sources and -javadoc jars RELEASE 7.6 - October 2014 * New BIC API: isTestAndTraining(), getLogicalTerminalIdentifier(), bic8() and bic11() * New model for LT addresses, and its related API in header classes * New SwiftMessage API: AbstractMT toMT() * New AbstractMT API: getSequence(name), getSequenceList(name) * Added builder API: constructors and append methods to add content with chaining support * Added missing getValue() implementations to field classes. Example: Field26C * Added annotations to MTNNN classes to identify sequence split strategy involved (more traceable code) * SRU 2014. Affected MTs: 300, 304, 305, 306, 340, 341, 360, 361, 380, 381, 502, 506, 508, 509, 513, 514, 515, 518, 527, 530, 536, 537, 538, 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 558, 564, 565, 566, 567, 568, 569, 575, 600, 601, 942 * Added description and release javadoc comments to MT classes * Added MX Generic model support * Added MX parse * Added MT300.getSequenceE() * Minor fix in MT300 sequences structure, B1 and B2 inside B, and named D's subsequence as D1 * SwiftTagListBlock implements Iterable * Bugfix SwitTagListBlock.countTagsStarsWith(string,string) was ignoring tagnames in count RELEASE 7.5 - August 2014 * Added toJson in SwiftMessage and SwiftTagListBlock, SwiftBlock1 and 2 * Added to SwiftTagListBlock getFieldByName(String, being) * Added to SwiftTagListBlock getFieldByName(String, being, component2) * Added to SwiftTagListBlock getFieldByNumber(int , being) * Added START_TAG and END_TAG constant to Sequence inner classes * Added Sequence.newInstance() method * Added static method Field.emptyTag() * Added to SwiftTagListBlock append(SwiftTagListBlock) * Changed SwiftFormatUtils.getNumber(Number) to allow variable amount of decimal parts without the previous limit of two * Added support for national clearing system codes in party identifier components: example 52A starting with //AT123 * JSON serialization: fixed missing quotes escaping and newline * in some occasions, getSequenceA() incorrectly returned null instead of empty sequence as stated in javadoc * Refactored Field77A to include 20 independent components instead of just one (current implementation is similar to Field79) * Deprecated isAnyOf(String ... names) and added isNameAnyOf(String ... names) semantics of method more clear with its name * Changed the semantic of getAccount methods to remove starting slashes if any * Some javadoc for BICRecord * Added serialization timestamp to JSON generation * In Field* void set changed to Class set so we can support the code style new Field().setThis().setThat().setThatToo() * Added Field.asTag() * Added option in XMLWriterVisitor to serialize field instead of tag RELEASE 7.4 - March 2014 * In BIC added subtype attribute and getBranch method * ReaderIterator to read a file from a classpath resource and split its content by the '$' symbol * In SwiftMessage new API to check and get linkages sequences * In AbstractSwiftMessage new constructor using MTSwiftMessage as parameter * In MTSwiftMessage updateFromModel and updateFromFIN using internal attributes * Several helper methods to parse field content using SwiftParseUtils * Field classes implementation for fields belonging to System and Service Messages (i.e. 451) * Resource bundle labels for System and Service Messages fields * MOR class to represent the message output reference (inherited from the MIR) * SwiftParseUtils: getTokenSecond and getTokenSecondLast with prefix * getAll(SwiftMessage) in every FieldNN class * getAll(SwiftTagListBlock) in every FieldNN class * New constant in Field suitable for import static * SwiftTagListBlock: constructors made public * SwiftTagListBlock: added filterByNameOrdered(String ...) * SwiftTagListBlock: added getFieldsByNumber(int) * SwiftTagListBlock: added removeSubBlock(String) * SwiftTagListBlock: deprecated int getTagCount(String) * SwiftTagListBlock: added int countByName(String) * SwiftTagListBlock: deprecated int getTagCount() * SwiftTagListBlock: added int countAll() * SwiftTagListBlock: added method boolean containsAllOf(String...) * Improved toString in SwiftTagListBlock and Tag * Javadoc improvements * Fixed SwiftBlock1 constructor to allow LTs missing the optional A, B or C identifier (11 characters length); ex. FOOOAR22XXX * Fixed getStatusInfo and getPreviousStatus in messages base class that was causing IOB exceptions * Issue 39: missing trimToEmpty in getComponent2 in 50H * MT207: fixed maximum repetitions of sequence B from 1 to unlimited RELEASE 7.3 - January 2014 * removed log4j.properties * New API: Field.isAnyOf(String...) * Added many methods in SwiftTagListBlock in resemblance to String manipulation API * SwiftTagListBlock added: getTagsByNumber(int), SwiftTagListBlock removeAfterFirst(String, boolean) * Added Tag.startsWith * Added Tag.contains * Added PPCFileReader iterator to read and split pc connect files RELEASE 7.2 - September 2013 * Added Field.letterOption * Added SwiftTagListBlock.getSubBlockBeforeFirst * Added SwiftTagListBlock.filterByName * Fixed Field.appendInLines that was causing the getValue of several fields (ex 35B) to start with unexpected EOL * Fixed NPE in XMLParser with null value in tags * Fixed Avoid usage of double in amount resolver RELEASE 7.0 - August 2013 * Enhanced messages model with base support for MX messages. * New messages meta-data model to handle additional information: Status history, User notes, Properties list. * Useful API to SwiftMessage to get: direction, PDE, PDM, UUID, MIR, MUR and getTypeInt * Complete FieldNN implementation classes * Complete MT helper classes, covering all message types * Added model and API to handle Sequences at MT classes, covering all sequences based on 16R/16S boundaries. * New API to handle sub blocks: SwiftTagListBlock.removeUntilFirst, SwiftTagListBlock.containsAnyOf * Ensuring of SWIFT EOL at ConversionService.getFIN * Fixed getValue of several fields to prevent printing of null * Fixed getValue of several fields with missing slash separator on optional components * Added missing field getters for MT classes with fieldsets: for example 93B at MT564. * getValue for Field35B. Thanks to Raghu rathorr@users.sf.net * getCalendar bug related to unused format parameter * Changed Field26C parser and subfields structure to split the string before the VAR-SEQU into independent components * Removed deprecated net.sourceforge classes * Removed unimplemented method amounts() in AmountContainer RELEASE 6.4 - March 2013 * Added visitor API on tag list block * New interface to identify and use generic fields (notice DSS methods are not part of non-generic fields) * Added API on MT classes to simplify messages creation * Comprehensive getters and setter API for field classes using functional names * Added PatternContainer interface and implemented in field * Better CurrencyContainer API * Added API to SwiftFormatUtils to get String components from Calendar using different SWIFT date/time formats * Implemented API for CurrencyContainer for all Fields * Added MT helper classes for MTs: 518, 549, 800, 801, 802, 824, 600, 601, 604, 605, 606, 607, 608, 609 * Added Field implementations for 33G, 35U, 86B, 68A, 68B, 68C, 94C, 31F, 37a, 34J, 35H, 31X * Added API to simplify messages creation; defaults for header blocks attributes, addField to Block4, setSender at Block1 RELEASE 6.3 - October 2012 * Added MT helper classes for MTs: 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 565 * Fixed getAsCalendar for year component of field 77H * Fixed parsing of field 50F * Added field class for: 26C * Support to identify which sequence a tag belongs to * Added API to FieldNN classes to get the DSS field * Added API to FieldNN classes to get the qualifier and conditional qualifier components * Added API to FieldNN classes to determine if field is generic or non generic * Field class made abstract * FieldNN isOptional: method to check if a given component is optional for the field * Field getLabel: support for label exceptions per mt and sequence * SwiftParser changes to distinguish the presence of brackets when they are block boundaries or part of an invalid field value * Improved parsing of Field35B, first and second components are set only if "ISIN " is present * SR2012 update: deprecated fields 23C, 23F. Updated MT300, MT304, MT305 with field changes. * Added serialization for: 20E, 29G, 31G, 36E, 50G, 50H, 69B, 69D, 69F, 77H, 90F, 90J, 90K, 92D, 92L, 92M, 92N, 94D, 94G, 95T, 98F * Fixed serialization of field 59A RELEASE 6.2 - June 2012 * Purged and some tunning of parser log * Added getField* API con block4 * Added Tag API: public boolean contains(String ... values) * Added more API to get subblocks based on tag number boundaries regardless of letter options * Fixed Tag.isNumber to consider the whole number and not just the prefix, isNumber(58) returns true to 58A but not to 5 * Added Tag.getNumber() API * Fixed build to include MTs and FieldNN source codes in the package * Fixed parser for fields: 94D, 50H, 50G and 52G * Added MT helper classes for MTs: 567, 900, 910, 920, 935, 941, 970, 971, 972, 973, 985, 986 * Added API for getLabel at Field objects, to retrieve business oriented names from resource bundles RELEASE 6.1 - March 2012 * Added BICContainer interface * Added MT helper classes for MTs: 360, 361, 362, 364, 365, 381, n90, n92, n95, n96, n98, 420, 422, 430, 450, 455, 456, 701, 705, 711, 720, 721, 732, 734, 740, 742, 747, 750, 752, 754, 756, 768 * Added getValue for Field13E * Fixed getValue for Field31R (2nd component is optional) RELEASE 6.0 - February 2012 * Merged patches from Walter Birch * SwiftParser: fix for parse error with malformed tag 72 * Implemented getValue for Fields: 19B, 31D, 31P, 31R, 39P, 40B, 41D, 92F, 93B, 98E and others with the same parser pattern * Changed packages in Hibernate mappings from sourceforge to prowidesoftware * Added SwiftMessageUtils class * Added date container interface to Fields to better support higher level model expressions * Added currency container interface to Fields to better support higher level model expressions * SWIFT standard update (Nov 2011) * Fixed field parser for 35B * Changed SwiftParser log level * Build: consistent release in jar, sources and javadocs jars, include dependent jars in lib directory * API to create FieldNN objects from Tag objects * Fixed field parser for 35B when first component is an ISIN number * Added DATE1 support for fields parser (fixes Field61) * SwiftMessage API to get sender and receiver addresses from message headers * Added MT helper classes for MTs: 101, 104, 105, 107, 110, 111, 112, 200, 201, 204, 205, 205COV, 207, 256, 300, 305, 306, 307, 330, 340, 341, 350, 540, 541, 542, 543, 564, 566 * MT helper classes 102_not_STP and 103_not_STP with inheritance from defaults MT103 and MT102 classes * Added Field implementations for 36E, 69B, 69D, 69F, 90F, 90J, 93B, 93C, 94G, 95T, 95S, 98E, 98F, 98L, 67A, 77J, 92E, 98D, 95S, 50G, 50H, 52G, 31G, 77H * TIME3 implementation to format utils * Suppress warnings for unused imports in eclipse RELEASE 6.0-RC5 - August 2011 * Fixed parser for Field20E * Added Field implementations for 90K, 92D, 92L, 92M, 92N RELEASE 6.0-RC4 - July 2011 * Added MT helper classes for MTs (SCORE): 798<743>, 798<745>, 798<760>, 798<761>, 798<762>, 798<763>, 798<764>, 798<766>, 798<767>, 798<769>, 798<779>, 798<788>, 798<789>, 798<790>, 798<791>, 798<793>, 798<794>, 798<799> * Added MT helper classes for MTs: 191, 291, 391, 399, 491, 535, 591, 691, 699, 707, 760, 767, 769, 790, 791, 891, 991, 999 * Added Field implementations for 13E, 20E, 22L, 23X, 24E, 27A, 29D, 29G, 29S, 31R, 39D, 39P, 49H, 49J, 50M, 72C, 77C, 77E, 78B RELEASE 6.0-RC3 - April 2011 * Added MT helper classes for MTs: 304, 320, 321, 210, 599 * Added Field implementations for 19B, 32H, 32R, 34E, 37G, 37M, 37R, 38J, 92F, 62A, 62B RELEASE 6.0-RC2 - February 2011 * Added Field implementation for 15 (A,B,C,D,E,F,G,H,I,J,K,L,M,N) * Added MT helper classes for MTs: 300, 400, 410, 412, 416, 499, 544, 545, 546, 547, 548, 700, 710, 730, 799 * Added Field implementations for 31D, 31P, 40B, 41A, 41D, 45A, 45B, 46A, 46B, 47A, 47B * field serialization from components values into SWIFT single string value * Removed log4.properties from distribution jar * MTs API: fixed field mutiplicity when a field becomes repetitive being present on multiple sequences or at repetitive sequences. * Hibernate mappings: removed confusing/commented blocktype mappings at SwiftBlock.hbm.xml * Hibernate mappings: package rename RELEASE 6.0-RC1 - October 2010 * Migrated src code to java 1.5 (binary distribution is still 1.4 compatible by means of http://retroweaver.sourceforge.net/) * Java 1.4 compatibility changes * normalization of linefeeds to CRLF at Tag creation from XML parsing * Removed deprecated API * Added new package io with subpackages parser and writer; added new package utils. * Renamed all packages to com.prowidesoftware (backward compatibility maintained with facades) * Added implementation for MTs 102 not STP, 102 STP, 103 not STP, 103 STP, 195, 199, 202, 202COV, 203, 295, 299, 940, 942, 950 * Added new SWIFT MT high level generated API, with classes for specific message types * New source package for generated swift model * Merged project "prowide SWIFT Fields" into "WIFE" * Added comparison options to AckMessageComparator * Removed old and incorrect charset validator class net.sourceforge.wife.swift.MessageValidator * Fix in remove user block method, thanks to Herman's contribution and patience * Parser API for (new SwiftParser()).parse(messageToParse); * Replaced commons-lang-2.3 -> 2.4 * Fixed message writer: system messages' block4 generated with inline tags * SwiftMessage API to check if it's Straight Through Processing (STP), based on the content of the User Header * SwiftMessage API to check if it's a cover payment (COV), based on the content of the User Header * SwiftTagListBlock API to check if contains a specific Tag * Removed unimplemented and confusing package net.sourceforge.wife.validation * Deprecated old and unused validation-related classes * Added AckMessageComparator which is useful of identify the ack of a given message. * SwiftTagListBlock API to get a sub block given its name or its starting and ending Tag * SwiftTagListBlock API to get tags by content, given its exact or partial value * Helper methods from Block4 moved to SwiftTagListBlock * SwiftTagListBlock is no longer abstract, so it can be used to create instances for subblocks * Required JVM upgrade to 1.5 * Initial update of upload-sf target for release to sourceforge RELEASE 5.2 - February 2009 * Added missing hashcode and equals * Javadocs improvements * Revised and tested hibernate mappings * Added getBlockType * Added length to unparsed text persistence mappings * Fixed persistence mapping for block2 inheritance * Updated hibernate libs to version 3.2.6 * Added isOutput * isInput made concrete, not abstract * Added abstract isInput() method to SwiftBlock2 for safer casting subblocks when input/output is unknown RELEASE 5.1 - July 2007 * Migrated logging to java logging api * Removed SwiftBlock's deprecated methods. * Moved some common methods in SwiftBlock2Input/SwiftBlock2Output to parent class SwiftBlock2. * Upgraded commons-lang to version 2.3 * Improved persistence mapping. * Move persistence (helper) package to wife-test project. * Minor javadoc fixes. * Fixed some warnings. RELEASE 5.0 - June 2007 * Improved Hibernate mapping for simplified and more efficient data base schema. * Added support for unparsed text to model, persistence mapping and conversion services (needed for some MT0xx for example). * XML to SwiftMessage parsing methods moved from ConversionService to XMLParser in "parser" package. * New package created for parser classes "net.sourceforge.wife.swift.parser". * Made abstract intermediate classes of blocks object hierarchy. * Added support for user custom blocks in model, persistence mapping and conversion services. * Improved overall test cases coverage and source/resources structure. * Fixed some warnings. * Swift Parser enhancements; don't throw exception on unrecognized data, but preserve an internal list of errors. * Added reference to current message in parser, so it can take decisions based on parsed data. * Added constant for possible values for application id to SwiftBlock1. * Updated dependency: hsqldb 1.8.0.4 -> hsqldb 1.8.0.7. * Updated dependency: hibernate 3.1.3 -> hibernate 3.2.3.ga. RELEASE 4.0 - April 2007 * Moving to junit 4 - some new tests are being written with junit4, this should make testing some features singificantly easier. * Move size and isEmpty methods to subclasses. * Improved deprecated exception messages and javadoc. * Added useful getter for the MIR field in Block 2 output. * Added support for optional fields in Block 2 input. * Method specific to each block moved to each block class, when possible compatibility methods were left in old places, marked as deprecated to provide a smoother migration path. * Removed deprecated API in SwiftBlock. * Adapted parser to new model refactor. * More javadoc in parser. * Improved xml writer (more clean tabs and EOL). * Refactored and fixed XML parsing for blocks 3 and 5. * Fixed build.xml to include resources in generated jar files. * Improved javadoc and validations in fin writer. * Completed basic internal XML parsing. * Added more tests for XML conversion. * Implemented XML conversion parsing for all blocks (except 4). * Updated passing test in conversion service. RELEASE 3.4 - March 2007 * Added license header to source files. * Minor fixes in build system. * Enhanced IBAN validation routine. * Added numerous tests for IBAN validation. * Added JSValidationUnit backed by Rhino, to support easy extension of validations. * Made all loggers private static transient final. * Enhanced overview documentation. * Javadoc updates. * Code clean up. * Added many tag specific validation units targeting MT103 validation. * Removed ant junit fork since it broke in ant 1.7. RELEASE 3.3 - January 2007 * Initiated MT103 validation rule. * Validation framework core classes written. * Utility classes for validation. * Removed old and deprecated/replaces writer component. * Dependencies clean up, ant downloads less libs now. * Added Currency ISO Codes (needed for validations). * VF: implemented TagExists and ConditionalTagPresence validation units. * Started implementation of validation units. * Initial implementation of BIC validation. * Initial implementation of IBAN validation. * Added ISO Countries for IBAN validation. * Fixed issue in writer with block5 as mentioned in bug 1601122. * Fixed issue 1595631. RELEASE 3.2 * Parser logging information cleanup. * Migrating to log4j 1.2.8 for better compatibility (issued with trace method on some servers). * Fixed build to properly include current timestamp in dist target when property release.name is not set. * Fixed bug in parser/writer integration which included double block number when using the writer with an object of a just parsed message(1595589). * Updated code to fix issue mentioned in https://sourceforge.net/forum/message.php?msg_id=4001538. RELEASE 3.1.1 * Small fixes for java 1.4 compatibility. RELEASE 3.1 * Fixes to compile for java 1.4 by default. * Fixed test for bug 1540294, typo in block number. * Use system EOL in XML writer. * Added compile timestamp to manifest in created jars. RELEASE 3.0-RC2 * Build: Added release.name property to manifest. RELEASE 3.0-RC1 * Build: added selection of tests known to fail and those known to pass. * Fixed persistence mapping. * Improved build and added control to exclude tests that are know to fail. * Model simplification: SwiftBlockN classes are being removed in favor of base class SwiftBlock removed list of blocks in message which was confusing when not all blocks present. * SwiftBlock (base class) and subclasses are mapped and persisted ok, either the base class or the subclasses. * Added many tests for hiberante persistence of SwiftMessage hierarchy. * Added XML Visitor to write a swift message to an XML representation. * Added ConversionService class which encapsulates many services conveniently. RELEASE 2.0 * New parser component highly tested on production and unit tests. * Writer component usable. while it has many limitations, it can be used as it is now. * Work in progress swift message persistence mapping. * Work in progress swift expression <-> regular expression conversion.