1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131
|
/******************************************************************************
* The MIT License
* Copyright (c) 2003 Novell Inc. www.novell.com
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the Software), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in
* all copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED AS IS, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*******************************************************************************/
//
// Novell.Directory.Ldap.Controls.LdapSortControl.cs
//
// Author:
// Sunil Kumar (Sunilk@novell.com)
//
// (C) 2003 Novell, Inc (http://www.novell.com)
//
using System;
using Novell.Directory.Ldap;
using Novell.Directory.Ldap.Asn1;
namespace Novell.Directory.Ldap.Controls
{
/// <summary> LdapSortControl is a Server Control to specify how search results are
/// to be sorted by the server. If a server does not support
/// sorting in general or for a particular query, the results will be
/// returned unsorted, along with a control indicating why they were not
/// sorted (or that sort controls are not supported). If the control was
/// marked "critical", the whole search operation will fail if the sort
/// control is not supported.
/// </summary>
public class LdapSortControl:LdapControl
{
private static int ORDERING_RULE = 0;
private static int REVERSE_ORDER = 1;
/// <summary> The requestOID of the sort control</summary>
private static System.String requestOID = "1.2.840.113556.1.4.473";
/// <summary> The responseOID of the sort control</summary>
private static System.String responseOID = "1.2.840.113556.1.4.474";
/// <summary> Constructs a sort control with a single key.
///
/// </summary>
/// <param name="key"> A sort key object, which specifies attribute,
/// order, and optional matching rule.
///
/// </param>
/// <param name="critical True">if the search operation is to fail if the
/// server does not support this control.
/// </param>
public LdapSortControl(LdapSortKey key, bool critical):this(new LdapSortKey[]{key}, critical)
{
return ;
}
/// <summary> Constructs a sort control with multiple sort keys.
///
/// </summary>
/// <param name="keys An">array of sort key objects, to be processed in
/// order.
///
/// </param>
/// <param name="critical True">if the search operation is to fail if the
/// server does not support this control.
/// </param>
public LdapSortControl(LdapSortKey[] keys, bool critical):base(requestOID, critical, null)
{
Asn1SequenceOf sortKeyList = new Asn1SequenceOf();
for (int i = 0; i < keys.Length; i++)
{
Asn1Sequence key = new Asn1Sequence();
key.add(new Asn1OctetString(keys[i].Key));
if ((System.Object) keys[i].MatchRule != null)
{
key.add(new Asn1Tagged(new Asn1Identifier(Asn1Identifier.CONTEXT, false, ORDERING_RULE), new Asn1OctetString(keys[i].MatchRule), false));
}
if (keys[i].Reverse == true)
{
// only add if true
key.add(new Asn1Tagged(new Asn1Identifier(Asn1Identifier.CONTEXT, false, REVERSE_ORDER), new Asn1Boolean(true), false));
}
sortKeyList.add(key);
}
setValue(sortKeyList.getEncoding(new LBEREncoder()));
return ;
}
static LdapSortControl()
{
/*
* This is where we register the control responses
*/
{
/*
* Register the Server Sort Control class which is returned by the
* server in response to a Sort Request
*/
try
{
LdapControl.register(responseOID, System.Type.GetType("Novell.Directory.Ldap.Controls.LdapSortResponse"));
}
catch (System.Exception e)
{
}
}
}
}
}
|