| 1 7 package winstone.jndi; 8 9 import java.util.Arrays ; 10 import java.util.Enumeration ; 11 import java.util.Hashtable ; 12 import java.util.Vector ; 13 14 import javax.naming.Binding ; 15 import javax.naming.CompositeName ; 16 import javax.naming.Context ; 17 import javax.naming.NamingEnumeration ; 18 import javax.naming.NamingException ; 19 import javax.naming.spi.NamingManager ; 20 21 27 public class WinstoneBindingEnumeration implements NamingEnumeration { 28 private Enumeration nameEnumeration; 29 private Hashtable bindings; 30 private Hashtable contextEnvironment; 31 private Context context; 32 33 40 public WinstoneBindingEnumeration(Hashtable bindings, 41 Hashtable environment, Context context) { 42 Object keys[] = bindings.keySet().toArray(); 43 Arrays.sort(keys); 44 Vector nameList = new Vector (Arrays.asList(keys)); 45 this.nameEnumeration = nameList.elements(); 46 this.bindings = (Hashtable ) bindings.clone(); 47 this.context = context; 48 this.contextEnvironment = environment; 49 } 50 51 public Object next() throws NamingException { 52 if (this.nameEnumeration == null) 53 throw new NamingException (ContainerJNDIManager.JNDI_RESOURCES 54 .getString("WinstoneBindingEnumeration.AlreadyClosed")); 55 56 String name = (String ) this.nameEnumeration.nextElement(); 57 Object value = this.bindings.get(name); 58 try { 59 value = NamingManager.getObjectInstance(value, new CompositeName () 60 .add(name), this.context, this.contextEnvironment); 61 } catch (Throwable err) { 62 NamingException errNaming = new NamingException ( 63 ContainerJNDIManager.JNDI_RESOURCES 64 .getString("WinstoneBindingEnumeration.FailedToGetInstance")); 65 errNaming.setRootCause(err); 66 throw errNaming; 67 } 68 return new Binding (name, value); 69 } 70 71 public boolean hasMore() throws NamingException { 72 if (this.nameEnumeration == null) 73 throw new NamingException (ContainerJNDIManager.JNDI_RESOURCES 74 .getString("WinstoneBindingEnumeration.AlreadyClosed")); 75 else 76 return this.nameEnumeration.hasMoreElements(); 77 } 78 79 public void close() throws NamingException { 80 this.nameEnumeration = null; 81 } 82 83 public boolean hasMoreElements() { 84 try { 85 return hasMore(); 86 } catch (NamingException err) { 87 return false; 88 } 89 } 90 91 public Object nextElement() { 92 try { 93 return next(); 94 } catch (NamingException err) { 95 return null; 96 } 97 } 98 } 99 | Popular Tags |