prowide/prowide-core

View on GitHub
CHANGELOG.md

Summary

Maintainability
Test Coverage
# Prowide Core - CHANGELOG

#### 9.4.16 - May 2024
  * (PW-1862) Added NarrativeFragment class for detailed line information in StructuredNarrative fragments
  * Fixed SwiftMessage getPDE(): return empty value instead of null when codeword exists and has no value
  * Added isPercentage() helper method to field 37K

#### 9.4.15 - March 2024
  * (PW-1812) Updated the narrative resolver, format 2 (used in field 72 for example), to allow empty values as part of the narrative fragment
  * Updated validators for BIC, country, and currency constraints to utilize keywords for i18n-compatible messages
  * Deprecated unnecessary methods in the SafeXmlUtils class

#### 9.4.14 - December 2023
  * (PW-1718) Changed the getComponentLabel(component) in Field59F to be dynamic based on the line identifiers (similar to existing API in Field50F)

#### 9.4.13 - November 2023
  * (PW-1697) Fixed validation/parse pattern in field 29O
  * (PW-1697) MT306 changes in field 30I
  * Added DistinguishedName with Builder in order to encapsulate the BIC branch name logic 

#### 9.4.12 - November 2023
  * (PW-1697) Fixed validation pattern in fields 14[H,K,L,M,N,O] and 29J

#### 9.4.11 - November 2023
  * (PW-1695) Fixed a stack overflow in the fields fromJson implementation when a malformed JSON input contains empty field names
  * (PW-1688) Added missing field labels for SRU2023 changes in the pw_swift_*.properties file

#### 9.4.10 - October 2023
  * (PW-1675) update to Field 31R to support also two date components as requested by SCORE messages
  * Added 36B and 36D getters to MT543

#### 9.4.9 - October 2023
  * (PW-1659) Field 24G deprecated Name and Address for Narrative

#### 9.4.8 - October 2023
  * Added default methods for sender, receiver, and identifier extraction to the MessageExtractionStrategy
  * Added JSON to the `FileFormat` enumeration

#### 9.4.7 - September 2023
  * (PW-1478) Fixed Field 44J parse and getValue to enable proper data preservation when the field contains multiline content

#### 9.4.6 - September 2023
  * Added support for an optional `pw-swift-core.properties` to customize the behavior of the SafeXmlUtils class

#### 9.4.5 - August 2023
  * (PW-1478) Field 44J parse and getValue fix

#### 9.4.4 - August 2023
  * (PW-1478) Field 44J format fixed to allow multiline

#### 9.4.3 - July 2023
  * (PW-1461) Remove deprecation of field 31R model since is it used back in SRU2023
  * (PW-1405) Trim original String payload when creating an AbstractSwiftMessage

#### 9.4.2 - June 2023
  * (GH-163) Remove unnecessary padding in sender and receiver in AbstractMT#creeate(number, sender, receiver) method
  * (PW-1323) Fixing getValue method for pattern issue in Field44J

#### 9.4.1 - June 2023
  * (PW-1323) Fixing missing pattern issue in Field44J

