package com.hwlcn.ldap.ldap.sdk.controls;
import java.util.Collection;
import java.util.EnumSet;
import java.util.Set;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
public enum PersistentSearchChangeType
{
ADD("add", 1),
DELETE("delete", 2),
MODIFY("modify", 4),
MODIFY_DN("moddn", 8);
private final int value;
private final String name;
private PersistentSearchChangeType(final String name, final int value)
{
this.name = name;
this.value = value;
}
public String getName()
{
return name;
}
public int intValue()
{
return value;
}
public static PersistentSearchChangeType valueOf(final int intValue)
{
switch (intValue)
{
case 1:
return ADD;
case 2:
return DELETE;
case 4:
return MODIFY;
case 8:
return MODIFY_DN;
default:
return null;
}
}
public static Set<PersistentSearchChangeType> allChangeTypes()
{
return EnumSet.allOf(PersistentSearchChangeType.class);
}
public static int encodeChangeTypes(
final PersistentSearchChangeType... changeTypes)
{
int changeTypesValue = 0;
for (final PersistentSearchChangeType changeType : changeTypes)
{
changeTypesValue |= changeType.intValue();
}
return changeTypesValue;
}
public static int encodeChangeTypes(
final Collection<PersistentSearchChangeType> changeTypes)
{
int changeTypesValue = 0;
for (final PersistentSearchChangeType changeType : changeTypes)
{
changeTypesValue |= changeType.intValue();
}
return changeTypesValue;
}
public static Set<PersistentSearchChangeType> decodeChangeTypes(
final int changeTypes)
{
final EnumSet<PersistentSearchChangeType> ctSet =
EnumSet.noneOf(PersistentSearchChangeType.class);
if ((changeTypes & ADD.intValue()) == ADD.intValue())
{
ctSet.add(ADD);
}
if ((changeTypes & DELETE.intValue()) == DELETE.intValue())
{
ctSet.add(DELETE);
}
if ((changeTypes & MODIFY.intValue()) == MODIFY.intValue())
{
ctSet.add(MODIFY);
}
if ((changeTypes & MODIFY_DN.intValue()) == MODIFY_DN.intValue())
{
ctSet.add(MODIFY_DN);
}
return ctSet;
}
@Override()
public String toString()
{
return name;
}
}