/* -*- 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.1 (the "License"); you may not use this file * except in compliance with the License. You may obtain a copy of * the License at http://www.mozilla.org/NPL/ * * Software distributed under the License is distributed on an "AS * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or * implied. See the License for the specific language governing * rights and limitations under the License. * * The Original Code is mozilla.org code. * * The Initial Developer of the Original Code is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): */ package netscape.ldap; import java.util.*; /** * The definition of a matching rule use in the schema. * RFC 2252, Lightweight Directory Access Protocol (v3): * Attribute Syntax Definitions covers the types of information * that need to be specified in the definition of a matching rule use. * According to the RFC, the description of a matching rule use can * include the following information: *

* *

*

* * When you construct an LDAPMatchingRuleUseSchema object, you can * specify these types of information as arguments to the constructor or * in the MatchingRuleUseDescription format specified in RFC 2252. * When an LDAP client searches an LDAP server for the schema, the server * returns schema information as an object with values in this * format. *

* * You can get the name, OID, and description of this matching rule use * definition by using the getName, getOID, and * getDescription methods inherited from the abstract class * LDAPSchemaElement. Custom qualifiers are * accessed with getQualifier and getQualifierNames * from LDAPSchemaElement. *

* * To add or remove this matching rule definition from the * schema, use the add and remove * methods, which this class inherits from the LDAPSchemaElement * abstract class. *

* RFC 2252 defines MatchingRuleUseDescription follows: *

*

 * Values of the matchingRuleUse list the attributes which are suitable
 * for use with an extensible matching rule.
 *
 *    MatchingRuleUseDescription = "(" whsp
 *        numericoid whsp  ; MatchingRule identifier
 *        [ "NAME" qdescrs ]
 *        [ "DESC" qdstring ]
 *        [ "OBSOLETE" ]
 *       "APPLIES" oids    ; AttributeType identifiers
 *    whsp ")"
 * 
*

* * @version 1.0 * @see netscape.ldap.LDAPSchemaElement * @see netscape.ldap.LDAPMatchingRuleSchema **/ public class LDAPMatchingRuleUseSchema extends LDAPAttributeSchema { /** * Constructs a matching rule use definition, using the specified * information. * @param name name of the matching rule * @param oid object identifier (OID) of the matching rule * in dotted-decimal format (for example, "1.2.3.4") * @param description description of the matching rule * @param attributes array of the OIDs of the attributes for which * the matching rule is applicable */ public LDAPMatchingRuleUseSchema( String name, String oid, String description, String[] attributes ) { if ( (oid == null) || (oid.trim().length() < 1) ) { throw new IllegalArgumentException( "OID required" ); } this.name = name; this.oid = oid; this.description = description; attrName = "matchingruleuse"; this.attributes = new String[attributes.length]; for( int i = 0; i < attributes.length; i++ ) { this.attributes[i] = attributes[i]; } } /** * Constructs a matching rule use definition based on descriptions in * the MatchingRuleUseDescription format. For information on this format, * (see RFC 2252, Lightweight Directory Access Protocol (v3): * Attribute Syntax Definitions. This is the format that LDAP servers * and clients use to exchange schema information. For example, when * you search an LDAP server for its schema, the server returns an entry * with attributes that include "matchingrule" and "matchingruleuse". * The values of these attributes are matching rule descriptions * in this format. *

* * @param use definition of the use of the matching rule in the * MatchingRuleUseDescription format */ public LDAPMatchingRuleUseSchema( String use ) { attrName = "matchingruleuse"; parseValue( use ); Vector v = (Vector)properties.get( "APPLIES" ); if ( v != null ) { attributes = new String[v.size()]; v.copyInto( attributes ); v.removeAllElements(); } } /** * Gets the list of the OIDs of the attribute types which can be used * with the matching rule. * @return array of the OIDs of the attribute types which can be used * with the matching rule. */ public String[] getApplicableAttributes() { return attributes; } /** * Gets the matching rule use definition in the string representation * of the MatchingRuleUseDescription data type defined in X.501 (see * RFC 2252, Lightweight Directory Access Protocol * (v3): Attribute Syntax Definitions * for a description of these formats). * This is the format that LDAP servers and clients use to exchange * schema information. (For example, when * you search an LDAP server for its schema, the server returns an entry * with the attributes "matchingrules" and "matchingruleuse". The * values of these attributes are matching rule description and * matching rule use description in these formats.) *

* * @return a string in a format that can be used as the value of * the matchingruleuse attribute (which describes the use of * a matching rule in the schema) of a subschema object */ public String getValue() { String s = getValuePrefix(); if ( (attributes != null) && (attributes.length > 0) ) { s += "APPLIES ( "; for( int i = 0; i < attributes.length; i++ ) { if ( i > 0 ) s += " $ "; s += attributes[i]; } s += " ) "; } s += ')'; return s; } /** * Gets the definition of the matching rule use in a user friendly format. * This is the format that the matching rule use definition uses when * you print the matching rule or the schema. * @return definition of the matching rule in a user friendly format. */ public String toString() { String s = "Name: " + name + "; OID: " + oid; s += "; Description: " + description; if ( attributes != null ) { s += "; Applies to: "; for( int i = 0; i < attributes.length; i++ ) { if ( i > 0 ) s += ", "; s += attributes[i]; } } s += getQualifierString( EXPLICIT ); return s; } // Qualifiers tracked explicitly static final String[] EXPLICIT = { OBSOLETE }; private String[] attributes = null; }