package com.hwlcn.ldap.ldap.sdk.migrate.ldapjdk;
import java.io.Serializable;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Set;
import com.hwlcn.ldap.ldap.sdk.Attribute;
import com.hwlcn.core.annotation.Mutable;
import com.hwlcn.core.annotation.NotExtensible;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
import static com.hwlcn.ldap.util.StaticUtils.*;
@NotExtensible()
@Mutable()
@ThreadSafety(level=ThreadSafetyLevel.NOT_THREADSAFE)
public class LDAPAttribute
implements Serializable
{
private static final long serialVersionUID = 839217229050750570L;
private Attribute attribute;
public LDAPAttribute(final Attribute attr)
{
attribute = attr;
}
public LDAPAttribute(final LDAPAttribute attr)
{
attribute = attr.attribute;
}
public LDAPAttribute(final String attrName)
{
attribute = new Attribute(attrName);
}
public LDAPAttribute(final String attrName, final byte[] attrBytes)
{
attribute = new Attribute(attrName, attrBytes);
}
public LDAPAttribute(final String attrName, final String attrString)
{
attribute = new Attribute(attrName, attrString);
}
public LDAPAttribute(final String attrName, final String[] attrStrings)
{
attribute = new Attribute(attrName, attrStrings);
}
public String getName()
{
return attribute.getName();
}
public String getBaseName()
{
return attribute.getBaseName();
}
public static String getBaseName(final String attrName)
{
return Attribute.getBaseName(attrName);
}
public String[] getSubtypes()
{
final Set<String> optionSet = attribute.getOptions();
if (optionSet.isEmpty())
{
return null;
}
final String[] options = new String[optionSet.size()];
return optionSet.toArray(options);
}
public static String[] getSubtypes(final String attrName)
{
return new LDAPAttribute(attrName).getSubtypes();
}
public String getLangSubtype()
{
for (final String s : attribute.getOptions())
{
final String lowerName = toLowerCase(s);
if (lowerName.startsWith("lang-"))
{
return s;
}
}
return null;
}
public boolean hasSubtype(final String subtype)
{
return attribute.hasOption(subtype);
}
public boolean hasSubtypes(final String[] subtypes)
{
for (final String s : subtypes)
{
if (! attribute.hasOption(s))
{
return false;
}
}
return true;
}
public Enumeration<String> getStringValues()
{
return new IterableEnumeration<String>(
Arrays.asList(attribute.getValues()));
}
public String[] getStringValueArray()
{
return attribute.getValues();
}
public Enumeration<byte[]> getByteValues()
{
return new IterableEnumeration<byte[]>(
Arrays.asList(attribute.getValueByteArrays()));
}
public byte[][] getByteValueArray()
{
return attribute.getValueByteArrays();
}
public void addValue(final String attrString)
{
attribute = Attribute.mergeAttributes(attribute,
new Attribute(attribute.getName(), attrString));
}
public void addValue(final byte[] attrBytes)
{
attribute = Attribute.mergeAttributes(attribute,
new Attribute(attribute.getName(), attrBytes));
}
public void removeValue(final String attrValue)
{
attribute = Attribute.removeValues(attribute,
new Attribute(attribute.getName(), attrValue));
}
public void removeValue(final byte[] attrValue)
{
attribute = Attribute.removeValues(attribute,
new Attribute(attribute.getName(), attrValue));
}
public int size()
{
return attribute.size();
}
public final Attribute toAttribute()
{
return attribute;
}
@Override()
public String toString()
{
return attribute.toString();
}
}