#### 9.4.0 - May 2023
  * SWIFT Standard release update 2023 (live 19 November 2023)
  * Yearly revision of deprecation phase (see https://dev.prowidesoftware.com/SRU2022/getting-started/deprecation/)

#### 9.3.15 - May 2023
  * (PW-1341) Avoid log pollution with exception stacktrace in Field#formatAccount method
  * (PW-1264) Added distinguishedName(boolean includeDefaultBranch) method to BIC in order to return default branch name

#### 9.3.14 - March 2023
  * (PW-1182) Fixed MT internal Loops API, when strategy is GENERATED_FIXED_WITH_OPTIONAL_TAIL and the tail part contains repetitive fields, such as MT920
  * (PW-1241) Added addUnstructuredStrict method to Narrative in order to strictly wrap unstructured input

#### 9.3.13 - March 2023
  * Deprecated all fields that are only used in SCORE messages and not in the general MT standard as they will eventually be removed from the library

#### 9.3.12 - February 2023
  * (PW-1109) Changed Narrative Resolver to validate minimum codeword length of 1 char
  * (GH-148) Fixed parser of Field61 amount component when number starts with the decimal comma (implicit zero in amount lower than 1)
  * Added getComponent(String componentName) to retrieve the component based on the name instead of the number
  * Added componentNameToNumber(String componentName) to retrieve the component number based on the component name

#### 9.3.11 - January 2023
  * (PW-1152) Preserve line breaks when creating NarrativeContainer fields from JSON with legacy structure: narrative1, narrative2, etc...
  * Fixed duplicate elements when serializing NarrativeContainer fields into JSON 

#### 9.3.10 - January 2023
  * (PW-1150) Added field model class for 31M (required in SCORE MT798_753)
  * (PW-1150) Added field model class for 71E (required in SCORE MT798_755 and MT798_757)

#### 9.3.9 - December 2022
  * (PW-1078) StructuredNarrative: Fixed parser to treat the optional [3!a13d] part as a unit block, both currency and amount present or missing

#### 9.3.8 - November 2022
  * (GH-127) Enhanced field JSON serialization to include detailed structure when the field is a NarrativeContainer 

#### 9.3.7 - November 2022
  * (PW-1101) Fix field 35C labels to match the FIN xsd: Identification Of Instrument, Description Of Instrument

#### 9.3.6 - November 2022
  * (PW-1086) Fixed typo in field 36D accessors
  * (PW-1078) StructuredNarrative: Added getBankCode() methods in order to allow direct access to data (used in SCORE messages)
  * (GH-88) Added missing constants for ISO 15022 codes 
  * MT540 and MT548 added missing getter for Field99C
  * Added removeRepeatedBoundaries method in order to remove repeated tag boundaries

#### 9.3.5 - October 2022
  * SRU2022 updates review: field 35C validation pattern changed to <VAR-SEQU-5>

#### 9.3.4 - September 2022
  * Added getCADETL method for "CADETL" separator sequences
  * (GH-119) MT566: Fixed repetitions of sequence USECU/FIA that is not repetitive
  * Added sequence getters using the boundary field qualifier, for example getSequenceGENL() as equivalent to the existing getSequenceA()

#### 9.3.3 - August 2022
  * (PW-1015) Added field model classes for 47E, 49D and 49F (required in SCORE MT798_774)

#### 9.3.2 - July 2022
  * (PW-977) Changed the MT203 and MT210 inner structure from regular sequence to inner loop named Loop1
  * Added Loop1 getter API to MTs: 110, 201, 203, 210, 410, 412, 420, 422, 450, 456, 604, 605, 801, 920, 973

#### 9.3.1 - July 2022
  * (PW-976) Added new MonetaryAmountContainer interface for fields having both an Amount and Currency
  * (PW-969) Modified field 12E, 12K and 12R labels
  * (PW-969) Added an optional narrative component to field 12R (required when the field is used in SCORE messages)
  * (PW-898) Changed the heuristic to retrieve sequence B1 from MT300 and MT304 to be more efficient even if the message structure is invalid
  * (PW-867) Enhanced the parsing of party fields A, B and D, to be more strict when splitting the /D/ or /C/ prefix from the account
  * Enhanced MtId constructor with regex matching
  * Added method namespaceURI() in the MtId class to return for example "urn:swift:xsd:fin.103.2021" for the MT103

#### 9.3.0 - May 2022
  * SWIFT Standard release update 2022 (live 20 November 2022)
  * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
  * Updated gson dependency to 2.9.0

#### 9.2.13 - April 2022
  * (PW-892) Fixed AbstractMT#create when the message type number is less than 100
  * Added a convenient String message() method in the SwiftMessage object to get the FIN serialization of the message
  * Fixed error in Field 94G getValue

#### 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

#### 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

#### 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

#### 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

#### 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)

#### 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

#### 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"

#### 9.2.5 - September 2021
  * (PW-664) Parser enhancement to be lenient on LF before block identifier

#### 9.2.4 - August 2021
  * MultiLineField: preserve starting component separator when getting lines with offset

#### 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)

#### 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"

#### 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

#### 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

#### 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]

#### 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

#### 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

#### 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"

#### 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)

#### 8.0.2 - April 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

#### 8.0.1 - October 2019
  * 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

#### 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

#### 7.10.4 - May 2019
  * 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

#### 7.10.3 - October 2018
  * 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

#### 7.10.2 - May 2018
  * Revamped the JSON API implementation using Gson, added missing fromJson methods

#### 7.10.1 - April 2018
  * FIN writer: reverted the trim in tag values introduced in 7.8.9

#### 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

#### 7.9.7 - April 2018
  * 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

#### 7.9.6 - December 2017
  * Fixed conversion to XML with compressed parameter true in ConversionService

#### 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

#### 7.9.4 - November 2017
  * Internal code maintenance release

#### 7.9.3 - October 2017
  * 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 <SB-LC> function
  * Enhanced fields parse/serialization to preserve any whitespace in a component

#### 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

#### 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

#### 7.9.0 - 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

#### 7.8.9 - May 2017
  * Yearly revision of deprecation phase (see http://www.prowidesoftware.com/resources/deprecation-policy)
  * Added convenient isType(int) to SwiftMessage
  * Fixed amounts() in AmountContainer fields

#### 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

#### 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)

#### 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

#### 7.8.5 - October 2016
  * 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.type.variant 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 <SUB-6>
  * Added SwiftParserConfiguration to encapsulate several parsing options, allowing fast parsing of AbstractMT by reading the text block in raw format

#### 7.7.0 - October 2015
  * 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

#### 7.6.0 - 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<Tag>
  * Bugfix SwitTagListBlock.countTagsStarsWith(string,string) was ignoring tagnames in count

#### 7.5.0 - 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

#### 7.4.0 - 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

#### 7.3.0 - 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

#### 7.2.0 - 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

#### 7.0.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

#### 6.4.0 - 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

#### 6.3.0 - 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

#### 6.2.0 - 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

#### 6.1.0 - 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)

#### 6.0.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

#### 6.0.0-RC5 - August 2011
  * Fixed parser for Field20E
  * Added Field implementations for 90K, 92D, 92L, 92M, 92N

#### 6.0.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

#### 6.0.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

#### 6.0.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

#### 6.0.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

#### 5.2.0 - 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

#### 5.1.0 - 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.

#### 5.0.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.

#### 4.0.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.

#### 3.4.0 - 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.

#### 3.3.0 - 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.

#### 3.2.0 - 2006
  * 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.

#### 3.1.1 - 2006
  * Small fixes for java 1.4 compatibility.

#### 3.1.0 - 2006
  * 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.

#### 3.0.0 - 2006
  * Build: Added release.name property to manifest.
  * 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 Hibernate persistence of SwiftMessage hierarchy.
  * Added XML Visitor to write a swift message to an XML representation.
  * Added ConversionService class which encapsulates many services conveniently.

#### 2.0.0 - 2006
  * 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.