Class Rdn

Class Rdn

public class Rdn
extends Object
implements Serializable, Comparable<Object>

RFC 2253에 명시된 distinguished name의 구성 요소인 상대 distinguished name(relative distinguished name, RDN)을 나타내는 클래스예요. RDN의 예로는 "OU=Sales+CN=J.Smith"가 있어요. 이 예에서 RDN은 여러 속성 타입/값 쌍으로 구성돼요. RDN은 LdapName의 클래스 설명에 나와 있는 대로 파싱돼요. Rdn 클래스는 RDN을 속성 타입/값 매핑으로 나타내는데, Attributes를 사용해 볼 수 있어요. 또한 RDN이 단일 타입/값 쌍(전형적인 사용에서 그렇게 나타나는)으로 구성될 때 타입과 값을 쉽게 가져올 수 있게 하는 편의 메서드를 포함해요. 또한 형식이 없는(unformatted) 속성 값을 이스케이프하고, RFC2253에 정의된 이스케이프 구문에 따라 형식화된 값을 이스케이프 해제하는 헬퍼 메서드도 포함해요. 속성 값을 Object로 취하거나 반환하는 메서드의 경우, 값은 (이스케이프되지 않은 형태의) String 또는 바이트 배열이에요. Rdn은 모든 유효한 RDN을 올바르게 파싱하지만, 유효하지 않은 RDN을 파싱할 때 가능한 모든 위반을 감지하려고 하지는 않아요. 유효하지 않은 RDN을 받아들이는 데 "관대(generous)"해요. 이름의 "유효성"은 궁극적으로 LDAP 서버에 공급될 때 결정돼요. LDAP 서버는 스키마 정보·상호운용성 고려 사항 같은 요인에 기반해 이름을 받아들이거나 거부할 수 있어요. 다음 코드 예시는 타입과 값을 인자로 받는 생성자로 Rdn을 구성하는 방법을 보여줘요.

Rdn rdn = new Rdn("cn", "Juicy, Fruit");
System.out.println(rdn.toString());

마지막 줄은 cn=Juicy\, Fruit을 출력할 거예요. unescapeValue() 메서드는 이스케이프된 쉼표를 이스케이프 해제해 원래 값 "Juicy, Fruit"를 얻는 데 사용될 수 있어요. escapeValue() 메서드는 쉼표 앞에 이스케이프를 다시 추가해요. 이 클래스는 다음 코드 예시처럼 RFC 2253에 정의된 RDN의 문자열 표현으로 인스턴스화될 수 있어요.

Rdn rdn = new Rdn("cn=Juicy\\, Fruit");
System.out.println(rdn.toString());

마지막 줄은 cn=Juicy\, Fruit을 출력할 거예요. Rdn 인스턴스에 대한 동시 다중 스레드 읽기 전용 접근은 동기화할 필요가 없어요. 달리 명시되지 않는 한, 이 클래스의 생성자나 메서드에 null 인자를 전달하면 NullPointerException이 던져질 거예요.

Rdn

public Rdn(Attributes attrSet)
    throws InvalidNameException

주어진 속성 집합에서 Rdn을 구성해요. Attributes 참조. 문자열 속성 값은 RFC 2253 형식의 RDN 문자열로 해석되지 않아요. 즉 값은 문자 그대로(파싱되지 않고) 사용되며 이스케이프되지 않은 것으로 가정돼요.

  • Parameters: attrSet - 타입/값 매핑을 담은, null이 아니고 비어 있지 않은 속성들
  • Throws: InvalidNameException - attrSet의 내용으로 유효한 RDN을 구성할 수 없을 때

Rdn

public Rdn(String rdnString)
    throws InvalidNameException

주어진 문자열에서 Rdn을 구성해요. 이 생성자는 RFC 2253에 정의되고 LdapName의 클래스 설명에 설명된 규칙에 따라 형식화된 문자열을 받아요.

  • Parameters: rdnString - null이 아니고 비어 있지 않은 RFC2253 형식 문자열
  • Throws: InvalidNameException - rdnString을 파싱하는 동안 구문 오류가 발생했을 때

Rdn

public Rdn(Rdn rdn)

주어진 rdn에서 Rdn을 구성해요. rdn의 내용은 새로 만들어진 Rdn에 그대로 복사돼요.

  • Parameters: rdn - 복사할, null이 아닌 Rdn

Rdn

public Rdn(String type,
 Object value)
    throws InvalidNameException

주어진 속성 타입과 값에서 Rdn을 구성해요. 문자열 속성 값은 RFC 2253 형식의 RDN 문자열로 해석되지 않아요. 즉 값은 문자 그대로(파싱되지 않고) 사용되며 이스케이프되지 않은 것으로 가정돼요.

  • Parameters: type - null이 아니고 비어 있지 않은 문자열 속성 타입
  • Throws: InvalidNameException - type/value로 유효한 RDN을 구성할 수 없을 때
  • See Also: toString()

getValue

public Object getValue()

이 Rdn의 값 중 하나를 가져와요. RDN이 단일 타입·값 매핑(일반적인 RDN 사용법)을 포함할 때 값을 얻기 위한 편의 메서드예요. 다중 값을 가진 RDN의 경우, 이 메서드는 getType() 메서드가 반환한 타입에 해당하는 값을 반환해요.

  • Returns: null이 아닌 속성 값

