Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

CU-86ayb02z5_Crete-model-for-DistinguishedName #182

Merged
merged 2 commits into from
Nov 16, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
#### 9.4.13 - SNAPSHOT
* (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
Expand Down
9 changes: 3 additions & 6 deletions src/main/java/com/prowidesoftware/swift/model/BIC.java
Original file line number Diff line number Diff line change
Expand Up @@ -356,14 +356,11 @@ public String distinguishedName() {
* @since 9.3.15
*/
public String distinguishedName(boolean includeDefaultBranch) {
StringBuilder result = new StringBuilder();
DistinguishedName.Builder dnBuilder = new DistinguishedName.Builder(getBic8());
if (includeDefaultBranch || !Objects.equals(getBranchOrDefault(), "XXX")) {
result.append("ou=")
.append(StringUtils.lowerCase(getBranchOrDefault()))
.append(",");
dnBuilder.withBranch(getBranchOrDefault());
}
result.append("o=").append(StringUtils.lowerCase(getBic8())).append(",o=swift");
return result.toString();
return dnBuilder.build().toString();
}

@Override
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,94 @@
package com.prowidesoftware.swift.model;

import org.apache.commons.lang3.StringUtils;

/**
* Represents a Distinguished Name (DN) in the context of a directory service.
* The DN is constructed using the organization unit (ou), Bank Identifier Code (BIC8), and SWIFT code.
* This class provides a builder pattern for creating DistinguishedName instances.
*/
public class DistinguishedName {

/**
* The organization unit (ou) representing the branch in the Distinguished Name.
*/
private final String branch;

/**
* The Bank Identifier Code (BIC8) in lowercase format.
*/
private final String bic8;

/**
* The SWIFT code representing the organization.
*/
private final String swift;

/**
* Private constructor to create a DistinguishedName instance using the Builder.
*
* @param builder The builder containing the required parameters for the DistinguishedName.
*/
private DistinguishedName(Builder builder) {
this.branch = builder.branch;
this.bic8 = builder.bic8;
this.swift = builder.swift;
}

public String getBranch() {
return branch;
}

public String getBic8() {
return bic8;
}

public String getSwift() {
return swift;
}

@Override
public String toString() {
StringBuilder dn = new StringBuilder();
if (branch != null && !branch.isEmpty()) {
dn.append("ou=").append(branch).append(",");
}
dn.append("o=").append(bic8).append(",o=").append(swift);
return dn.toString();
}

public static String parseBIC(final String dn) {
if (StringUtils.isBlank(dn)) {
return null;
}
for (String s : StringUtils.split(dn, ",")) {
if (StringUtils.startsWith(s, "o=") && !StringUtils.equals(s, "o=swift")) {
return StringUtils.upperCase(StringUtils.substringAfter(s, "o="));
}
}
return null;
}

/**
* Builder class for constructing DistinguishedName instances.
*/
public static class Builder {
private String branch;
private final String bic8;
private final String swift;

public Builder(String bic8) {
this.bic8 = StringUtils.lowerCase(bic8);
this.swift = "swift";
}

public Builder withBranch(String ou) {
this.branch = StringUtils.lowerCase(ou);
return this;
}

public DistinguishedName build() {
return new DistinguishedName(this);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
package com.prowidesoftware.swift.model;

import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertNull;

import org.junit.jupiter.api.Test;

class DistinguishedNameTest {

Check notice

Code scanning / CodeQL

Unused classes and interfaces Note test

Unused class: DistinguishedNameTest is not referenced within this codebase. If not used as an external API it should be removed.

@Test
void testDistinguishedNameWithCommonNameAndOU() {
String bic8 = "BIC8CODE";
String ou = "FOO";
DistinguishedName dn =
new DistinguishedName.Builder(bic8).withBranch(ou).build();
assertEquals("ou=foo,o=bic8code,o=swift", dn.toString());
}

@Test
void testDistinguishedNameWithOUOnly() {
String bic8 = "bic8code";
String ou = "bar";
DistinguishedName dn =
new DistinguishedName.Builder(bic8).withBranch(ou).build();
assertEquals("ou=bar,o=bic8code,o=swift", dn.toString());
}

@Test
void testDistinguishedNameWithNoOUOrCN() {
String bic8 = "BIC8CODE";
DistinguishedName dn = new DistinguishedName.Builder(bic8).build();
assertEquals("o=bic8code,o=swift", dn.toString());
}

@Test
void testDistinguishedNameEmptyValues() {
String bic8 = "BIC8CODE";
DistinguishedName dn =
new DistinguishedName.Builder(bic8).withBranch("").build();
assertEquals("o=bic8code,o=swift", dn.toString());
}

@Test
void testParseBIC() {
String dn1 = "cn=John Doe,o=swift,ou=users,dc=example,dc=com";
assertNull(DistinguishedName.parseBIC(dn1));

dn1 = "o=bic8code,o=swift";
assertEquals("BIC8CODE", DistinguishedName.parseBIC(dn1));

dn1 = "ou=bar,o=bic8code,o=swift";
assertEquals("BIC8CODE", DistinguishedName.parseBIC(dn1));

assertNull(DistinguishedName.parseBIC(null));

assertNull(DistinguishedName.parseBIC(""));

assertNull(DistinguishedName.parseBIC("XXX"));
}
}