blob: 3f080fe0ff5a692c24499b324392af39a10f9ddb [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (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.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.api.ldap.codec.api;
import java.util.Set;
import org.apache.directory.api.util.Strings;
import org.apache.mina.util.ConcurrentHashSet;
/**
* An implementation of the BinaryAttributeDetector interface. It's used
* on the client side to detect if an Attribute is HumanRedable.<br/>
* One can inject some new attributes, replace the existing list,
* remove some attributes. <br/>
* We provide a list of Attributes which are known to be binary :
* <ul>
* <li>entryACI</li>
* <li>prescriptiveACI</li>
* <li>subentryACI</li>
* <li>audio</li>
* <li>javaByteCode</li>
* <li>javaClassByteCode</li>
* <li>krb5key</li>
* <li>m-byteCode</li>
* <li>privateKey</li>
* <li>publicKey</li>
* <li>userPKCS12</li>
* <li>userSMIMECertificate</li>
* <li>cACertificate</li>
* <li>userCertificate</li>
* <li>authorityRevocationList</li>
* <li>certificateRevocationList</li>
* <li>deltaRevocationList</li>
* <li>crossCertificatePair</li>
* <li>personalSignature</li>
* <li>photo</li>
* <li>jpegPhoto</li>
* <li>supportedAlgorithms</li>
* </ul>
* <br/>
* In order to reset the detector to get back to those default value, it's enough
* to call the setBinaryAttributes() with null as a parameter.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class DefaultConfigurableBinaryAttributeDetector extends SchemaBinaryAttributeDetector
implements ConfigurableBinaryAttributeDetector
{
/** A set of binary Attribute ID */
private Set<String> binaryAttributes = new ConcurrentHashSet<String>();
/** A list of all the known binary attributes */
public static final String[] DEFAULT_BINARY_ATTRIBUTES = new String[]
{
// Syntax : ACI Item
"entryACI",
"prescriptiveACI",
"subentryACI",
// Syntax : AUDIO
"audio",
// Syntax : Binary
"javaByteCode",
"javaClassByteCode",
"krb5key",
"m-byteCode",
"privateKey",
"publicKey",
"userPKCS12",
"userSMIMECertificate",
// Syntax : Certificate
"cACertificate",
"userCertificate",
// Syntax : Certificate List
"authorityRevocationList",
"certificateRevocationList",
"deltaRevocationList",
// Syntax : Certificate Pair
"crossCertificatePair",
// Syntax : Fax
"personalSignature",
"photo",
// Syntax : JPEG
"jpegPhoto",
// Syntax : Supported Algorithm
"supportedAlgorithms",
// Syntax : Octet String
"javaSerializedData",
"userPassword",
// Active Directory specific attributes see DIRAPI-177
"objectSid",
"objectGUID",
"thumbnailLogo",
"thumbnailPhoto",
"x500uniqueIdentifier"
};
/**
* Creates a new instance of a ConfigurableBinaryAttributeDetector. This will
* load a set of default attribute ID that are known to be binary.
*/
public DefaultConfigurableBinaryAttributeDetector()
{
setBinaryAttributes( DEFAULT_BINARY_ATTRIBUTES );
}
/**
* {@inheritDoc}
*/
public boolean isBinary( String attributeId )
{
boolean isBinary = super.isBinary( attributeId );
if ( isBinary )
{
return true;
}
String attrId = Strings.toLowerCase( attributeId );
return binaryAttributes.contains( attrId );
}
/**
* {@inheritDoc}
*/
public void addBinaryAttribute( String... binaryAttributes )
{
if ( binaryAttributes != null )
{
for ( String binaryAttribute : binaryAttributes )
{
String attrId = Strings.toLowerCase( binaryAttribute );
this.binaryAttributes.add( attrId );
}
}
}
/**
* {@inheritDoc}
*/
public void removeBinaryAttribute( String... binaryAttributes )
{
if ( binaryAttributes != null )
{
for ( String binaryAttribute : binaryAttributes )
{
String attrId = Strings.toLowerCase( binaryAttribute );
this.binaryAttributes.remove( attrId );
}
}
}
/**
* {@inheritDoc}
*/
public void setBinaryAttributes( String... binaryAttributes )
{
this.binaryAttributes.clear();
// Special case for 'null'
if ( binaryAttributes == null )
{
// Reseting to the default list of binary attributes
binaryAttributes = DEFAULT_BINARY_ATTRIBUTES;
}
addBinaryAttribute( binaryAttributes );
}
}