Class LdapName

Class LdapName

public class LdapName
extends Object
implements Name

RFC 2253에 명시된 distinguished name을 나타내는 클래스예요. distinguished name(DN)은 상대 distinguished name(relative distinguished name, RDN)이라 불리는 구성 요소의 정렬된 목록으로 구성돼요. DN 구문의 세부 내용은 RFC 2253에 설명돼 있어요. 이 클래스는 RFC 2253에서 발견되는 몇 가지 모호성을 다음과 같이 해결해요:

  • RFC 2253은 "공백(whitespace)"이라는 용어를 정의하지 않고 남겨 둬요. 대신 ASCII 공백 문자 0x20(" ")이 사용돼요. ',', ';', '=', '+' 양쪽에 공백이 허용돼요. 그런 공백은 받아들여지지만 이 코드로 생성되지는 않으며, 이름을 비교할 때 무시돼요.
  • '=' 또는 선두가 아닌 '#' 문자(이스케이프되지 않은)를 포함하는 AttributeValue 문자열이 허용돼요.
  • LdapName에 전달되거나 그로부터 반환되는 문자열 이름은 전체 유니코드 문자 집합을 사용해요. 또한 각 옥텟이 "\\B4" 같은 세 자 하위 문자열로 표현되는 UTF-8로 인코딩된 문자를 포함할 수 있어요. 그러나 각 옥텟이 문자열의 단일 문자로 표현되는 UTF-8로 인코딩된 문자는 포함할 수 없어요: 그 의미가 모호해질 것이기 때문이에요.

LdapName은 모든 유효한 이름을 올바르게 파싱하지만, 유효하지 않은 이름을 파싱할 때 가능한 모든 위반을 감지하려고 하지는 않아요. 유효하지 않은 이름을 받아들이는 데 "관대(generous)"해요. 이름의 "유효성"은 궁극적으로 LDAP 서버에 공급될 때 결정돼요. LDAP 서버는 스키마 정보·상호운용성 고려 사항 같은 요인에 기반해 이름을 받아들이거나 거부할 수 있어요. 이름이 동등성으로 검사될 때 속성 타입, 바이너리·문자열 값 모두 대소문자를 구분하지 않아요. 인용·이스케이프·UTF8-헥스 인코딩이 다르지만 동등하게 사용된 문자열 값은 동등한 것으로 간주돼요. 다중 값을 가진 RDN(예: "ou=Sales+cn=Bob")의 구성 요소 순서는 중요하지 않아요.

LDAP 이름의 구성 요소, 즉 RDN에는 번호가 매겨져요. n개의 RDN을 가진 LDAP 이름의 인덱스 범위는 0부터 n-1까지예요. 이 범위는 [0,n)으로 쓸 수 있어요. 가장 오른쪽 RDN이 인덱스 0에 있고, 가장 왼쪽 RDN이 인덱스 n-1에 있어요. 예를 들어 distinguished name "CN=Steve Kille, O=Isode Limited, C=GB"는 0부터 2까지의 다음 시퀀스로 번호가 매겨져요: {C=GB, O=Isode Limited, CN=Steve Kille}. 빈 LDAP 이름은 빈 RDN 목록으로 표현돼요. LdapName 인스턴스에 대한 동시 다중 스레드 읽기 전용 접근은 동기화할 필요가 없어요. 달리 명시되지 않는 한, 이 클래스의 생성자나 메서드에 null 인자를 전달하면 NullPointerException이 던져질 거예요.

LdapName

public LdapName(String name)
         throws InvalidNameException

주어진 distinguished name에서 LDAP 이름을 생성해요.

  • Parameters: name - RFC 2253에 정의된 규칙에 따라 형식화된, null이 아닌 distinguished name
  • Throws: InvalidNameException - 구문 위반이 감지되었을 때
  • See Also: Rdn.escapeValue(Object value)

LdapName

public LdapName(List<Rdn> rdns)

파싱된 RDN 구성 요소가 주어졌을 때 LDAP 이름을 생성해요. 목록에서 RDN의 인덱싱은 클래스 설명에 설명된 RDN의 번호 매기기를 따르지 않아요.

  • Parameters: rdns - 이 LDAP 이름을 구성하는, null이 아닌 Rdn 목록

size

public int size()

이 LDAP 이름의 구성 요소 수를 가져와요.

  • Specified by: Name 인터페이스의 size
  • Returns: 이 LDAP 이름의, 음이 아닌 구성 요소 수

isEmpty

