basicattribute.java

来自「gcc3.2.1源代码」· Java 代码 · 共 299 行

JAVA
299
字号
/* Copyright (C) 2000, 2001 Free Software Foundation   This file is part of libgcj.This software is copyrighted work licensed under the terms of theLibgcj License.  Please consult the file "LIBGCJ_LICENSE" fordetails.  */package javax.naming.directory;import javax.naming.*;import java.util.*;/** * @author Tom Tromey <tromey@redhat.com> * @date June 20, 2001 */public class BasicAttribute implements Attribute{  /** The ID of this attribute.  */  protected String attrID;  /** True if this attribute's values are ordered.  */  protected boolean ordered;  /** Values for this attribute.  */  protected transient Vector values;  // Used by cloning.  private BasicAttribute ()  {  }  public BasicAttribute (String id)  {    this (id, false);  }  public BasicAttribute (String id, boolean ordered)  {    attrID = id;    this.ordered = ordered;    values = new Vector ();  }  public BasicAttribute (String id, Object value)  {    this (id, value, false);  }  public BasicAttribute (String id, Object value, boolean ordered)  {    attrID = id;    this.ordered = ordered;    values = new Vector ();    values.add (value);  }  public void add (int index, Object val)  {    if (! ordered && contains (val))      throw new IllegalStateException ("value already in attribute");    values.add (index, val);  }  public boolean add (Object val)  {    if (! ordered && contains (val))      throw new IllegalStateException ("value already in attribute");    return values.add (val);  }  public void clear ()  {    values.clear ();  }  public Object clone ()  {    BasicAttribute c = new BasicAttribute ();    c.attrID = attrID;    c.ordered = ordered;    c.values = (Vector) values.clone ();    return c;  }  public boolean contains (Object val)  {    for (int i = 0; i < values.size (); ++i)      {	if (equals (val, values.get (i)))	  return true;      }    return false;  }  public boolean equals (Object obj)  {    if (! (obj instanceof BasicAttribute))      return false;    BasicAttribute b = (BasicAttribute) obj;    if (ordered != b.ordered	|| ! attrID.equals (b.attrID)	|| values.size () != b.values.size ())      return false;    for (int i = 0; i < values.size (); ++i)      {	boolean ok = false;	if (ordered)	  ok = equals (values.get (i), b.values.get (i));	else	  {	    for (int j = 0; j < b.values.size (); ++j)	      {		if (equals (values.get (i), b.values.get (j)))		  {		    ok = true;		    break;		  }	      }	  }	if (! ok)	  return false;      }    return true;  }  public Object get ()  {    if (values.size () == 0)      throw new NoSuchElementException ("no values");    return get (0);  }  public Object get (int index)  {    return values.get (index);  }  public NamingEnumeration getAll ()  {    return new BasicAttributeEnumeration ();  }  public DirContext getAttributeDefinition ()    throws OperationNotSupportedException, NamingException  {    throw new OperationNotSupportedException ();  }  public DirContext getAttributeSyntaxDefinition ()    throws OperationNotSupportedException, NamingException  {    throw new OperationNotSupportedException ();  }  public String getID ()  {    return attrID;  }  public int hashCode ()  {    int val = attrID.hashCode ();    for (int i = 0; i < values.size (); ++i)      {	Object o = values.get (i);	if (o == null)	  {	    // Nothing.	  }	else if (o instanceof Object[])	  {	    Object[] a = (Object[]) o;	    for (int j = 0; j < a.length; ++j)	      val += a[j].hashCode ();	  }	else	  val += o.hashCode ();      }    return val;  }  public boolean isOrdered ()  {    return ordered;  }  public Object remove (int index)  {    return values.remove (index);  }  public boolean remove (Object val)  {    for (int i = 0; i < values.size (); ++i)      {	if (equals (val, values.get (i)))	  {	    values.remove (i);	    return true;	  }      }    return false;  }  public Object set (int index, Object val)  {    if (! ordered && contains (val))      throw new IllegalStateException ("value already in attribute");    return values.set (index, val);  }  public int size ()  {    return values.size ();  }  public String toString ()  {    String r = attrID;    for (int i = 0; i < values.size (); ++i)      r += ";" + values.get (i).toString ();    return r;  }  // This is used for testing equality of two Objects according to our  // local rules.  private boolean equals (Object one, Object two)  {    if (one == null)      return two == null;    if (one instanceof Object[])      {	if (! (two instanceof Object[]))	  return false;	Object[] aone = (Object[]) one;	Object[] atwo = (Object[]) two;	if (aone.length != atwo.length)	  return false;	for (int i = 0; i < aone.length; ++i)	  {	    if (! aone[i].equals (atwo[i]))	      return false;	  }	return true;      }    return one.equals (two);  }  // Used when enumerating this attribute.  private class BasicAttributeEnumeration implements NamingEnumeration  {    int where = -1;    public BasicAttributeEnumeration ()    {    }    public void close () throws NamingException    {    }    public boolean hasMore () throws NamingException    {      return hasMoreElements ();    }    public Object next () throws NamingException    {      return nextElement ();    }    public boolean hasMoreElements ()    {      return where < values.size ();    }    public Object nextElement () throws NoSuchElementException    {      if (where + 1 >= values.size ())	throw new NoSuchElementException ("no more elements");      ++where;      return values.get (where);    }  }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?