Skip to content

Commit

Permalink
CU-86ayb02z5_Crete-model-for-DistinguishedName
Browse files Browse the repository at this point in the history
  • Loading branch information
ptorres-prowide committed Nov 15, 2023
1 parent 0c722ec commit 582736a
Show file tree
Hide file tree
Showing 4 changed files with 160 additions and 6 deletions.
3 changes: 3 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
# Prowide Core - CHANGELOG

#### 9.3.20 - SNAPSHOT
* Added DistinguishedName with Builder in order to encapsulate the BIC branch name logic

#### 9.3.19 - October 2023
* Added default methods for sender, receiver, and identifier extraction to the MessageExtractionStrategy
* Added JSON to the `FileFormat` enumeration
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"));
}
}

0 comments on commit 582736a

Please sign in to comment.