getAll(final SwiftTagListBlock block) {
return result;
}
final Tag[] arr = block.getTagsByName(NAME);
- if (arr != null && arr.length > 0) {
+ if (arr != null) {
for (final Tag f : arr) {
result.add(new Field21T(f));
}
diff --git a/src/main/java/com/prowidesoftware/swift/model/field/Field21T.java.bak b/src/main/java/com/prowidesoftware/swift/model/field/Field21T.java.bak
new file mode 100644
index 00000000..dba381ad
--- /dev/null
+++ b/src/main/java/com/prowidesoftware/swift/model/field/Field21T.java.bak
@@ -0,0 +1,416 @@
+/*
+ * Copyright 2006-2023 Prowide
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.prowidesoftware.swift.model.field;
+
+import com.google.gson.JsonObject;
+import com.google.gson.JsonParser;
+import com.prowidesoftware.deprecation.ProwideDeprecated;
+import com.prowidesoftware.deprecation.TargetYear;
+import com.prowidesoftware.swift.model.*;
+import com.prowidesoftware.swift.model.Tag;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Locale;
+import java.util.Map;
+import org.apache.commons.lang3.StringUtils;
+
+/**
+ * SWIFT MT Field 21T.
+ *
+ * Model and parser for field 21T of a SWIFT MT message.
+ *
+ *
Subfields (components) Data types
+ *
+ * - Component 1: Reference:
String
+ *
+ *
+ * Structure definition
+ *
+ * - validation pattern:
16x(***)
+ * - parser pattern:
S
+ * - components pattern:
S
+ *
+ *
+ *
+ * This class complies with standard release SRU2022
+ *
+ * @deprecated This field has been moved to the Prowide Integrator since it is only used in SCORE messages, not in the general MT standard
+ */
+@ProwideDeprecated(phase4 = TargetYear.SRU2025)
+public class Field21T extends Field implements Serializable {
+ /**
+ * Constant identifying the SRU to which this class belongs to.
+ */
+ public static final int SRU = 2022;
+
+ private static final long serialVersionUID = 1L;
+ /**
+ * Constant with the field name 21T.
+ */
+ public static final String NAME = "21T";
+ /**
+ * Same as NAME, intended to be clear when using static imports.
+ */
+ public static final String F_21T = "21T";
+
+ /**
+ * Component number for the Reference subfield.
+ */
+ public static final Integer REFERENCE = 1;
+
+ /**
+ * Default constructor. Creates a new field setting all components to null.
+ */
+ public Field21T() {
+ super(1);
+ }
+
+ /**
+ * Creates a new field and initializes its components with content from the parameter value.
+ * @param value complete field value including separators and CRLF
+ */
+ public Field21T(final String value) {
+ super(value);
+ }
+
+ /**
+ * Creates a new field and initializes its components with content from the parameter tag.
+ * The value is parsed with {@link #parse(String)}
+ * @throws IllegalArgumentException if the parameter tag is null or its tagname does not match the field name
+ * @since 7.8
+ */
+ public Field21T(final Tag tag) {
+ this();
+ if (tag == null) {
+ throw new IllegalArgumentException("tag cannot be null.");
+ }
+ if (!StringUtils.equals(tag.getName(), "21T")) {
+ throw new IllegalArgumentException("cannot create field 21T from tag " + tag.getName()
+ + ", tagname must match the name of the field.");
+ }
+ parse(tag.getValue());
+ }
+
+ /**
+ * Copy constructor.
+ * Initializes the components list with a deep copy of the source components list.
+ * @param source a field instance to copy
+ * @since 7.7
+ */
+ public static Field21T newInstance(Field21T source) {
+ Field21T cp = new Field21T();
+ cp.setComponents(new ArrayList<>(source.getComponents()));
+ return cp;
+ }
+
+ /**
+ * Create a Tag with this field name and the given value.
+ * Shorthand for new Tag(NAME, value)
+ * @see #NAME
+ * @since 7.5
+ */
+ public static Tag tag(final String value) {
+ return new Tag(NAME, value);
+ }
+
+ /**
+ * Create a Tag with this field name and an empty string as value.
+ * Shorthand for new Tag(NAME, "")
+ * @see #NAME
+ * @since 7.5
+ */
+ public static Tag emptyTag() {
+ return new Tag(NAME, "");
+ }
+
+ /**
+ * Parses the parameter value into the internal components structure.
+ *
+ *
Used to update all components from a full new value, as an alternative
+ * to setting individual components. Previous component values are overwritten.
+ *
+ * @param value complete field value including separators and CRLF
+ * @since 7.8
+ */
+ @Override
+ public void parse(final String value) {
+ init(1);
+ setComponent1(value);
+ }
+
+ /**
+ * Serializes the fields' components into the single string value (SWIFT format)
+ */
+ @Override
+ public String getValue() {
+ final StringBuilder result = new StringBuilder();
+ append(result, 1);
+ return result.toString();
+ }
+
+ /**
+ * Returns a localized suitable for showing to humans string of a field component.
+ *
+ * @param component number of the component to display
+ * @param locale optional locale to format date and amounts, if null, the default locale is used
+ * @return formatted component value or null if component number is invalid or not present
+ * @throws IllegalArgumentException if component number is invalid for the field
+ * @since 7.8
+ */
+ @Override
+ public String getValueDisplay(int component, Locale locale) {
+ if (component != 1) {
+ throw new IllegalArgumentException("invalid component number " + component + " for field 21T");
+ }
+ // default format (as is)
+ return getComponent(1);
+ }
+
+ /**
+ * Returns the field component types pattern.
+ *
+ * This method returns a letter representing the type for each component in the Field. It supersedes
+ * the Components Pattern because it distinguishes between N (Number) and I (BigDecimal).
+ * @since 9.2.7
+ */
+ @Override
+ public String typesPattern() {
+ return "S";
+ }
+
+ /**
+ * Returns the field parser pattern.
+ */
+ @Override
+ public String parserPattern() {
+ return "S";
+ }
+
+ /**
+ * Returns the field validator pattern
+ */
+ @Override
+ public String validatorPattern() {
+ return "16x(***)";
+ }
+
+ /**
+ * Given a component number it returns true if the component is optional,
+ * regardless of the field being mandatory in a particular message.
+ * Being the field's value conformed by a composition of one or several
+ * internal component values, the field may be present in a message with
+ * a proper value but with some of its internal components not set.
+ *
+ * @param component component number, first component of a field is referenced as 1
+ * @return true if the component is optional for this field, false otherwise
+ */
+ @Override
+ public boolean isOptional(int component) {
+ return false;
+ }
+
+ /**
+ * Returns true if the field is a GENERIC FIELD as specified by the standard.
+ * @return true if the field is generic, false otherwise
+ */
+ @Override
+ public boolean isGeneric() {
+ return false;
+ }
+
+ /**
+ * Returns the defined amount of components.
+ * This is not the amount of components present in the field instance, but the total amount of components
+ * that this field accepts as defined.
+ * @since 7.7
+ */
+ @Override
+ public int componentsSize() {
+ return 1;
+ }
+
+ /**
+ * Returns english label for components.
+ *
+ * The index in the list is in sync with specific field component structure.
+ * @see #getComponentLabel(int)
+ * @since 7.8.4
+ */
+ @Override
+ public List getComponentLabels() {
+ List result = new ArrayList<>();
+ result.add("Reference");
+ return result;
+ }
+
+ /**
+ * Returns a mapping between component numbers and their label in camel case format.
+ * @since 7.10.3
+ */
+ @Override
+ protected Map getComponentMap() {
+ Map result = new HashMap<>();
+ result.put(1, "reference");
+ return result;
+ }
+
+ /**
+ * @see Field#getLabelMap()
+ * @since 9.3.12
+ */
+ @Override
+ protected Map getLabelMap() {
+ if (super.labelMap != null && !super.labelMap.isEmpty()) {
+ // return cached map
+ return super.labelMap;
+ }
+ super.labelMap = new HashMap<>();
+ super.labelMap.put("reference", 1);
+ return super.labelMap;
+ }
+
+ /**
+ * Gets the component 1 (Reference).
+ * @return the component 1
+ */
+ public String getComponent1() {
+ return getComponent(1);
+ }
+
+ /**
+ * Gets the Reference (component 1).
+ * @return the Reference from component 1
+ */
+ public String getReference() {
+ return getComponent1();
+ }
+
+ /**
+ * Set the component 1 (Reference).
+ *
+ * @param component1 the Reference to set
+ * @return the field object to enable build pattern
+ */
+ public Field21T setComponent1(String component1) {
+ setComponent(1, component1);
+ return this;
+ }
+
+ /**
+ * Set the Reference (component 1).
+ *
+ * @param component1 the Reference to set
+ * @return the field object to enable build pattern
+ */
+ public Field21T setReference(String component1) {
+ return setComponent1(component1);
+ }
+
+ /**
+ * Returns the field's name composed by the field number and the letter option (if any).
+ * @return the static value of Field21T.NAME
+ */
+ @Override
+ public String getName() {
+ return NAME;
+ }
+
+ /**
+ * Gets the first occurrence form the tag list or null if not found.
+ * @return null if not found o block is null or empty
+ * @param block may be null or empty
+ */
+ public static Field21T get(final SwiftTagListBlock block) {
+ if (block == null || block.isEmpty()) {
+ return null;
+ }
+ final Tag t = block.getTagByName(NAME);
+ if (t == null) {
+ return null;
+ }
+ return new Field21T(t);
+ }
+
+ /**
+ * Gets the first instance of Field21T in the given message.
+ * @param msg may be empty or null
+ * @return null if not found or msg is empty or null
+ * @see #get(SwiftTagListBlock)
+ */
+ public static Field21T get(final SwiftMessage msg) {
+ if (msg == null || msg.getBlock4() == null || msg.getBlock4().isEmpty()) {
+ return null;
+ }
+ return get(msg.getBlock4());
+ }
+
+ /**
+ * Gets a list of all occurrences of the field Field21T in the given message
+ * an empty list is returned if none found.
+ * @param msg may be empty or null in which case an empty list is returned
+ * @see #getAll(SwiftTagListBlock)
+ */
+ public static List getAll(final SwiftMessage msg) {
+ if (msg == null || msg.getBlock4() == null || msg.getBlock4().isEmpty()) {
+ return java.util.Collections.emptyList();
+ }
+ return getAll(msg.getBlock4());
+ }
+
+ /**
+ * Gets a list of all occurrences of the field Field21T from the given block
+ * an empty list is returned if none found.
+ *
+ * @param block may be empty or null in which case an empty list is returned
+ */
+ public static List getAll(final SwiftTagListBlock block) {
+ final List result = new ArrayList<>();
+ if (block == null || block.isEmpty()) {
+ return result;
+ }
+ final Tag[] arr = block.getTagsByName(NAME);
+ if (arr != null && arr.length > 0) {
+ for (final Tag f : arr) {
+ result.add(new Field21T(f));
+ }
+ }
+ return result;
+ }
+
+ /**
+ * This method deserializes the JSON data into a Field21T object.
+ * @param json JSON structure including tuples with label and value for all field components
+ * @return a new field instance with the JSON data parsed into field components or an empty field id the JSON is invalid
+ * @since 7.10.3
+ * @see Field#fromJson(String)
+ */
+ public static Field21T fromJson(final String json) {
+
+ final Field21T field = new Field21T();
+
+ final JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
+
+ // **** COMPONENT 1 - Reference
+
+ if (jsonObject.get("reference") != null) {
+ field.setComponent1(jsonObject.get("reference").getAsString());
+ }
+
+ return field;
+ }
+}
diff --git a/src/main/java/com/prowidesoftware/swift/model/field/Field37P.java b/src/main/java/com/prowidesoftware/swift/model/field/Field37P.java
index fee4d842..72543d72 100644
--- a/src/main/java/com/prowidesoftware/swift/model/field/Field37P.java
+++ b/src/main/java/com/prowidesoftware/swift/model/field/Field37P.java
@@ -19,18 +19,16 @@
import com.google.gson.JsonParser;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
-import com.prowidesoftware.swift.model.*;
+import com.prowidesoftware.swift.model.SwiftMessage;
+import com.prowidesoftware.swift.model.SwiftTagListBlock;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.utils.SwiftFormatUtils;
+import org.apache.commons.lang3.StringUtils;
+
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
+import java.util.*;
/**
* @deprecated This field has been removed since SRU2024
diff --git a/src/main/java/com/prowidesoftware/swift/model/field/Field37U.java b/src/main/java/com/prowidesoftware/swift/model/field/Field37U.java
index e716a045..de45bd3f 100644
--- a/src/main/java/com/prowidesoftware/swift/model/field/Field37U.java
+++ b/src/main/java/com/prowidesoftware/swift/model/field/Field37U.java
@@ -19,18 +19,16 @@
import com.google.gson.JsonParser;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
-import com.prowidesoftware.swift.model.*;
+import com.prowidesoftware.swift.model.SwiftMessage;
+import com.prowidesoftware.swift.model.SwiftTagListBlock;
import com.prowidesoftware.swift.model.Tag;
import com.prowidesoftware.swift.utils.SwiftFormatUtils;
+import org.apache.commons.lang3.StringUtils;
+
import java.io.Serializable;
import java.math.BigDecimal;
import java.math.BigInteger;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import org.apache.commons.lang3.StringUtils;
+import java.util.*;
/**
* @deprecated This field has been removed since SRU2024
diff --git a/src/main/java/com/prowidesoftware/swift/model/field/Field39D.java b/src/main/java/com/prowidesoftware/swift/model/field/Field39D.java
index fef198cf..8a005f55 100644
--- a/src/main/java/com/prowidesoftware/swift/model/field/Field39D.java
+++ b/src/main/java/com/prowidesoftware/swift/model/field/Field39D.java
@@ -19,16 +19,14 @@
import com.google.gson.JsonParser;
import com.prowidesoftware.deprecation.ProwideDeprecated;
import com.prowidesoftware.deprecation.TargetYear;
-import com.prowidesoftware.swift.model.*;
+import com.prowidesoftware.swift.model.SwiftMessage;
+import com.prowidesoftware.swift.model.SwiftTagListBlock;
import com.prowidesoftware.swift.model.Tag;
-import java.io.Serializable;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Locale;
-import java.util.Map;
import org.apache.commons.lang3.StringUtils;
+import java.io.Serializable;
+import java.util.*;
+
/**
* @deprecated This field has been removed since SRU2024
*/