in dsml/engine/src/main/java/org/apache/directory/api/dsmlv2/engine/Dsmlv2Engine.java [599:771]
protected void processRequest( DsmlDecorator<? extends Request> request, BufferedWriter respWriter )
throws Exception
{
ResultCodeEnum resultCode = null;
switch ( request.getDecorated().getType() )
{
case ABANDON_REQUEST:
connection.abandon( ( AbandonRequest ) request );
return;
case ADD_REQUEST:
AddResponse response = connection.add( ( AddRequest ) request );
resultCode = response.getLdapResult().getResultCode();
AddResponseDsml addResponseDsml = new AddResponseDsml( connection.getCodecService(), response );
writeResponse( respWriter, addResponseDsml );
break;
case BIND_REQUEST:
BindResponse bindResponse = connection.bind( ( BindRequest ) request );
resultCode = bindResponse.getLdapResult().getResultCode();
BindResponseDsml authResponseDsml = new BindResponseDsml( connection.getCodecService(), bindResponse );
writeResponse( respWriter, authResponseDsml );
break;
case COMPARE_REQUEST:
CompareResponse compareResponse = connection.compare( ( CompareRequest ) request );
resultCode = compareResponse.getLdapResult().getResultCode();
CompareResponseDsml compareResponseDsml = new CompareResponseDsml( connection.getCodecService(),
compareResponse );
writeResponse( respWriter, compareResponseDsml );
break;
case DEL_REQUEST:
DeleteResponse delResponse = connection.delete( ( DeleteRequest ) request );
resultCode = delResponse.getLdapResult().getResultCode();
DelResponseDsml delResponseDsml = new DelResponseDsml( connection.getCodecService(), delResponse );
writeResponse( respWriter, delResponseDsml );
break;
case EXTENDED_REQUEST:
ExtendedResponse extendedResponse = connection.extended( ( ExtendedRequest ) request );
resultCode = extendedResponse.getLdapResult().getResultCode();
ExtendedResponseDsml extendedResponseDsml = new ExtendedResponseDsml( connection.getCodecService(),
extendedResponse );
writeResponse( respWriter, extendedResponseDsml );
break;
case MODIFY_REQUEST:
ModifyResponse modifyResponse = connection.modify( ( ModifyRequest ) request );
resultCode = modifyResponse.getLdapResult().getResultCode();
ModifyResponseDsml modifyResponseDsml = new ModifyResponseDsml( connection.getCodecService(),
modifyResponse );
writeResponse( respWriter, modifyResponseDsml );
break;
case MODIFYDN_REQUEST:
ModifyDnResponse modifyDnResponse = connection.modifyDn( ( ModifyDnRequest ) request );
resultCode = modifyDnResponse.getLdapResult().getResultCode();
ModDNResponseDsml modDNResponseDsml = new ModDNResponseDsml( connection.getCodecService(),
modifyDnResponse );
writeResponse( respWriter, modDNResponseDsml );
break;
case SEARCH_REQUEST:
SearchCursor searchResponses = connection.search( ( SearchRequest ) request );
SearchResponseDsml searchResponseDsml = new SearchResponseDsml( connection.getCodecService() );
if ( respWriter != null )
{
StringBuilder sb = new StringBuilder();
sb.append( "<searchResponse" );
if ( request.getDecorated().getMessageId() > 0 )
{
sb.append( " requestID=\"" );
sb.append( request.getDecorated().getMessageId() );
sb.append( '"' );
}
sb.append( '>' );
respWriter.write( sb.toString() );
}
while ( searchResponses.next() )
{
Response searchResponse = searchResponses.get();
if ( searchResponse.getType() == MessageTypeEnum.SEARCH_RESULT_ENTRY )
{
SearchResultEntry searchResultEntry = ( SearchResultEntry ) searchResponse;
SearchResultEntryDsml searchResultEntryDsml = new SearchResultEntryDsml(
connection.getCodecService(), searchResultEntry );
searchResponseDsml = new SearchResponseDsml( connection.getCodecService(),
searchResultEntryDsml );
if ( respWriter != null )
{
writeResponse( respWriter, searchResultEntryDsml );
}
else
{
searchResponseDsml.addResponse( searchResultEntryDsml );
}
}
else if ( searchResponse.getType() == MessageTypeEnum.SEARCH_RESULT_REFERENCE )
{
SearchResultReference searchResultReference = ( SearchResultReference ) searchResponse;
SearchResultReferenceDsml searchResultReferenceDsml = new SearchResultReferenceDsml(
connection.getCodecService(), searchResultReference );
searchResponseDsml = new SearchResponseDsml( connection.getCodecService(),
searchResultReferenceDsml );
if ( respWriter != null )
{
writeResponse( respWriter, searchResultReferenceDsml );
}
else
{
searchResponseDsml.addResponse( searchResultReferenceDsml );
}
}
}
SearchResultDone srDone = searchResponses.getSearchResultDone();
if ( srDone != null )
{
resultCode = srDone.getLdapResult().getResultCode();
SearchResultDoneDsml srdDsml = new SearchResultDoneDsml( connection.getCodecService(), srDone );
if ( respWriter != null )
{
writeResponse( respWriter, srdDsml );
respWriter.write( "</searchResponse>" );
}
else
{
searchResponseDsml.addResponse( srdDsml );
batchResponse.addResponse( searchResponseDsml );
}
}
break;
case UNBIND_REQUEST:
connection.unBind();
break;
default:
throw new IllegalStateException( I18n.err( I18n.ERR_02001_UNEXPECTED_REQUEST_TYPE, request.getDecorated().getType() ) );
}
if ( ( !continueOnError ) && ( resultCode != null ) && ( resultCode != ResultCodeEnum.SUCCESS )
&& ( resultCode != ResultCodeEnum.COMPARE_TRUE ) && ( resultCode != ResultCodeEnum.COMPARE_FALSE )
&& ( resultCode != ResultCodeEnum.REFERRAL ) )
{
// Turning on Exit flag
exit = true;
}
}