01: package com.flexive.war.webdav;
02:
03: /*
04: * JBoss, the OpenSource J2EE webOS
05: *
06: * Distributable under LGPL license.
07: * See terms of license at gnu.org.
08: */
09:
10: import javax.naming.Name;
11: import javax.naming.NamingEnumeration;
12: import javax.naming.NamingException;
13: import javax.naming.directory.DirContext;
14: import javax.naming.spi.DirectoryManager;
15: import java.util.Hashtable;
16: import java.util.Iterator;
17: import java.util.NoSuchElementException;
18:
19: /**
20: * An implementation of NamingEnumeration for listing the Bindings
21: * in a context. It accepts an Iterator of DirBindings and transforms
22: * the raw object and attributes into the output object using the
23: * DirectoryManager.getObjectInstance method.
24: *
25: * @author Scott_Stark@displayscape.com
26: * @version $Id: NameBindingIterator.java,v 1.1.24.1 2005/04/06 21:25:10 starksm Exp $
27: * @see DirBinding
28: */
29: public class NameBindingIterator implements NamingEnumeration {
30: private Iterator bindings;
31: private DirContext context;
32:
33: /**
34: * Creates new NameBindingIterator for enumerating a list of Bindings.
35: * This is the name and raw object data/attributes that should be input into
36: * DirectoryManager.getObjectInstance().
37: */
38: public NameBindingIterator(Iterator bindings, DirContext context) {
39: this .bindings = bindings;
40: this .context = context;
41: }
42:
43: public void close() throws NamingException {
44: }
45:
46: public boolean hasMore() throws NamingException {
47: return bindings.hasNext();
48: }
49:
50: public Object next() throws NamingException {
51: DirBinding binding = (DirBinding) bindings.next();
52: Object rawObject = binding.getObject();
53: Name name = new DefaultName(binding.getName());
54: Hashtable env = context.getEnvironment();
55: try {
56: Object instanceObject = DirectoryManager.getObjectInstance(
57: rawObject, name, context, env, binding
58: .getAttributes());
59: binding.setObject(instanceObject);
60: } catch (Exception e) {
61: NamingException ne = new NamingException(
62: "getObjectInstance failed");
63: ne.setRootCause(e);
64: throw ne;
65: }
66: return binding;
67: }
68:
69: public boolean hasMoreElements() {
70: boolean hasMore = false;
71: try {
72: hasMore = hasMore();
73: } catch (NamingException e) {
74: }
75: return hasMore;
76: }
77:
78: public Object nextElement() {
79: Object next = null;
80: try {
81: next = next();
82: } catch (NamingException e) {
83: throw new NoSuchElementException(e.toString());
84: }
85: return next;
86: }
87: }
|