Class ServerSideSortRequestControl

  • All Implemented Interfaces:
    java.io.Serializable

    @NotMutable
    @ThreadSafety(level=COMPLETELY_THREADSAFE)
    public final class ServerSideSortRequestControl
    extends Control
    This class provides an implementation of the server-side sort request control, as defined in RFC 2891. It may be included in a search request to indicate that the server should sort the results before returning them to the client.

    The order in which the entries are to be sorted is specified by one or more SortKey values. Each sort key includes an attribute name and a flag that indicates whether to sort in ascending or descending order. It may also specify a custom matching rule that should be used to specify which logic should be used to perform the sorting.

    If the search is successful, then the search result done message may include the ServerSideSortResponseControl to provide information about the status of the sort processing.

    Example

    The following example demonstrates the use of the server-side sort controls to retrieve users in different sort orders.
     // Perform a search to get all user entries sorted by last name, then by
     // first name, both in ascending order.
     SearchRequest searchRequest = new SearchRequest(
          "ou=People,dc=example,dc=com", SearchScope.SUB,
          Filter.createEqualityFilter("objectClass", "person"));
     searchRequest.addControl(new ServerSideSortRequestControl(
          new SortKey("sn"), new SortKey("givenName")));
     SearchResult lastNameAscendingResult;
     try
     {
       lastNameAscendingResult = connection.search(searchRequest);
       // If we got here, then the search was successful.
     }
     catch (LDAPSearchException lse)
     {
       // The search failed for some reason.
       lastNameAscendingResult = lse.getSearchResult();
       ResultCode resultCode = lse.getResultCode();
       String errorMessageFromServer = lse.getDiagnosticMessage();
     }
    
     // Get the response control and retrieve the result code for the sort
     // processing.
     LDAPTestUtils.assertHasControl(lastNameAscendingResult,
          ServerSideSortResponseControl.SERVER_SIDE_SORT_RESPONSE_OID);
     ServerSideSortResponseControl lastNameAscendingResponseControl =
          ServerSideSortResponseControl.get(lastNameAscendingResult);
     ResultCode lastNameSortResult =
          lastNameAscendingResponseControl.getResultCode();
    
    
     // Perform the same search, but this time request the results to be sorted
     // in descending order by first name, then last name.
     searchRequest.setControls(new ServerSideSortRequestControl(
          new SortKey("givenName", true), new SortKey("sn", true)));
     SearchResult firstNameDescendingResult;
     try
     {
       firstNameDescendingResult = connection.search(searchRequest);
       // If we got here, then the search was successful.
     }
     catch (LDAPSearchException lse)
     {
       // The search failed for some reason.
       firstNameDescendingResult = lse.getSearchResult();
       ResultCode resultCode = lse.getResultCode();
       String errorMessageFromServer = lse.getDiagnosticMessage();
     }
    
     // Get the response control and retrieve the result code for the sort
     // processing.
     LDAPTestUtils.assertHasControl(firstNameDescendingResult,
          ServerSideSortResponseControl.SERVER_SIDE_SORT_RESPONSE_OID);
     ServerSideSortResponseControl firstNameDescendingResponseControl =
          ServerSideSortResponseControl.get(firstNameDescendingResult);
     ResultCode firstNameSortResult =
          firstNameDescendingResponseControl.getResultCode();
     


    Client-Side Sorting

    The UnboundID LDAP SDK for Java provides support for client-side sorting as an alternative to server-side sorting. Client-side sorting may be useful in cases in which the target server does not support the use of the server-side sort control, or when it is desirable to perform the sort processing on the client systems rather than on the directory server systems. See the EntrySorter class for details on performing client-side sorting in the LDAP SDK.
    See Also:
    Serialized Form
    • Constructor Detail

      • ServerSideSortRequestControl

        public ServerSideSortRequestControl​(@NotNull
                                            SortKey... sortKeys)
        Creates a new server-side sort control that will sort the results based on the provided set of sort keys.
        Parameters:
        sortKeys - The set of sort keys to define the desired order in which the results should be returned. It must not be null or empty.
      • ServerSideSortRequestControl

        public ServerSideSortRequestControl​(@NotNull
                                            java.util.List<SortKey> sortKeys)
        Creates a new server-side sort control that will sort the results based on the provided set of sort keys.
        Parameters:
        sortKeys - The set of sort keys to define the desired order in which the results should be returned. It must not be null or empty.
      • ServerSideSortRequestControl

        public ServerSideSortRequestControl​(boolean isCritical,
                                            @NotNull
                                            SortKey... sortKeys)
        Creates a new server-side sort control that will sort the results based on the provided set of sort keys.
        Parameters:
        isCritical - Indicates whether this control should be marked critical.
        sortKeys - The set of sort keys to define the desired order in which the results should be returned. It must not be null or empty.
      • ServerSideSortRequestControl

        public ServerSideSortRequestControl​(boolean isCritical,
                                            @NotNull
                                            java.util.List<SortKey> sortKeys)
        Creates a new server-side sort control that will sort the results based on the provided set of sort keys.
        Parameters:
        isCritical - Indicates whether this control should be marked critical.
        sortKeys - The set of sort keys to define the desired order in which the results should be returned. It must not be null or empty.
      • ServerSideSortRequestControl

        public ServerSideSortRequestControl​(@NotNull
                                            Control control)
                                     throws LDAPException
        Creates a new server-side sort request control which is decoded from the provided generic control.
        Parameters:
        control - The generic control to be decoded as a server-side sort request control.
        Throws:
        LDAPException - If the provided control cannot be decoded as a server-side sort request control.
    • Method Detail

      • getSortKeys

        @NotNull
        public SortKey[] getSortKeys()
        Retrieves the set of sort keys that define the desired order in which the results should be returned.
        Returns:
        The set of sort keys that define the desired order in which the results should be returned.
      • getControlName

        @NotNull
        public java.lang.String getControlName()
        Retrieves the user-friendly name for this control, if available. If no user-friendly name has been defined, then the OID will be returned.
        Overrides:
        getControlName in class Control
        Returns:
        The user-friendly name for this control, or the OID if no user-friendly name is available.
      • toJSONControl

        @NotNull
        public JSONObject toJSONControl()
        Retrieves a representation of this server-side sort request control as a JSON object. The JSON object uses the following fields:
        • oid -- A mandatory string field whose value is the object identifier for this control. For the server-side sort request control, the OID is "1.2.840.113556.1.4.473".
        • control-name -- An optional string field whose value is a human-readable name for this control. This field is only intended for descriptive purposes, and when decoding a control, the oid field should be used to identify the type of control.
        • criticality -- A mandatory Boolean field used to indicate whether this control is considered critical.
        • value-base64 -- An optional string field whose value is a base64-encoded representation of the raw value for this server-side sort request control. Exactly one of the value-base64 and value-json fields must be present.
        • value-json -- An optional JSON object field whose value is a user-friendly representation of the value for this server-side sort request control. Exactly one of the value-base64 and value-json fields must be present, and if the value-json field is used, then it will use the following fields:
          • sort-keys -- A mandatory array field whose values are JSON objects used to specify the requested sort order. Each of the JSON objects with the following fields:
            • attribute-name -- A mandatory string field whose value is the name of the attribute to use for sorting.
            • reverse-order -- A mandatory Boolean field that indicates whether the results should be sorted in descending order rather than ascending.
            • matching-rule-id -- An optional string field whose value is the name or OID of the ordering matching rule to use to perform the sorting.
        Overrides:
        toJSONControl in class Control
        Returns:
        A JSON object that contains a representation of this control.
      • decodeJSONControl

        @NotNull
        public static ServerSideSortRequestControl decodeJSONControl​(@NotNull
                                                                     JSONObject controlObject,
                                                                     boolean strict)
                                                              throws LDAPException
        Attempts to decode the provided object as a JSON representation of a server-side sort request control.
        Parameters:
        controlObject - The JSON object to be decoded. It must not be null.
        strict - Indicates whether to use strict mode when decoding the provided JSON object. If this is true, then this method will throw an exception if the provided JSON object contains any unrecognized fields. If this is false, then unrecognized fields will be ignored.
        Returns:
        The server-side sort request control that was decoded from the provided JSON object.
        Throws:
        LDAPException - If the provided JSON object cannot be parsed as a valid server-side sort request control.
      • toString

        public void toString​(@NotNull
                             java.lang.StringBuilder buffer)
        Appends a string representation of this LDAP control to the provided buffer.
        Overrides:
        toString in class Control
        Parameters:
        buffer - The buffer to which to append the string representation of this buffer.