blob: c75bbfe870ea5cadbaf7401d9a50d6c40a267367 [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*
*/
package org.apache.directory.api.ldap.model.message;
import org.apache.directory.api.i18n.I18n;
/**
* Implementation of an AbandonRequest message.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class AbandonRequestImpl extends AbstractRequest implements AbandonRequest
{
/** Sequence identifier of the outstanding request message to abandon */
private int abandonId;
/** Ldap abandon request type code */
private static final MessageTypeEnum TYPE = MessageTypeEnum.ABANDON_REQUEST;
/**
* Creates an AbandonRequest implementation for an outstanding request.
*/
public AbandonRequestImpl()
{
super( -1, TYPE, false );
}
/**
* Creates an AbandonRequest implementation for an outstanding request.
*
* @param abdandonnedId the sequence identifier of the AbandonRequest message.
*/
public AbandonRequestImpl( final int abdandonnedId )
{
super( -1, TYPE, false );
abandonId = abdandonnedId;
}
/**
* Gets the id of the request operation to terminate.
*
* @return the id of the request message to abandon
*/
@Override
public int getAbandoned()
{
return abandonId;
}
/**
* {@inheritDoc}
*/
@Override
public AbandonRequest setAbandoned( int abandonId )
{
this.abandonId = abandonId;
return this;
}
/**
* RFC 2251 [Section 4.11]: Abandon, Bind, Unbind, and StartTLS operations
* cannot be abandoned.
*/
public void abandon()
{
throw new UnsupportedOperationException( I18n.err( I18n.ERR_13506_CANNOT_ABANDON_OPERATION ) );
}
/**
* {@inheritDoc}
*/
@Override
public AbandonRequest setMessageId( int messageId )
{
super.setMessageId( messageId );
return this;
}
/**
* {@inheritDoc}
*/
@Override
public AbandonRequest addControl( Control control )
{
return ( AbandonRequest ) super.addControl( control );
}
/**
* {@inheritDoc}
*/
@Override
public AbandonRequest addAllControls( Control[] controls )
{
return ( AbandonRequest ) super.addAllControls( controls );
}
/**
* {@inheritDoc}
*/
@Override
public AbandonRequest removeControl( Control control )
{
return ( AbandonRequest ) super.removeControl( control );
}
/**
* Checks for equality first by asking the super method which should compare
* all but the Abandoned request's Id. It then compares this to determine
* equality.
*
* @param obj the object to test for equality to this AbandonRequest
* @return true if the obj equals this request, false otherwise
*/
@Override
public boolean equals( Object obj )
{
if ( this == obj )
{
return true;
}
if ( !( obj instanceof AbandonRequest ) )
{
return false;
}
if ( !super.equals( obj ) )
{
return false;
}
AbandonRequest req = ( AbandonRequest ) obj;
return req.getAbandoned() == abandonId;
}
/**
* @see Object#hashCode()
* @return the instance's hash code
*/
@Override
public int hashCode()
{
int hash = 37;
hash = hash * 17 + abandonId;
hash = hash * 17 + super.hashCode();
return hash;
}
/**
* Return a String representing an AbandonRequest
*
* @return A String representing the AbandonRequest
*/
@Override
public String toString()
{
StringBuilder sb = new StringBuilder();
sb.append( " Abandon Request :\n" );
sb.append( " Message Id : " ).append( abandonId );
// The controls
sb.append( super.toString() );
return sb.toString();
}
}