blob: a7be4a1fd07f813e2cfc4c2ac42b110044fee246 [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
*
* http://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.dsmlv2.request;
import java.util.ArrayList;
import java.util.List;
import org.apache.directory.api.dsmlv2.DsmlDecorator;
import org.apache.directory.api.dsmlv2.ParserUtils;
import org.apache.directory.api.ldap.model.message.Request;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
/**
* This class represents the Batch Request. It can be used to generate an the XML String of a BatchRequest.
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public class BatchRequestDsml
{
/** The Requests list */
private List<DsmlDecorator<? extends Request>> requests;
/** The ID of the request */
private int requestID;
/** The type of processing of the Batch Request */
private Processing processing;
/** The type of on error handling */
private OnError onError;
/** The response order */
private ResponseOrder responseOrder;
/**
* This enum represents the different types of processing for a Batch Request
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public enum Processing
{
/** Sequential processing. */
SEQUENTIAL,
/** Parallel processing. */
PARALLEL
}
/**
* This enum represents the different types of on error handling for a BatchRequest
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public enum OnError
{
/** Resume on error. */
RESUME,
/** Exit on error. */
EXIT
}
/**
* This enum represents the different types of response order for a Batch Request
*
* @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
*/
public enum ResponseOrder
{
/** Sequential response order. */
SEQUENTIAL,
/** Unordered response order. */
UNORDERED
}
/**
* flag to indicate to store the request objects present in
* this batch request. Default is true
*/
private boolean storeReq = true;
private DsmlDecorator<? extends Request> currentReq;
/**
* Creates a new instance of BatchResponseDsml.
*/
public BatchRequestDsml()
{
requests = new ArrayList<DsmlDecorator<? extends Request>>();
responseOrder = ResponseOrder.SEQUENTIAL;
processing = Processing.SEQUENTIAL;
onError = OnError.EXIT;
}
/**
* Gets the current request
*
* @return
* the current request
*/
public DsmlDecorator<? extends Request> getCurrentRequest()
{
return currentReq;
}
/**
* Adds a request to the Batch Request DSML.
*
* @param request
* the request to add
* @return
* true (as per the general contract of the Collection.add method).
*/
public boolean addRequest( DsmlDecorator<? extends Request> request )
{
currentReq = request;
if ( storeReq )
{
return requests.add( request );
}
else
{
return true;
}
}
/**
* Removes a request from the Batch Request DSML.
*
* @param request
* the request to remove
* @return
* true if this list contained the specified element.
*/
public boolean removeRequest( DsmlDecorator<? extends Request> request )
{
return requests.remove( request );
}
/**
* Gets the ID of the request
*
* @return
* the ID of the request
*/
public int getRequestID()
{
return requestID;
}
/**
* Sets the ID of the request
*
* @param requestID
* the ID to set
*/
public void setRequestID( int requestID )
{
this.requestID = requestID;
}
/**
* Gets the processing type of the request
*
* @return
* the processing type of the request
*/
public Processing getProcessing()
{
return processing;
}
/**
* Sets the processing type of the request
*
* @param processing
* the processing type to set
*/
public void setProcessing( Processing processing )
{
this.processing = processing;
}
/**
* Gets the on error handling type of the request
*
* @return
* the on error handling type of the request
*/
public OnError getOnError()
{
return onError;
}
/**
* Sets the on error handling type of the request
*
* @param onError
* the on error handling type to set
*/
public void setOnError( OnError onError )
{
this.onError = onError;
}
/**
* Gets the response order type of the request
*
* @return
* the response order type of the request
*/
public ResponseOrder getResponseOrder()
{
return responseOrder;
}
/**
* Sets the response order type of the request
*
* @param responseOrder
* the response order type to set
*/
public void setResponseOrder( ResponseOrder responseOrder )
{
this.responseOrder = responseOrder;
}
/**
* Gets the List of all the requests in the Batch Request
*
* @return the List of all the requests in the Batch Request
*/
public List<DsmlDecorator<? extends Request>> getRequests()
{
return requests;
}
/**
* Converts this Batch Request to its XML representation in the DSMLv2 format.
*
* @return the XML representation in DSMLv2 format
*/
public String toDsml()
{
Document document = DocumentHelper.createDocument();
Element element = document.addElement( "batchRequest" );
// RequestID
if ( requestID != 0 )
{
element.addAttribute( "requestID", "" + requestID );
}
// ResponseOrder
if ( responseOrder == ResponseOrder.UNORDERED )
{
element.addAttribute( "responseOrder", "unordered" );
}
// Processing
if ( processing == Processing.PARALLEL )
{
element.addAttribute( "processing", "parallel" );
}
// On Error
if ( onError == OnError.RESUME )
{
element.addAttribute( "onError", "resume" );
}
// Requests
for ( DsmlDecorator<? extends Request> request : requests )
{
request.toDsml( element );
}
return ParserUtils.styleDocument( document ).asXML();
}
/**
* @return true if the request objects are stored, false otherwise
*/
public boolean isStoringRequests()
{
return storeReq;
}
/**
* set the storeReq flag to turn on/off storing of request objects
*
* Note: it is better to set this flag to false while processing large DSML
* batch requests
*
* @param storeReq
*/
public void setStoreReq( boolean storeReq )
{
this.storeReq = storeReq;
}
/**
* {@inheritDoc}
*/
@Override
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append( "[" );
sb.append( "processing: " ).append( processing );
sb.append( " - " );
sb.append( "onError: " ).append( onError );
sb.append( " - " );
sb.append( "responseOrder: " ).append( responseOrder );
sb.append( "]" );
return sb.toString();
}
}