package com.hwlcn.ldap.ldap.sdk;
import java.io.Serializable;
import java.util.HashMap;
import com.hwlcn.core.annotation.NotMutable;
import com.hwlcn.core.annotation.ThreadSafety;
import com.hwlcn.ldap.util.ThreadSafetyLevel;
@NotMutable()
@ThreadSafety(level=ThreadSafetyLevel.COMPLETELY_THREADSAFE)
public final class DereferencePolicy
implements Serializable
{
public static final DereferencePolicy NEVER =
new DereferencePolicy("NEVER", 0);
public static final DereferencePolicy SEARCHING =
new DereferencePolicy("SEARCHING", 1);
public static final DereferencePolicy FINDING =
new DereferencePolicy("FINDING", 2);
public static final DereferencePolicy ALWAYS =
new DereferencePolicy("ALWAYS", 3);
private static final HashMap<Integer,DereferencePolicy> UNDEFINED_POLICIES =
new HashMap<Integer,DereferencePolicy>();
private static final long serialVersionUID = 3722883359911755096L;
private final int intValue;
private final String name;
private DereferencePolicy(final int intValue)
{
this.intValue = intValue;
name = String.valueOf(intValue);
}
private DereferencePolicy(final String name, final int intValue)
{
this.name = name;
this.intValue = intValue;
}
public String getName()
{
return name;
}
public int intValue()
{
return intValue;
}
public static DereferencePolicy valueOf(final int intValue)
{
switch (intValue)
{
case 0:
return NEVER;
case 1:
return SEARCHING;
case 2:
return FINDING;
case 3:
return ALWAYS;
default:
synchronized (UNDEFINED_POLICIES)
{
DereferencePolicy p = UNDEFINED_POLICIES.get(intValue);
if (p == null)
{
p = new DereferencePolicy(intValue);
UNDEFINED_POLICIES.put(intValue, p);
}
return p;
}
}
}
public static DereferencePolicy[] values()
{
return new DereferencePolicy[]
{
NEVER,
SEARCHING,
FINDING,
ALWAYS
};
}
@Override()
public int hashCode()
{
return intValue;
}
@Override()
public boolean equals(final Object o)
{
if (o == null)
{
return false;
}
else if (o == this)
{
return true;
}
else if (o instanceof DereferencePolicy)
{
return (intValue == ((DereferencePolicy) o).intValue);
}
else
{
return false;
}
}
@Override()
public String toString()
{
return name;
}
}