costin 2002/11/05 11:03:14 Modified: naming/src/org/apache/naming/core NamingContextEnumeration.java Added: naming/src/org/apache/naming/core ServerBinding.java Log: Delay the evaluation of getClassName and getValue until it is needed ( in most cases it won't ). Also allow any kind of enumerations ( including Strings ) to be used. Revision Changes Path 1.3 +49 -24 jakarta-tomcat-connectors/naming/src/org/apache/naming/core/NamingContextEnumeration.java Index: NamingContextEnumeration.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-connectors/naming/src/org/apache/naming/core/NamingContextEnumeration.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- NamingContextEnumeration.java 8 Oct 2002 18:46:42 -0000 1.2 +++ NamingContextEnumeration.java 5 Nov 2002 19:03:14 -0000 1.3 @@ -63,43 +63,50 @@ import java.util.Hashtable; import java.util.Vector; import java.util.Enumeration; -import javax.naming.NamingException; -import javax.naming.NamingEnumeration; -import javax.naming.NameClassPair; +import javax.naming.*; /** * Naming enumeration implementation. * + * TODO: implement 'throw exceptions on close' part of the spec. + * TODO: implement recycling ( for example on close ) + * * @author Remy Maucherat - * @version $Revision$ $Date$ + * @author Costin Manolache */ - public class NamingContextEnumeration implements NamingEnumeration { - - - // ----------------------------------------------------------- Constructors - - - public NamingContextEnumeration(Vector entries) { - enum = entries.elements(); - } - - - public NamingContextEnumeration(Enumeration enum) { + /** Constructor. + * + * @param enum base enumeration. Elements can be Strings, NameClassPair, + * Bindings or Entries, we'll provide the wrapping if needed. For String + * the Class and value will be lazy-loaded. + * + * @param ctx. The context where this enum belongs. Used to lazy-eval + * the class and value + * + * @param bindings If true, we'll wrap things as Binding ( true for + * listBindings, false for list ). + */ + public NamingContextEnumeration( Enumeration enum, Context ctx, + boolean bindings ) + { + this.ctx = ctx; + this.bindings=bindings; this.enum = enum; } - // -------------------------------------------------------------- Variables - + // return bindings instead of NameClassPair + protected boolean bindings; /** * Underlying enumeration. */ protected Enumeration enum; + protected Context ctx; // --------------------------------------------------------- Public Methods @@ -108,7 +115,8 @@ * Retrieves the next element in the enumeration. */ public Object next() - throws NamingException { + throws NamingException + { return nextElement(); } @@ -117,7 +125,8 @@ * Determines whether there are any more elements in the enumeration. */ public boolean hasMore() - throws NamingException { + throws NamingException + { return enum.hasMoreElements(); } @@ -126,7 +135,9 @@ * Closes this enumeration. */ public void close() - throws NamingException { + throws NamingException + { + // XXX all exceptions should be thrown on close ( AFAIK ) } @@ -134,10 +145,24 @@ return enum.hasMoreElements(); } - public Object nextElement() { - NamingEntry entry = (NamingEntry) enum.nextElement(); - return new NameClassPair(entry.name, entry.value.getClass().getName()); + Object next=enum.nextElement(); + if( next instanceof NamingEntry ) { + NamingEntry entry = (NamingEntry) next; + return new ServerBinding(entry.name, ctx, true); + } else if( next instanceof NameClassPair ) { + NameClassPair ncp=(NameClassPair)next; + if( bindings ) + return new ServerBinding(ncp.getName(), ctx, true); + return next; + } else if( next instanceof Binding ) { + return next; + } else if( next instanceof String ) { + String name=(String)next; + return new ServerBinding( name, ctx, true ); + } + return null; } + } 1.1 jakarta-tomcat-connectors/naming/src/org/apache/naming/core/ServerBinding.java Index: ServerBinding.java =================================================================== package org.apache.naming.core; import javax.naming.*; /** This is used for both NameClass and Binding. * Lazy eval - so the extra methods in Binding don't affect us. * For most contexts we'll deal getting the class name is as expensive * as getting the object. In addition most operations will only use the name. * */ public class ServerBinding extends Binding { public ServerBinding( String name, Context ctx, boolean isRelative ) { super( name, null ); this.ctx=ctx; this.name = name; this.isRel=isRelative; } public void recycle() { } private Context ctx; private Object boundObj; private String name; private boolean isRel = true; private String className; private void lookup() { try { boundObj=ctx.lookup(name); } catch( NamingException ex ) { ex.printStackTrace(); } } public String getClassName() { if( className!=null ) return className; if( boundObj==null ) lookup(); if( boundObj!=null ) className=boundObj.getClass().getName(); return className; } public String getName() { return name; } public void setName(String name) { this.name = name; } public void setClassName(String name) { this.className = name; } public boolean isRelative() { return isRel; } public void setRelative(boolean r) { isRel = r; } /** * Generates the string representation of this name/class pair. * The string representation consists of the name and class name separated * by a colon (':'). * The contents of this string is useful * for debugging and is not meant to be interpreted programmatically. * * @return The string representation of this name/class pair. */ public String toString() { return (isRelative() ? "" : "(not relative)") + getName() + ": " + getClassName(); } public Object getObject() { if( boundObj!=null ) return boundObj; lookup(); return boundObj; } public void setObject(Object obj) { boundObj = obj; } }
-- To unsubscribe, e-mail: <mailto:tomcat-dev-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:tomcat-dev-help@;jakarta.apache.org>