001/* 002 * Licensed to the Apache Software Foundation (ASF) under one 003 * or more contributor license agreements. See the NOTICE file 004 * distributed with this work for additional information 005 * regarding copyright ownership. The ASF licenses this file 006 * to you under the Apache License, Version 2.0 (the 007 * "License"); you may not use this file except in compliance 008 * with the License. You may obtain a copy of the License at 009 * 010 * http://www.apache.org/licenses/LICENSE-2.0 011 * 012 * Unless required by applicable law or agreed to in writing, 013 * software distributed under the License is distributed on an 014 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 015 * KIND, either express or implied. See the License for the 016 * specific language governing permissions and limitations 017 * under the License. 018 * 019 */ 020package org.apache.directory.api.ldap.model.message.controls; 021 022 023import java.util.ArrayList; 024import java.util.List; 025 026 027/** 028 * Implementation of SortRequestControl. 029 * 030 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 031 */ 032public class SortRequestImpl extends AbstractControl implements SortRequest 033{ 034 /** 035 * the list of sort keys 036 */ 037 private List<SortKey> sortKeys; 038 039 040 /** 041 * Creates a new SortRequestControlImpl instance 042 */ 043 public SortRequestImpl() 044 { 045 super( OID ); 046 } 047 048 049 /** 050 * @return the sortKeys 051 */ 052 @Override 053 public List<SortKey> getSortKeys() 054 { 055 return sortKeys; 056 } 057 058 059 /** 060 * @param sortKeys the sortKeys to set 061 */ 062 @Override 063 public void setSortKeys( List<SortKey> sortKeys ) 064 { 065 this.sortKeys = sortKeys; 066 } 067 068 069 /** 070 * {@inheritDoc} 071 */ 072 @Override 073 public void addSortKey( SortKey skey ) 074 { 075 if ( sortKeys == null ) 076 { 077 sortKeys = new ArrayList<>(); 078 } 079 080 sortKeys.add( skey ); 081 } 082 083 084 /** 085 * {@inheritDoc} 086 */ 087 @Override 088 public int hashCode() 089 { 090 int hash = super.hashCode(); 091 092 if ( sortKeys != null ) 093 { 094 for ( SortKey sortKey : sortKeys ) 095 { 096 hash = hash * 17 + sortKey.hashCode(); 097 } 098 } 099 100 return hash; 101 } 102 103 104 /** 105 * {@inheritDoc} 106 */ 107 @Override 108 public boolean equals( Object o ) 109 { 110 if ( this == o ) 111 { 112 return true; 113 } 114 115 if ( !( o instanceof SortRequest ) ) 116 { 117 return false; 118 } 119 120 SortRequest that = ( SortRequest ) o; 121 122 if ( !super.equals( o ) ) 123 { 124 return false; 125 } 126 127 if ( sortKeys == null ) 128 { 129 return that.getSortKeys() == null; 130 } 131 132 if ( ( that.getSortKeys() == null ) || ( sortKeys.size() != that.getSortKeys().size() ) ) 133 { 134 return false; 135 } 136 137 for ( SortKey sortKey : that.getSortKeys() ) 138 { 139 if ( !sortKeys.contains( sortKey ) ) 140 { 141 return false; 142 } 143 } 144 145 return true; 146 } 147 148 149 /** 150 * {@inheritDoc} 151 */ 152 @Override 153 public String toString() 154 { 155 StringBuilder sb = new StringBuilder(); 156 157 sb.append( " Sort Request Control\n" ); 158 sb.append( " oid : " ).append( getOid() ).append( '\n' ); 159 sb.append( " critical : " ).append( isCritical() ).append( '\n' ); 160 161 if ( sortKeys != null ) 162 { 163 sb.append( " sortKeys : [" ); 164 boolean isFirst = true; 165 166 for ( SortKey sortKey : sortKeys ) 167 { 168 if ( isFirst ) 169 { 170 isFirst = false; 171 } 172 else 173 { 174 sb.append( ", " ); 175 } 176 177 sb.append( sortKey.getAttributeTypeDesc() ); 178 } 179 180 sb.append( "]\n" ); 181 } 182 else 183 { 184 sb.append( " sortKeys : null\n" ); 185 } 186 187 return sb.toString(); 188 } 189}