| | |
| | | |
| | | OrderingMatchingRule orderingRule = null; |
| | | boolean ascending = true; |
| | | |
| | | while(reader.hasNextElement()) |
| | | if(reader.hasNextElement() && |
| | | reader.peekType() == TYPE_ORDERING_RULE_ID) |
| | | { |
| | | switch (reader.peekType()) |
| | | String orderingRuleID = |
| | | toLowerCase(reader.readOctetStringAsString()); |
| | | orderingRule = |
| | | DirectoryServer.getOrderingMatchingRule(orderingRuleID); |
| | | if (orderingRule == null) |
| | | { |
| | | case TYPE_ORDERING_RULE_ID: |
| | | String orderingRuleID = |
| | | toLowerCase(reader.readOctetStringAsString()); |
| | | orderingRule = |
| | | DirectoryServer.getOrderingMatchingRule(orderingRuleID); |
| | | if (orderingRule == null) |
| | | { |
| | | Message message = |
| | | INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE. |
| | | get(orderingRuleID); |
| | | throw new DirectoryException(ResultCode.PROTOCOL_ERROR, |
| | | message); |
| | | } |
| | | break; |
| | | |
| | | case TYPE_REVERSE_ORDER: |
| | | ascending = ! reader.readBoolean(); |
| | | break; |
| | | |
| | | default: |
| | | Message message = INFO_SORTREQ_CONTROL_INVALID_SEQ_ELEMENT_TYPE. |
| | | get(byteToHex(reader.peekType())); |
| | | throw new DirectoryException(ResultCode.PROTOCOL_ERROR, |
| | | message); |
| | | Message message = |
| | | INFO_SORTREQ_CONTROL_UNDEFINED_ORDERING_RULE. |
| | | get(orderingRuleID); |
| | | throw new DirectoryException(ResultCode.PROTOCOL_ERROR, |
| | | message); |
| | | } |
| | | } |
| | | if(reader.hasNextElement() && |
| | | reader.peekType() == TYPE_REVERSE_ORDER) |
| | | { |
| | | ascending = ! reader.readBoolean(); |
| | | } |
| | | reader.readEndSequence(); |
| | | |
| | | if ((orderingRule == null) && |
| | | (attrType.getOrderingMatchingRule() == null)) |
| | |
| | | |
| | | sortKeys.add(new SortKey(attrType, ascending, orderingRule)); |
| | | } |
| | | reader.readEndSequence(); |
| | | |
| | | return new ServerSideSortRequestControl(isCritical, |
| | | new SortOrder(sortKeys.toArray(new SortKey[0]))); |