mirror of https://github.com/OpenIdentityPlatform/OpenDJ.git

Jean-Noel Rouvignac
15.39.2014 d24466b6b4f1052f07fe4565b1f6a922c637cb79
Converted opendj3 code to use SearchRequest like API

JmxClientConnection.java:
Replaced the 3 processSearch() methods with a single processSearch(SearchRequest).
3 files modified
119 ■■■■ changed files
opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java 14 ●●●● patch | view | raw | blame | history
opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java 97 ●●●● patch | view | raw | blame | history
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java 8 ●●●● patch | view | raw | blame | history
opendj3-server-dev/src/server/org/opends/server/config/JMXMBean.java
@@ -64,7 +64,6 @@
import org.opends.server.protocols.internal.SearchRequest;
import org.opends.server.protocols.jmx.Credential;
import org.opends.server.protocols.jmx.JmxClientConnection;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.types.AttributeType;
import org.opends.server.types.DN;
import org.opends.server.types.DirectoryException;
@@ -481,14 +480,12 @@
      // Perform the Ldap operation for
      //  - ACI Check
      //  - Loggin purpose
      SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT);
      InternalSearchOperation op=null;
      if (clientConnection instanceof JmxClientConnection) {
        op = ((JmxClientConnection)clientConnection).processSearch(
            ByteString.valueOf(configEntryDN.toString()),
                SearchScope.BASE_OBJECT, LDAPFilter.objectClassPresent());
        op = ((JmxClientConnection) clientConnection).processSearch(request);
      }
      else if (clientConnection instanceof InternalClientConnection) {
        SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT);
        op = ((InternalClientConnection) clientConnection).processSearch(request);
      }
      // BUG : op may be null
@@ -546,7 +543,6 @@
  @Override
  public AttributeList getAttributes(String[] attributes)
    {
    //
    // Get the jmx Client connection
    ClientConnection clientConnection = getClientConnection();
@@ -559,14 +555,12 @@
    // Perform the Ldap operation for
    //  - ACI Check
    //  - Loggin purpose
    SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT);
    InternalSearchOperation op = null;
    if (clientConnection instanceof JmxClientConnection) {
      op = ((JmxClientConnection)clientConnection).processSearch(
          ByteString.valueOf(configEntryDN.toString()),
              SearchScope.BASE_OBJECT, LDAPFilter.objectClassPresent());
      op = ((JmxClientConnection) clientConnection).processSearch(request);
    }
    else if (clientConnection instanceof InternalClientConnection) {
      SearchRequest request = newSearchRequest(configEntryDN, SearchScope.BASE_OBJECT);
      op = ((InternalClientConnection) clientConnection).processSearch(request);
    }
