| | |
| | | * CDDL HEADER END |
| | | * |
| | | * |
| | | * Copyright 2008 Sun Microsystems, Inc. |
| | | * Copyright 2008-2009 Sun Microsystems, Inc. |
| | | */ |
| | | |
| | | package org.opends.guitools.controlpanel.util; |
| | | |
| | | import java.util.HashSet; |
| | | import java.util.Iterator; |
| | | import java.util.Set; |
| | | |
| | | import javax.naming.NamingEnumeration; |
| | |
| | | import org.opends.guitools.controlpanel.event.EntryReadErrorEvent; |
| | | import org.opends.guitools.controlpanel.event.EntryReadEvent; |
| | | import org.opends.guitools.controlpanel.event.EntryReadListener; |
| | | import org.opends.server.types.AttributeType; |
| | | import org.opends.server.types.Schema; |
| | | |
| | | /** |
| | | * A class that reads an entry on the background. This is used in the LDAP |
| | |
| | | { |
| | | private String dn; |
| | | private InitialLdapContext ctx; |
| | | private Schema schema; |
| | | private Set<EntryReadListener> listeners = new HashSet<EntryReadListener>(); |
| | | private boolean isOver; |
| | | |
| | |
| | | * Constructor of the entry reader. |
| | | * @param dn the DN of the entry. |
| | | * @param ctx the connection to the server. |
| | | * @param schema the schema of the server. |
| | | */ |
| | | public LDAPEntryReader(String dn, InitialLdapContext ctx, Schema schema) |
| | | public LDAPEntryReader(String dn, InitialLdapContext ctx) |
| | | { |
| | | this.dn = dn; |
| | | this.ctx = ctx; |
| | | this.schema = schema; |
| | | } |
| | | |
| | | /** |
| | |
| | | { |
| | | SearchControls controls = new SearchControls(); |
| | | controls.setCountLimit(1); |
| | | Set<String> operational = getAllOperationalAttributes(); |
| | | |
| | | String[] attrs = new String[operational.size()+1]; |
| | | Iterator<String> it = operational.iterator(); |
| | | int i = 0; |
| | | while (it.hasNext()) |
| | | { |
| | | attrs[i] = it.next(); |
| | | i++; |
| | | } |
| | | attrs[attrs.length - 1] = "*"; |
| | | String[] attrs = {"*", "+"}; |
| | | controls.setReturningAttributes(attrs); |
| | | controls.setSearchScope(SearchControls.OBJECT_SCOPE); |
| | | final String filter = "(|(objectclass=*)(objectclass=ldapsubentry))"; |
| | | |
| | | NamingEnumeration en = ctx.search(Utilities.getJNDIName(dn), filter, |
| | | controls); |
| | | NamingEnumeration<SearchResult> en = |
| | | ctx.search(Utilities.getJNDIName(dn), filter, controls); |
| | | |
| | | SearchResult sr = (SearchResult)en.next(); |
| | | SearchResult sr = en.next(); |
| | | |
| | | return new CustomSearchResult(sr, dn); |
| | | } |
| | |
| | | { |
| | | listeners.remove(listener); |
| | | } |
| | | |
| | | private Set<String> getAllOperationalAttributes() |
| | | { |
| | | HashSet<String> attrs = new HashSet<String>(); |
| | | // Do a best effort if schema could not be retrieved when creating |
| | | // this object. |
| | | if (schema != null) |
| | | { |
| | | for (AttributeType attr : schema.getAttributeTypes().values()) |
| | | { |
| | | if (attr.isOperational()) |
| | | { |
| | | attrs.add(attr.getNameOrOID()); |
| | | } |
| | | } |
| | | } |
| | | return attrs; |
| | | } |
| | | } |