BasicAttributes.java [plain text]
package javax.naming.directory;
import java.util.NoSuchElementException;
import java.util.Vector;
import javax.naming.NamingEnumeration;
import javax.naming.NamingException;
public class BasicAttributes implements Attributes
{
private static final long serialVersionUID = 4980164073184639448L;
public BasicAttributes ()
{
this (false);
}
public BasicAttributes (boolean ignoreCase)
{
this.ignoreCase = ignoreCase;
this.attributes = new Vector ();
}
public BasicAttributes (String attrID, Object val)
{
this (attrID, val, false);
}
public BasicAttributes (String attrID, Object val, boolean ignoreCase)
{
this.ignoreCase = ignoreCase;
attributes = new Vector ();
attributes.add (new BasicAttribute (attrID, val));
}
public Object clone ()
{
BasicAttributes ba = new BasicAttributes (ignoreCase);
ba.attributes = (Vector) attributes.clone ();
return ba;
}
public boolean equals (Object obj)
{
if (! (obj instanceof Attributes))
return false;
Attributes bs = (Attributes) obj;
if (ignoreCase != bs.isCaseIgnored()
|| attributes.size () != bs.size ())
return false;
NamingEnumeration bas = bs.getAll();
while (bas.hasMoreElements())
{
Attribute a = (Attribute) bas.nextElement();
Attribute b = get(a.getID ());
if (! a.equals(b))
return false;
}
return true;
}
public Attribute get (String attrID)
{
for (int i = 0; i < attributes.size (); ++i)
{
Attribute at = (Attribute) attributes.get (i);
if ((ignoreCase && attrID.equalsIgnoreCase (at.getID ()))
|| (! ignoreCase && attrID.equals (at.getID ())))
return at;
}
return null;
}
public NamingEnumeration getAll ()
{
return new BasicAttributesEnumeration (false);
}
public NamingEnumeration getIDs ()
{
return new BasicAttributesEnumeration (true);
}
public int hashCode ()
{
int val = 0;
for (int i = 0; i < attributes.size (); ++i)
val += attributes.get (i).hashCode ();
return val;
}
public boolean isCaseIgnored ()
{
return ignoreCase;
}
public Attribute put (Attribute attr)
{
Attribute r = remove (attr.getID ());
attributes.add (attr);
return r;
}
public Attribute put (String attrID, Object val)
{
return put (new BasicAttribute (attrID, val));
}
public Attribute remove (String attrID)
{
for (int i = 0; i < attributes.size (); ++i)
{
Attribute at = (Attribute) attributes.get (i);
if ((ignoreCase && attrID.equalsIgnoreCase (at.getID ()))
|| (! ignoreCase && attrID.equals (at.getID ())))
{
attributes.remove (i);
return at;
}
}
return null;
}
public int size ()
{
return attributes.size ();
}
public String toString ()
{
String r = "";
for (int i = 0; i < attributes.size (); ++i)
{
if (i > 0)
r += "; ";
r += attributes.get (i).toString ();
}
return r;
}
private boolean ignoreCase;
transient Vector attributes;
private class BasicAttributesEnumeration implements NamingEnumeration
{
int where = 0;
boolean id;
public BasicAttributesEnumeration (boolean id)
{
this.id = id;
}
public void close () throws NamingException
{
}
public boolean hasMore () throws NamingException
{
return hasMoreElements ();
}
public Object next () throws NamingException
{
return nextElement ();
}
public boolean hasMoreElements ()
{
return where < attributes.size ();
}
public Object nextElement () throws NoSuchElementException
{
if (where >= attributes.size ())
throw new NoSuchElementException ("no more elements");
Attribute at = (Attribute) attributes.get (where);
++where;
return id ? (Object) at.getID () : (Object) at;
}
}
}