/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ package netscape.ldap.util; import java.util.*; import java.io.*; import java.util.StringTokenizer; /** * Objects of this class represent the components of a distinguished * name (DN). (In some situations, these components are referred to * as relative distinguished names, or RDNs.) For example, the * DN "uid=bjensen, ou=People, o=Airius.com" has three components: * "uid=bjensen", "ou=People", and "o=Airius.com". *

* * Each DN component consists of an attribute type and a value. * For example, in "o=Airius.com", the attribute type is "o" * and the value is "Airius.com". *

* * You can use objects of this class to add components to an * existing DN object. *

* * @version 1.0 * @see netscape.ldap.utils.DN */ public final class RDN { /** * List of RDNs. DN consists of one or more RDNs. */ String m_type = null; String m_value = null; /** * Constructs a new RDN object from the specified * DN component. * @param rdn DN component. */ public RDN(String rdn) { int index = rdn.indexOf("="); // if the rdn doesnt have = or = positions right at the beginning of the rdn if (index <= 0) return; m_type = rdn.substring(0, index).trim(); m_value = rdn.substring(index+1).trim(); } /** * Returns the DN component as the first element in an * array of strings. * @param noType Specify true to ignore the attribute type and * equals sign (for example, "cn=") and return only the value. * @return An array of strings representing the DN component. */ public String[] explodeRDN(boolean noType) { if (m_type == null) return null; String str[] = new String[1]; if (noType) { str[0] = getValue(); } else { str[0] = toString(); } return str; } /** * Returns the attribute type of the DN component. * @return rdn The attribute type of the DN component. */ public String getType() { return m_type; } /** * Returns the value of the DN component. * @return rdn The value of the DN component. */ public String getValue() { return m_value; } /** * Returns the string representation of the DN component. * @return The string representation of the DN component. */ public String toString() { return m_type + "=" + m_value; } /** * Determines if the specified string is an distinguished name component. * @param dn The string that you want to check. * @return true if the string is a distinguished name component. */ public static boolean isRDN(String rdn) { RDN newrdn = new RDN(rdn); return ((newrdn.getType() != null) && (newrdn.getValue() != null)); } /** * Determines if the current DN component is equal to the specified * DN component. * @param rdn The DN component that you want compared against the * current DN component. * @return true if the two DN components are equal. */ public boolean equals(RDN rdn) { return(toString().toUpperCase().equals(rdn.toString().toUpperCase())); } }