mirror of
git://gcc.gnu.org/git/gcc.git
synced 2024-12-26 09:49:08 +08:00
195 lines
4.0 KiB
Java
195 lines
4.0 KiB
Java
|
/* Copyright (C) 2000, 2001 Free Software Foundation
|
||
|
|
||
|
This file is part of libgcj.
|
||
|
|
||
|
This software is copyrighted work licensed under the terms of the
|
||
|
Libgcj License. Please consult the file "LIBGCJ_LICENSE" for
|
||
|
details. */
|
||
|
|
||
|
package javax.naming.directory;
|
||
|
|
||
|
import javax.naming.*;
|
||
|
import java.util.*;
|
||
|
|
||
|
/**
|
||
|
* @author Tom Tromey <tromey@redhat.com>
|
||
|
* @date June 22, 2001
|
||
|
*/
|
||
|
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 ()
|
||
|
{
|
||
|
// Slightly inefficient as we make a garbage Vector here.
|
||
|
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;
|
||
|
|
||
|
// Does order matter?
|
||
|
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;
|
||
|
}
|
||
|
|
||
|
// This is set by the serialization spec.
|
||
|
private boolean ignoreCase;
|
||
|
private transient Vector attributes;
|
||
|
|
||
|
// Used when enumerating.
|
||
|
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;
|
||
|
}
|
||
|
}
|
||
|
}
|