public boolean isEmpty()

이 LDAP 이름이 빈 이름인지 결정해요. 빈 이름은 구성 요소가 0개인 이름이에요.

  • Specified by: Name 인터페이스의 isEmpty
  • Returns: 이 LDAP 이름이 비어 있으면 true, 그렇지 않으면 false

getAll

public Enumeration<String> getAll()

이 이름의 구성 요소를 문자열의 열거로 가져와요. 이 이름에 대한 갱신이 이 열거에 미치는 영향은 정의되지 않아요. 이름의 구성 요소가 0개이면 빈(null이 아닌) 열거가 반환돼요. 열거가 반환하는 구성 요소의 순서는 클래스 설명에 설명된 대로 구성 요소가 번호 매겨진 순서와 같아요.

  • Specified by: Name 인터페이스의 getAll
  • Returns: 이 LDAP 이름의 구성 요소들의, null이 아닌 열거. 열거의 각 요소는 String 클래스예요

get

public String get(int posn)

이 LDAP 이름의 구성 요소를 문자열로 가져와요.

  • Specified by: Name 인터페이스의 get
  • Parameters: posn - 가져올 구성 요소의 0 기반 인덱스. 범위는 [0, size())여야 해요
  • Returns: 인덱스 posn의, null이 아닌 구성 요소
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

getRdn

public Rdn getRdn(int posn)

이 LDAP 이름의 RDN을 Rdn으로 가져와요.

  • Parameters: posn - 가져올 RDN의 0 기반 인덱스. 범위는 [0, size())여야 해요
  • Returns: 인덱스 posn의, null이 아닌 RDN
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

getPrefix

public Name getPrefix(int posn)

구성 요소가 이 LDAP 이름의 구성 요소의 접두사로 구성된 이름을 만들어요. 이 이름에 대한 이후의 변경은 반환된 이름에 영향을 주지 않고 그 반대도 마찬가지예요.

  • Specified by: Name 인터페이스의 getPrefix
  • Parameters: posn - 멈출 구성 요소의 0 기반 인덱스. 범위는 [0, size()]여야 해요
  • Returns: [0, posn) 범위의 인덱스에 있는 구성 요소들로 구성된 LdapName 인스턴스. posn이 0이면 빈 LDAP 이름이 반환돼요
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

getSuffix

public Name getSuffix(int posn)

구성 요소가 이 LDAP 이름의 구성 요소의 접미사로 구성된 이름을 만들어요. 이 이름에 대한 이후의 변경은 반환된 이름에 영향을 주지 않고 그 반대도 마찬가지예요.

  • Specified by: Name 인터페이스의 getSuffix
  • Parameters: posn - 시작할 구성 요소의 0 기반 인덱스. 범위는 [0, size()]여야 해요
  • Returns: [posn, size()) 범위의 인덱스에 있는 구성 요소들로 구성된 LdapName 인스턴스. posn이 size()와 같으면 빈 LDAP 이름이 반환돼요
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

startsWith

public boolean startsWith(Name n)

이 LDAP 이름이 지정된 LDAP 이름 접두사로 시작하는지 결정해요. n이 getPrefix(n.size())와 같으면 — 다시 말해 이 LDAP 이름이 'n'으로 시작하면 — 접두사예요. n이 null이거나 클래스 설명에 설명된 대로 RFC2253 형식의 이름이 아니면 false를 반환해요.

  • Specified by: Name 인터페이스의 startsWith
  • Parameters: n - 확인할 LDAP 이름
  • Returns: n이 이 LDAP 이름의 접두사이면 true, 그렇지 않으면 false
  • See Also: getPrefix(int posn)

startsWith

public boolean startsWith(List<Rdn> rdns)

지정된 RDN 시퀀스가 이 LDAP 이름의 접두사를 형성하는지 결정해요. 이 LdapName이 rdns만큼 이상 길고, [0, rdns.size()) 범위의 모든 위치 p에 대해 구성 요소 getRdn(p)rdns.get(p)와 일치하면 true를 반환해요. 그렇지 않으면 false를 반환해요. rdns가 null이면 false를 반환해요.

  • Parameters: rdns - 확인할 Rdn 시퀀스
  • Returns: rdns가 이 LDAP 이름의 접두사를 형성하면 true, 그렇지 않으면 false

endsWith

public boolean endsWith(Name n)