opendj3-server-dev/src/server/org/opends/server/protocols/jmx/JmxClientConnection.java
@@ -39,16 +39,13 @@
import org.forgerock.i18n.LocalizableMessageBuilder;
import org.forgerock.i18n.slf4j.LocalizedLogger;
import org.forgerock.opendj.ldap.ByteString;
import org.forgerock.opendj.ldap.DereferenceAliasesPolicy;
import org.forgerock.opendj.ldap.ResultCode;
import org.forgerock.opendj.ldap.SearchScope;
import org.opends.server.api.ClientConnection;
import org.opends.server.api.ConnectionHandler;
import org.opends.server.core.*;
import org.opends.server.core.networkgroups.NetworkGroup;
import org.opends.server.protocols.internal.InternalSearchListener;
import org.opends.server.protocols.internal.InternalSearchOperation;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.protocols.internal.SearchRequest;
import org.opends.server.types.*;
import static org.opends.messages.ProtocolMessages.*;
@@ -765,55 +762,21 @@
  /**
   * Processes an Jmx search operation with the provided information.
   * It will not dereference any aliases, will not request a size or time limit,
   * and will retrieve all user attributes.
   *
   * @param  rawBaseDN  The base DN for the search.
   * @param  scope      The scope for the search.
   * @param  filter     The filter for the search.
   *
   * @param  request      The search request.
   * @return  A reference to the internal search operation that was processed
   *          and contains information about the result of the processing as
   *          well as lists of the matching entries and search references.
   */
  public InternalSearchOperation processSearch(ByteString rawBaseDN,
                                      SearchScope scope, LDAPFilter filter)
  public InternalSearchOperation processSearch(SearchRequest request)
  {
    return processSearch(rawBaseDN, scope,
                         DereferenceAliasesPolicy.NEVER, 0, 0, false,
                         filter, new LinkedHashSet<String>(0));
  }
  /**
   * Processes an Jmx search operation with the provided information.
   *
   * @param  rawBaseDN    The base DN for the search.
   * @param  scope        The scope for the search.
   * @param  derefPolicy  The alias dereferencing policy for the search.
   * @param  sizeLimit    The size limit for the search.
   * @param  timeLimit    The time limit for the search.
   * @param  typesOnly    The typesOnly flag for the search.
   * @param  filter       The filter for the search.
   * @param  attributes   The set of requested attributes for the search.
   *
   * @return  A reference to the internal search operation that was processed
   *          and contains information about the result of the processing as
   *          well as lists of the matching entries and search references.
   */
  public InternalSearchOperation processSearch(ByteString rawBaseDN,
                                      SearchScope scope,
                                      DereferenceAliasesPolicy derefPolicy,
                                      int sizeLimit, int timeLimit,
                                      boolean typesOnly, LDAPFilter filter,
                                      LinkedHashSet<String> attributes)
  {
    InternalSearchOperation searchOperation =
         new InternalSearchOperation(this, nextOperationID(), nextMessageID(),
                                     new ArrayList<Control>(0), rawBaseDN,
                                     scope, derefPolicy, sizeLimit, timeLimit,
                                     typesOnly, filter, attributes, null);
    InternalSearchOperation searchOperation = new InternalSearchOperation(
        this, nextOperationID(), nextMessageID(),
        request.getControls(),
        request.getName(), request.getScope(),
        request.getDereferenceAliasesPolicy(),
        request.getSizeLimit(), request.getTimeLimit(), request.isTypesOnly(),
        request.getFilter(), request.getAttributes(), null);
    if (! hasPrivilege(Privilege.JMX_READ, null))
    {
@@ -828,46 +791,6 @@
    return searchOperation;
  }
  /**
   * Processes an Jmx search operation with the provided information.
   *
   * @param  rawBaseDN       The base DN for the search.
   * @param  scope           The scope for the search.
   * @param  derefPolicy     The alias dereferencing policy for the search.
   * @param  sizeLimit       The size limit for the search.
   * @param  timeLimit       The time limit for the search.
   * @param  typesOnly       The typesOnly flag for the search.
   * @param  filter          The filter for the search.
   * @param  attributes      The set of requested attributes for the search.
   * @param  searchListener  The internal search listener that should be used to
   *                         handle the matching entries and references.
   *
   * @return  A reference to the internal search operation that was processed
   *          and contains information about the result of the processing.
   */
  public InternalSearchOperation processSearch(ByteString rawBaseDN,
                                      SearchScope scope,
                                      DereferenceAliasesPolicy derefPolicy,
                                      int sizeLimit, int timeLimit,
                                      boolean typesOnly, LDAPFilter filter,
                                      LinkedHashSet<String> attributes,
                                      InternalSearchListener searchListener)
  {
    InternalSearchOperation searchOperation =
         new InternalSearchOperation(this, nextOperationID(), nextMessageID(),
                                     new ArrayList<Control>(0), rawBaseDN,
                                     scope, derefPolicy, sizeLimit, timeLimit,
                                     typesOnly, filter, attributes,
                                     searchListener);
    searchOperation.run();
    return searchOperation;
  }
  /**
   * Sends the provided search result entry to the client.
   *
opendj3-server-dev/tests/unit-tests-testng/src/server/org/opends/server/protocols/jmx/JmxPrivilegeTestCase.java
@@ -59,7 +59,7 @@
import org.opends.server.core.SchemaConfigManager;
import org.opends.server.protocols.internal.InternalClientConnection;
import org.opends.server.protocols.internal.InternalSearchOperation;
import org.opends.server.protocols.ldap.LDAPFilter;
import org.opends.server.protocols.internal.SearchRequest;
import org.opends.server.types.*;
import org.testng.annotations.AfterClass;
import org.testng.annotations.BeforeClass;
@@ -68,6 +68,7 @@
import static org.opends.messages.ProtocolMessages.*;
import static org.opends.server.protocols.internal.InternalClientConnection.*;
import static org.opends.server.protocols.internal.Requests.*;
import static org.testng.Assert.*;
/**
@@ -481,9 +482,8 @@
  {
    assertEquals(conn.hasPrivilege(Privilege.JMX_READ, null), hasPrivilege);
    ByteString dn = ByteString.valueOf("cn=config");
    LDAPFilter filter = LDAPFilter.objectClassPresent();
    InternalSearchOperation searchOperation = conn.processSearch(dn, SearchScope.BASE_OBJECT, filter);
    SearchRequest request = newSearchRequest(DN.valueOf("cn=config"), SearchScope.BASE_OBJECT);
    InternalSearchOperation searchOperation = conn.processSearch(request);
    if (hasPrivilege)
    {
      assertEquals(searchOperation.getResultCode(), ResultCode.SUCCESS);