BasicAttributes.java [plain text]
package javax.naming.directory;
import javax.naming.*;
import java.util.*;
public class BasicAttributes implements Attributes
{
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 BasicAttributes))
return false;
BasicAttributes b = (BasicAttributes) obj;
if (ignoreCase != b.ignoreCase
|| attributes.size () != b.attributes.size ())
return false;
for (int i = 0; i < attributes.size (); ++i)
{
if (! attributes.get (i).equals (b.attributes.get (i)))
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;
private transient Vector attributes;
private class BasicAttributesEnumeration implements NamingEnumeration
{
int where = -1;
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 + 1 >= attributes.size ())
throw new NoSuchElementException ("no more elements");
++where;
Attribute at = (Attribute) attributes.get (where);
return id ? (Object) at.getID () : (Object) at;
}
}
}