이 LDAP 이름이 지정된 LDAP 이름 접미사로 끝나는지 결정해요. n이 getSuffix(size()-n.size())와 같으면 — 다시 말해 이 LDAP 이름이 'n'으로 끝나면 — 접미사예요. n이 null이거나 클래스 설명에 설명된 대로 RFC2253 형식의 이름이 아니면 false를 반환해요.

  • Specified by: Name 인터페이스의 endsWith
  • Parameters: n - 확인할 LDAP 이름
  • Returns: n이 이 이름의 접미사이면 true, 그렇지 않으면 false
  • See Also: getSuffix(int posn)

endsWith

public boolean endsWith(List<Rdn> rdns)

지정된 RDN 시퀀스가 이 LDAP 이름의 접미사를 형성하는지 결정해요. 이 LdapName이 rdns만큼 이상 길고, [size() - rdns.size(), size()) 범위의 모든 위치 p에 대해 구성 요소 getRdn(p)rdns.get(p)와 일치하면 true를 반환해요. 그렇지 않으면 false를 반환해요. rdns가 null이면 false를 반환해요.

  • Parameters: rdns - 확인할 Rdn 시퀀스
  • Returns: rdns가 이 LDAP 이름의 접미사를 형성하면 true, 그렇지 않으면 false

addAll

public Name addAll(Name suffix)
            throws InvalidNameException

이름의 구성 요소를 — 순서대로 — 이 이름의 끝에 추가해요.

  • Specified by: Name 인터페이스의 addAll
  • Parameters: suffix - 추가할, null이 아닌 구성 요소들
  • Returns: 갱신된 이름(새 인스턴스가 아님)
  • Throws: InvalidNameException - suffix가 유효한 LDAP 이름이 아니거나, 구성 요소를 추가하면 이 LDAP 이름의 구문 규칙을 위반할 때

addAll

public Name addAll(List<Rdn> suffixRdns)

이름의 RDN들을 — 순서대로 — 이 이름의 끝에 추가해요.

  • Parameters: suffixRdns - 추가할, null이 아닌 접미사 Rdn들
  • Returns: 갱신된 이름(새 인스턴스가 아님)

addAll

public Name addAll(int posn,
 Name suffix)
            throws InvalidNameException

이름의 구성 요소를 — 순서대로 — 이 이름의 지정된 위치에 추가해요. 첫 번째 새 구성 요소의 인덱스(있으면) 이상의 이 LDAP 이름의 구성 요소들은 새 구성 요소를 수용하도록 위로(인덱스 0에서 멀어지는 방향) 이동해요.

  • Specified by: Name 인터페이스의 addAll
  • Parameters: posn - 새 구성 요소를 추가할 인덱스. 범위는 [0, size()]여야 해요
  • Returns: 갱신된 이름(새 인스턴스가 아님)
  • Throws: InvalidNameException - suffix가 유효한 LDAP 이름이 아니거나, 구성 요소를 추가하면 이 LDAP 이름의 구문 규칙을 위반할 때

addAll

public Name addAll(int posn,
 List<Rdn> suffixRdns)

이름의 RDN들을 — 순서대로 — 이 이름의 지정된 위치에 추가해요. 첫 번째 새 RDN의 인덱스(있으면) 이상의 이 LDAP 이름의 RDN들은 새 RDN들을 수용하도록 위로(인덱스 0에서 멀어지는 방향) 이동해요.

  • Parameters: posn - 접미사 RDN들을 추가할 인덱스. 범위는 [0, size()]여야 해요
  • Returns: 갱신된 이름(새 인스턴스가 아님)
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

add

public Name add(String comp)
         throws InvalidNameException

이 LDAP 이름의 끝에 단일 구성 요소를 추가해요.

  • Specified by: Name 인터페이스의 add
  • Parameters: comp - 추가할, null이 아닌 구성 요소
  • Returns: 새 인스턴스가 아닌 갱신된 LdapName. null일 수 없음
  • Throws: InvalidNameException - 이름 끝에 comp를 추가하면 이름의 구문을 위반할 때

add

public Name add(Rdn comp)

이 LDAP 이름의 끝에 단일 RDN을 추가해요.

  • Parameters: comp - 추가할, null이 아닌 RDN
  • Returns: 새 인스턴스가 아닌 갱신된 LdapName. null일 수 없음

add

public Name add(int posn,
 String comp)
         throws InvalidNameException

