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 */ 020 package org.apache.directory.shared.dsmlv2.request; 021 022 023 import java.util.ArrayList; 024 import java.util.List; 025 026 import org.apache.directory.shared.dsmlv2.DsmlDecorator; 027 import org.apache.directory.shared.dsmlv2.ParserUtils; 028 import org.apache.directory.shared.dsmlv2.request.BatchRequest.OnError; 029 import org.apache.directory.shared.dsmlv2.request.BatchRequest.Processing; 030 import org.apache.directory.shared.dsmlv2.request.BatchRequest.ResponseOrder; 031 import org.dom4j.Document; 032 import org.dom4j.DocumentHelper; 033 import org.dom4j.Element; 034 035 036 /** 037 * This class represents the Batch Request. It can be used to generate an the XML String of a BatchRequest. 038 * 039 * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a> 040 * @version $Rev$, $Date$ 041 */ 042 public class BatchRequestDsml 043 { 044 /** The Requests list */ 045 private List<DsmlDecorator> requests; 046 047 /** The ID of the request */ 048 private int requestID; 049 050 /** The type of processing of the Batch Request */ 051 private Processing processing; 052 053 /** The type of on error handling */ 054 private OnError onError; 055 056 /** The response order */ 057 private ResponseOrder responseOrder; 058 059 060 /** 061 * Creates a new instance of BatchResponseDsml. 062 */ 063 public BatchRequestDsml() 064 { 065 requests = new ArrayList<DsmlDecorator>(); 066 responseOrder = ResponseOrder.SEQUENTIAL; 067 processing = Processing.SEQUENTIAL; 068 onError = OnError.EXIT; 069 } 070 071 072 /** 073 * Adds a request to the Batch Request DSML. 074 * 075 * @param request 076 * the request to add 077 * @return 078 * true (as per the general contract of the Collection.add method). 079 */ 080 public boolean addRequest( DsmlDecorator request ) 081 { 082 return requests.add( request ); 083 } 084 085 086 /** 087 * Removes a request from the Batch Request DSML. 088 * 089 * @param request 090 * the request to remove 091 * @return 092 * true if this list contained the specified element. 093 */ 094 public boolean removeRequest( DsmlDecorator request ) 095 { 096 return requests.remove( request ); 097 } 098 099 100 /** 101 * Gets the ID of the request 102 * 103 * @return 104 * the ID of the request 105 */ 106 public int getRequestID() 107 { 108 return requestID; 109 } 110 111 112 /** 113 * Sets the ID of the request 114 * 115 * @param requestID 116 * the ID to set 117 */ 118 public void setRequestID( int requestID ) 119 { 120 this.requestID = requestID; 121 } 122 123 124 /** 125 * Gets the processing type of the request 126 * 127 * @return 128 * the processing type of the request 129 */ 130 public Processing getProcessing() 131 { 132 return processing; 133 } 134 135 136 /** 137 * Sets the processing type of the request 138 * 139 * @param processing 140 * the processing type to set 141 */ 142 public void setProcessing( Processing processing ) 143 { 144 this.processing = processing; 145 } 146 147 148 /** 149 * Gets the on error handling type of the request 150 * 151 * @return 152 * the on error handling type of the request 153 */ 154 public OnError getOnError() 155 { 156 return onError; 157 } 158 159 160 /** 161 * Sets the on error handling type of the request 162 * 163 * @param onError 164 * the on error handling type to set 165 */ 166 public void setOnError( OnError onError ) 167 { 168 this.onError = onError; 169 } 170 171 172 /** 173 * Gets the reponse order type of the request 174 * 175 * @return 176 * the reponse order type of the request 177 */ 178 public ResponseOrder getResponseOrder() 179 { 180 return responseOrder; 181 } 182 183 184 /** 185 * Sets the reponse order type of the request 186 * 187 * @param responseOrder 188 * the reponse order type to set 189 */ 190 public void setResponseOrder( ResponseOrder responseOrder ) 191 { 192 this.responseOrder = responseOrder; 193 } 194 195 196 /** 197 * Converts the Batch Request to its XML representation in the DSMLv2 format. 198 */ 199 public String toDsml() 200 { 201 Document document = DocumentHelper.createDocument(); 202 Element element = document.addElement( "batchRequest" ); 203 204 // RequestID 205 if ( requestID != 0 ) 206 { 207 element.addAttribute( "requestID", "" + requestID ); 208 } 209 210 // ResponseOrder 211 if ( responseOrder == ResponseOrder.UNORDERED ) 212 { 213 element.addAttribute( "responseOrder", "unordered" ); 214 } 215 216 // Processing 217 if ( processing == Processing.PARALLEL ) 218 { 219 element.addAttribute( "processing", "parallel" ); 220 } 221 222 // On Error 223 if ( onError == OnError.RESUME ) 224 { 225 element.addAttribute( "onError", "resume" ); 226 } 227 228 // Requests 229 for ( DsmlDecorator request : requests ) 230 { 231 request.toDsml( element ); 232 } 233 234 return ParserUtils.styleDocument( document ).asXML(); 235 } 236 }