8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson/*
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Copyright (c) 2005 Sun Microsystems Inc. All Rights Reserved
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * The contents of this file are subject to the terms
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * of the Common Development and Distribution License
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * (the License). You may not use this file except in
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * compliance with the License.
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * You can obtain a copy of the License at
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * https://opensso.dev.java.net/public/CDDLv1.0.html or
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * opensso/legal/CDDLv1.0.txt
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * See the License for the specific language governing
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * permission and limitations under the License.
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac *
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * When distributing Covered Code, include this CDDL
3437829f938dbb44527d91fbbc5f430a1243c5a5JnRouvignac * Header Notice in each file and include the License file
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * at opensso/legal/CDDLv1.0.txt.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * If applicable, add the following below the CDDL Header,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * with the fields enclosed by brackets [] replaced by
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * your own identifying information:
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * "Portions Copyrighted [year] [name of copyright owner]"
05b42f00b813c3dc70cbb80d62089f9cc0f6f549ludovicp *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * $Id: SearchResults.java,v 1.7 2009/01/28 05:34:51 ww203982 Exp $
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Portions Copyrighted 2011-2015 ForgeRock AS.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonpackage com.iplanet.ums;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport com.iplanet.services.ldap.Attr;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport com.iplanet.services.ldap.AttrSet;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport com.iplanet.services.util.I18n;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport com.sun.identity.shared.debug.Debug;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport java.security.Principal;
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suterimport java.util.ArrayList;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport java.util.Collection;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport java.util.Hashtable;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport java.util.List;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport java.util.NoSuchElementException;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.openam.utils.IOUtils;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.Attribute;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.Connection;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.LdapException;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.SearchResultReferenceIOException;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.controls.Control;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.controls.VirtualListViewResponseControl;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldap.responses.SearchResultEntry;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonimport org.forgerock.opendj.ldif.ConnectionEntryReader;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson/**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Represents search results. Each search result is a PersistentObject
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilsonpublic class SearchResults implements java.io.Serializable {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private static Debug debug;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson debug = Debug.getInstance(IUMSConstants.UMS_DEBUG);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private static I18n i18n = I18n.getInstance(IUMSConstants.UMS_PKG);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Attribute name used with Object get( String ). Expected return object is
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Integer getting the content count from the VirtualListResponse control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * returned by server after a search
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public static final String VLVRESPONSE_CONTENT_COUNT = "vlvContentCount";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Attribute name used with Object get( String ). Expected return object is
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Integer getting the index of first position from VirtualListResponse
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * control returned by server after a search
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public static final String VLVRESPONSE_FIRST_POSITION = "vlvFirstPosition";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Attribute name used with Object get( String ). Expected return object is
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Integer getting the result code from from VirtualListResponse control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * returned by server after a search.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public static final String VLVRESPONSE_RESULT_CODE = "vlvResultCode";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Attribute name used with Object get( String ). Expected return object is
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * String getting the context cookie from VirtualListResponse control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * returned by server after a search.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public static final String VLVRESPONSE_CONTEXT = "vlvContext";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static final String EXPECT_VLV_RESPONSE = "expectVlvResponse";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static final String BASE_ID = "baseID";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static final String SEARCH_FILTER = "searchFilter";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static final String SORT_KEYS = "sortKeys";
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson static final String SEARCH_SCOPE = "searchScope";
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift * Constructs SearchResults from <code>ldapSearchResult</code>.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param ldapSearchResult <code>LDAPSearchResults</code> to construct from
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param conn <code>LDAPConnection</code> assosciated with the search
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param dataLayer Data Layer assosciated with the connection.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson protected SearchResults(Connection connection, ConnectionEntryReader ldapSearchResult, Connection conn,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson DataLayer dataLayer) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // TODO: SearchResults is tightly coupled with DataLayer and
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // PersistentObject. That could make it harder to separate them
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // in the future.
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson this.connection = connection;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_ldapSearchResults = ldapSearchResult;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_conn = conn;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_dataLayer = dataLayer;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (debug.messageEnabled()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson debug.message("Constructing SearchResults: " + this
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson + " with connection : " + conn);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Constructs Search Results from <code>ldapSearchResult</code>.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param ldapSearchResult <code>LDAPSearchResults</code> to construct
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * from.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param conn <code>LDAPConnection</code> associated with the search
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson protected SearchResults(Connection connection, ConnectionEntryReader ldapSearchResult, Connection conn) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson this(connection, ldapSearchResult, conn, null);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift * Secret constructor for iterating through the values of an entry.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift * @param attr
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * An attribute containing 0 or more DN values, to be treated as
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * individual results
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson SearchResults(Attr attr) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (attr == null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_attrVals = new String[0];
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } else {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_attrVals = attr.getStringValues();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Checks whether there are entries available.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @return <code>true</code> if there is more to read
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public boolean hasMoreElements() {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson boolean hasGotMoreElements = false;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson try {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson hasGotMoreElements = (m_attrVals != null) ?
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson (m_attrIndex < m_attrVals.length)
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson : m_ldapSearchResults.hasNext();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (hasGotMoreElements) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson readEntry();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (debug.messageEnabled()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (!hasGotMoreElements && m_conn != null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson debug.message("Finishing SearchResults: " + this
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson + " with connection : " + m_conn);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson debug.message("SearchResults: " + this
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson + " releasing connection : " + m_conn);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } catch (LdapException | SearchResultReferenceIOException ignored) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift return hasGotMoreElements;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private void readEntry() throws SearchResultReferenceIOException, LdapException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_ldapSearchResults != null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_ldapSearchResults.isReference()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //Ignoring references
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_ldapSearchResults.readReference();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson currentEntry = m_ldapSearchResults.readEntry();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter * Returns the next entry in the search results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @throws UMSException
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * No more entries in the search results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public PersistentObject next() throws UMSException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // TODO: define detailed exception list (eg. referral, ...)
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson SearchResultEntry ldapEntry;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_attrVals != null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_attrIndex < m_attrVals.length) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String dn = m_attrVals[m_attrIndex++];
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson PersistentObject pO = new PersistentObject();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO.setGuid(new Guid(dn));
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO.setPrincipal(m_principal);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return pO;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } else {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson throw new NoSuchElementException();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if ((ldapEntry = currentEntry) != null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String id = ldapEntry.getName().toString();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson Collection<Attribute> attributes = new ArrayList<>();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson for (Attribute attribute : ldapEntry.getAllAttributes()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson attributes.add(attribute);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson AttrSet attrSet = new AttrSet(attributes);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson Class javaClass = TemplateManager.getTemplateManager()
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson .getJavaClassForEntry(id, attrSet);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson PersistentObject pO = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson try {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO = (PersistentObject) javaClass.newInstance();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } catch (Exception e) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String args[] = new String[1];
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson args[0] = e.toString();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String msg = i18n.getString(
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson IUMSConstants.NEW_INSTANCE_FAILED, args);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson throw new UMSException(msg);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // Make it a live object
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO.setAttrSet(attrSet);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO.setGuid(new Guid(ldapEntry.getName().toString()));
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson pO.setPrincipal(m_principal);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return pO;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift return null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Assert if the search result contains one and only one entry.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @return Entry if and only if there is one single entry
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @throws EntryNotFoundException
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * if there is no entry at all
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public PersistentObject assertOneEntry() throws EntryNotFoundException,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson UMSException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson PersistentObject entry = null;
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter while (hasMoreElements()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson entry = next();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson break;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (entry == null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson throw new EntryNotFoundException();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (hasMoreElements()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson abandon();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // TODO: to be replaced by new exception
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson throw new UMSException(
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson i18n.getString(IUMSConstants.MULTIPLE_ENTRY));
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return entry;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Get search result attributes related to the search operation performed.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param name
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Name of attribute to return, null if attribute is unknown or
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * not found
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @throws UMSException
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * from accessor methods on LDAPVirtualListResponse control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public Object get(String name) throws UMSException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // For non vlv related attributes, get it
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // from the generic hash table
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (!isVLVAttrs(name)) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return m_attrHash == null ? null : m_attrHash.get(name);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // The rest is related to vlv response control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (currentEntry == null)
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson List<Control> ctrls = currentEntry.getControls();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (ctrls == null && expectVlvResponse() == true) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift // Code to deal with response controls not being returned yet. It
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // instructs a small search with vlv ranage that expect one result
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift // to
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // return so that the response is returned. This probe is only
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // launched if EXPECT_VLV_RESPONSE is set for true in SearchResults
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson PersistentObject parent = getParentContainer();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson synchronized (this) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // The following code fragment uses a test control that only
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // asks
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // one result to return. This is done so that the response
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // can be queried for the vlvContentCount. This is a search
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter // probe to
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // get the vlvCount
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String[] sortAttrNames = { "objectclass" };
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson SortKey[] sortKeys = (SortKey[]) get(SearchResults.SORT_KEYS);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String filter = (String) get(SearchResults.SEARCH_FILTER);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson Integer scopeVal = (Integer) get(SearchResults.SEARCH_SCOPE);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson int scope = scopeVal == null ? SearchControl.SCOPE_SUB
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson : scopeVal.intValue();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson SearchControl testControl = new SearchControl();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testControl.setVLVRange(1, 0, 0);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (sortKeys == null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testControl.setSortKeys(sortAttrNames);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } else {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testControl.setSortKeys(sortKeys);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testControl.setSearchScope(scope);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson SearchResults testResults = parent.search(filter,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson sortAttrNames, testControl);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson while (testResults.hasMoreElements()) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // This while loop is required to
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // enumerate the result set to get the response control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testResults.next();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // After all the hazzle, now the response should be in after the
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // search probe, use the probe's search results to get the vlv
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // related attribute(s). Set the internal flag not to launch
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // the probe again in subsequent get.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson testResults.set(SearchResults.EXPECT_VLV_RESPONSE, Boolean.FALSE);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return testResults.get(name);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // the control can be null
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (ctrls == null)
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson VirtualListViewResponseControl vlvResponse = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // Find the VLV response control recorded in SearchResults
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson for (Control control : ctrls) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (VirtualListViewResponseControl.OID.equals(control.getOID())) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson vlvResponse = (VirtualListViewResponseControl) control;
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // Check on the attribute to return and
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // return the value from the response control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // Currently only expose the VirtualListResponse control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // returned after a search operation
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (vlvResponse != null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (name.equalsIgnoreCase(VLVRESPONSE_CONTENT_COUNT)) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return vlvResponse.getContentCount();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } else if (name.equalsIgnoreCase(VLVRESPONSE_FIRST_POSITION)) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return vlvResponse.getTargetPosition();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } else if (name.equalsIgnoreCase(VLVRESPONSE_RESULT_CODE)) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return vlvResponse.getResult().intValue();
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter } else if (name.equalsIgnoreCase(VLVRESPONSE_CONTEXT)) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return vlvResponse.getValue().toString();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // For all other unknown attribute names,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // just return a null object
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Abandons a current search operation, notifying the server not to send
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * additional search results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @throws UMSException
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * from abandoning a search operation from LDAP
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @supported.api
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson public void abandon() throws UMSException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //Nothing to do
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson IOUtils.closeIfNotNull(connection, m_ldapSearchResults);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Sets the principal with which to associate search results.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param principal Authenticated principal.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson protected void setPrincipal(Principal principal) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_principal = principal;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Set attribute internal to search result. This set function is explicitly
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * coded for package scope.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param name
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Name of attribute to set.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @param value
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Value of attribute to set
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson void set(String name, Object value) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_attrHash == null) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson synchronized (this) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (m_attrHash == null) {
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift m_attrHash = new Hashtable();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson m_attrHash.put(name, value);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Check if this search result expects a VLV response control
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @return <code>true</code> if search result expects a VLV response
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * control and <code>false</code> otherwise
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private boolean expectVlvResponse() {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson Boolean expected = Boolean.FALSE;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter try {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson expected = (Boolean) get(EXPECT_VLV_RESPONSE);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } catch (Exception e) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return expected == null ? false : expected.booleanValue();
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Gets the original container that the search result is originated from
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @return PersistentObject The parent container object.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * @throws UMSException
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * If an exception occurs.
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private PersistentObject getParentContainer() throws UMSException {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson String parentID = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson PersistentObject parent = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson try {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson parentID = (String) get(BASE_ID);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson Guid parentGuid = new Guid(parentID);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson parent = new PersistentObject(m_principal, parentGuid);
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson } catch (UMSException e) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson throw new UMSException(e.getMessage());
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return parent;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /**
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Check if attribute name is related to vlv response attributes
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private boolean isVLVAttrs(String name) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson for (int i = 0; i < vlvAttrNames.length; i++) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson if (name.equalsIgnoreCase(vlvAttrNames[i])) {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return true;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson return false;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson /*
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * Iterator iterator() { return new Iterator() { public boolean hasNext() {
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * return SearchResults.this.hasMoreElements(); }
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * public Object next() { PersistentObject po = null; try { po =
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * SearchResults.this.next(); } catch ( Exception ignored) { } return po; }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift *
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson * public void remove() { throw new UnsupportedOperationException(); } }; }
987a50dfe113ed235d28716ff080b59e8873655cmatthew_swift */
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private SearchResultEntry currentEntry = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private Connection connection;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private ConnectionEntryReader m_ldapSearchResults = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private Connection m_conn = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private Principal m_principal = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
53247d28ba99538f841a13ea2cde01c3faa3ef36kenneth_suter private Hashtable m_attrHash = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private static String[] vlvAttrNames = { VLVRESPONSE_CONTENT_COUNT,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson VLVRESPONSE_FIRST_POSITION, VLVRESPONSE_RESULT_CODE,
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson VLVRESPONSE_CONTEXT };
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson // These are only used for the tricky constructor with SearchResults(Attr)
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson //
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private String[] m_attrVals = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private int m_attrIndex = 0;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson private DataLayer m_dataLayer = null;
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson}
8748aa9ebbff51bd67265f644fc1ae8bf0efb737neil_a_wilson