getType

public String getType()

이 Rdn의 타입 중 하나를 가져와요. RDN이 단일 타입·값 매핑(일반적인 RDN 사용법)을 포함할 때 타입을 얻기 위한 편의 메서드예요. 다중 값을 가진 RDN의 경우, 타입/값 쌍에는 정의된 특정 순서가 없어요. 그 경우 이 메서드는 타입/값 쌍 중 하나의 타입을 반환해요. getValue() 메서드는 이 메서드가 반환한 타입에 해당하는 값을 반환해요.

  • Returns: null이 아닌 속성 타입

toString

public String toString()

RFC 2253에 정의되고 LdapName의 클래스 설명에 설명된 형식으로 표현된 문자열로 이 Rdn을 반환해요.

  • Overrides: Object 클래스의 toString
  • Returns: Rdn의 문자열 표현

compareTo

public int compareTo(Object obj)

이 Rdn을 지정된 Object와 순서로 비교해요. 이 Rdn이 주어진 Object보다 작으면 음의 정수, 같으면 0, 크면 양의 정수를 반환해요. obj가 null이거나 Rdn의 인스턴스가 아니면 ClassCastException이 던져져요. RDN들의 속성 타입·값 쌍은 서로 정렬되어 사전순으로 비교돼요. 다중 값을 가진 Rdn(예: "ou=Sales+cn=Bob")의 구성 요소 순서는 중요하지 않아요.

  • Specified by: Comparable<Object> 인터페이스의 compareTo
  • Parameters: obj - 비교할, null이 아닌 객체
  • Returns: 이 Rdn이 주어진 Object보다 작으면 음의 정수, 같으면 0, 크면 양의 정수
  • Throws: ClassCastException - obj가 null이거나 Rdn이 아닐 때

equals

public boolean equals(Object obj)

지정된 Object를 이 Rdn과 동등성으로 비교해요. 주어진 객체도 Rdn이고 두 Rdn이 같은 속성 타입·값 매핑을 나타내면 true를 반환해요. 다중 값을 가진 Rdn(예: "ou=Sales+cn=Bob")의 구성 요소 순서는 중요하지 않아요. 타입·값 동등성 일치는 다음과 같이 수행돼요:

  • 타입은 대소문자를 무시하고 동등성으로 비교돼요.
  • 인용·이스케이프·UTF8-헥스 인코딩이 다르지만 동등하게 사용된 문자열 값은 동등한 것으로 간주돼요.
  • 비교 중에 값의 대소문자는 무시돼요.

obj가 null이거나 Rdn의 인스턴스가 아니면 false를 반환해요.

  • Overrides: Object 클래스의 equals
  • Parameters: obj - 이 Rdn과 동등성으로 비교될 객체
  • Returns: 지정된 객체가 이 Rdn과 동등하면 true
  • See Also: hashCode()

hashCode

public int hashCode()

이 RDN의 해시 코드를 반환해요. 동등한(equals 메서드에 따르면) 두 RDN은 같은 해시 코드를 가질 거예요.

  • Overrides: Object 클래스의 hashCode
  • Returns: 이 Rdn의 해시 코드를 나타내는 int
  • See Also: equals(java.lang.Object)

toAttributes

public Attributes toAttributes()

이 Rdn에 포함된 타입/값 매핑의 Attributes 뷰를 가져와요.

  • Returns: 이 Rdn의 타입/값 매핑을 담은, null이 아닌 속성들

size

public int size()

이 Rdn의 속성 타입/값 쌍 수를 가져와요.

  • Returns: 이 Rdn의, 음이 아닌 타입/값 쌍 수

escapeValue

public static String escapeValue(Object val)

속성의 값이 주어졌을 때 RFC 2253에 지정된 규칙에 따라 이스케이프된 문자열을 반환해요. 예를 들어 val이 "Sue, Grabbit and Runn"이면 이 메서드가 반환하는 이스케이프된 값은 "Sue\, Grabbit and Runn"이에요. 문자열 값은 String으로, 바이너리 값은 바이트 배열로 표현돼요.

  • Parameters: val - 이스케이프할, null이 아닌 객체
  • Returns: 이스케이프된 문자열 값
  • Throws: ClassCastException - val이 String도 바이트 배열도 아닐 때

unescapeValue

public static Object unescapeValue(String val)

RFC 2253에 지정된 규칙에 따라 형식화된 속성 값 문자열이 주어졌을 때 형식이 없는 값을 반환해요. 이스케이프와 인용이 제거되고, 헥스 인코딩된 UTF-8이 동등한 UTF-16 문자로 변환돼요. 문자열 값은 String으로, 바이너리 값은 바이트 배열로 반환해요. 합법적 값과 불법 값은 RFC 2253에 정의돼 있어요. 이 메서드는 값을 받아들이는 데 관대하며 모든 불법 값을 잡아내지는 않아요. 따라서 불법 값을 전달해도 반드시 IllegalArgumentException을 촉발하지는 않을 수 있어요.

  • Parameters: val - 이스케이프를 해제할, null이 아닌 문자열
  • Returns: 이스케이프 해제된 값
  • Throws: IllegalArgumentException - 불법 값이 제공되었을 때