이 LDAP 이름의 지정된 위치에 단일 구성 요소를 추가해요. 새 구성 요소의 인덱스(있으면) 이상의 이 LDAP 이름의 구성 요소들은 새 구성 요소를 수용하도록 위로 한 칸(인덱스 0에서 멀어지는 방향) 이동해요.

  • Specified by: Name 인터페이스의 add
  • Parameters: posn - 새 구성 요소를 추가할 인덱스. 범위는 [0, size()]여야 해요
  • Returns: 새 인스턴스가 아닌 갱신된 LdapName. null일 수 없음
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

add

public Name add(int posn,
 Rdn comp)

이 LDAP 이름의 지정된 위치에 단일 RDN을 추가해요. 새 RDN의 인덱스(있으면) 이상의 이 LDAP 이름의 RDN들은 새 RDN을 수용하도록 위로 한 칸(인덱스 0에서 멀어지는 방향) 이동해요.

  • Parameters: posn - 새 RDN을 추가할 인덱스. 범위는 [0, size()]여야 해요
  • Returns: 새 인스턴스가 아닌 갱신된 LdapName. null일 수 없음
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

remove

public Object remove(int posn)
              throws InvalidNameException

이 LDAP 이름에서 구성 요소를 제거해요. 지정된 위치의 이 이름의 구성 요소가 제거돼요. 이 위치보다 큰 인덱스의 구성 요소들(있으면)은 한 칸 아래로(인덱스 0 쪽으로) 이동해요.

  • Specified by: Name 인터페이스의 remove
  • Parameters: posn - 제거할 구성 요소의 인덱스. 범위는 [0, size())여야 해요
  • Returns: 제거된 구성 요소(문자열)
  • Throws: IndexOutOfBoundsException - posn이 지정된 범위 밖일 때

getRdns

public List<Rdn> getRdns()

상대 distinguished name 목록을 가져와요. 목록의 내용은 수정할 수 없어요(unmodifiable). 반환된 목록에서 RDN의 인덱싱은 클래스 설명에 설명된 RDN의 번호 매기기를 따르지 않아요. 이름의 구성 요소가 0개이면 빈 목록이 반환돼요.

  • Returns: Rdn 클래스의 인스턴스들인 RDN 목록으로서의 이름

clone

public Object clone()

이 이름의 새 복사본을 생성해요. 이 이름의 구성 요소에 대한 이후의 변경은 새 복사본에 영향을 주지 않고 그 반대도 마찬가지예요.

  • Specified by: Name 인터페이스의 clone
  • Overrides: Object 클래스의 clone
  • Returns: 이 LDAP 이름의 복사본
  • See Also: Cloneable

toString

public String toString()

RFC 2253에 정의되고 클래스 설명에 설명된 형식으로 이 LDAP 이름의 문자열 표현을 반환해요. 이름의 구성 요소가 0개이면 빈 문자열이 반환돼요.

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

equals

public boolean equals(Object obj)

두 LDAP 이름이 동등한지 결정해요. obj가 null이거나 LDAP 이름이 아니면 false를 반환해요. 한쪽의 각 RDN이 다른 쪽의 대응하는 RDN과 동등하면 두 LDAP 이름은 동등해요. 이것은 둘 다 같은 수의 RDN을 가지며, 각 RDN의 equals() 검사가 다른 이름의 대응하는 RDN에 대해 true를 반환한다는 것을 의미해요. RDN 동등성의 정의는 Rdn.equals(Object obj)를 참조하세요.

  • Overrides: Object 클래스의 equals
  • Parameters: obj - 비교할, null일 수 있는 객체
  • Returns: obj가 이 LDAP 이름과 동등하면 true, 그렇지 않으면 false
  • See Also: hashCode()

compareTo

public int compareTo(Object obj)

LdapName을 지정된 Object와 순서로 비교해요. 이 Name이 주어진 Object보다 작으면 음의 정수, 같으면 0, 크면 양의 정수를 반환해요. obj가 null이거나 LdapName의 인스턴스가 아니면 ClassCastException이 던져져요. LDAP 이름의 순서는 문자열 비교의 사전순 규칙을 따르는데, 확장으로 이것이 LDAP 이름의 모든 RDN에 적용돼요. 모든 RDN이 지정된 순서로 정렬되어 사전순으로 비교돼요. RDN 비교 규칙은 Rdn.compareTo(Object obj)를 참조하세요. 이 LDAP 이름이 obj보다 사전순으로 작으면 음수가, obj보다 크면 양수가 반환돼요.

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

hashCode

public int hashCode()

이 LDAP 이름의 해시 코드를 계산해요. 해시 코드는 이 이름의 개별 RDN들의 해시 코드의 합이에요.

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