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    
021    package org.apache.directory.shared.dsmlv2.request;
022    
023    
024    import java.util.ArrayList;
025    import java.util.List;
026    
027    import org.apache.directory.shared.ldap.codec.LdapMessageCodec;
028    
029    
030    /**
031     * This class represents the Batch Request of a DSML Request
032     *
033     * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
034     * @version $Rev$, $Date$
035     */
036    public class BatchRequest
037    {
038        /**
039         * The requests contained in the Batch Request
040         */
041        private List<LdapMessageCodec> requests;
042    
043        /**
044         * The ID of the request
045         */
046        private int requestID;
047    
048        /**
049         * This enum represents the different types of processing for a Batch Request 
050         *
051         * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
052         * @version $Rev$, $Date$
053         */
054        public enum Processing
055        {
056            SEQUENTIAL, PARALLEL
057        };
058    
059        /**
060         * The type of processing of the Batch Request
061         */
062        private Processing processing;
063    
064        /**
065         * This enum represents the different types of on error handling for a BatchRequest
066         *
067         * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
068         * @version $Rev$, $Date$
069         */
070        public enum OnError
071        {
072            RESUME, EXIT
073        };
074    
075        /**
076         * The type of on error handling
077         */
078        private OnError onError;
079    
080        /**
081         * This enum represents the different types of response order for a Batch Request
082         *
083         * @author <a href="mailto:dev@directory.apache.org">Apache Directory Project</a>
084         * @version $Rev$, $Date$
085         */
086        public enum ResponseOrder
087        {
088            SEQUENTIAL, UNORDERED
089        };
090    
091        /**
092         * The response order
093         */
094        private ResponseOrder responseOrder;
095    
096    
097        /**
098         * Creates a new instance of BatchRequest.
099         */
100        public BatchRequest()
101        {
102            requests = new ArrayList<LdapMessageCodec>();
103            responseOrder = ResponseOrder.SEQUENTIAL;
104            processing = Processing.SEQUENTIAL;
105            onError = OnError.EXIT;
106        }
107    
108    
109        /**
110         * Adds a request
111         *
112         * @param request
113         *      the resquest to add
114         * @return
115         *      true (as per the general contract of the Collection.add method)
116         */
117        public boolean addRequest( LdapMessageCodec request )
118        {
119            return requests.add( request );
120        }
121    
122    
123        /**
124         * Gets the current request
125         *
126         * @return
127         *      the current request
128         */
129        public LdapMessageCodec getCurrentRequest()
130        {
131            return requests.get( requests.size() - 1 );
132        }
133    
134    
135        /**
136         * Gets the ID of the request
137         *
138         * @return
139         *      the ID of the request
140         */
141        public int getRequestID()
142        {
143            return requestID;
144        }
145    
146    
147        /**
148         * Sets the ID of the request
149         *
150         * @param requestID
151         *      the ID to set
152         */
153        public void setRequestID( int requestID )
154        {
155            this.requestID = requestID;
156        }
157    
158    
159        /**
160         * Gets the processing type of the request
161         *
162         * @return
163         *      the processing type of the request
164         */
165        public Processing getProcessing()
166        {
167            return processing;
168        }
169    
170    
171        /**
172         * Sets the processing type of the request
173         *
174         * @param processing
175         *      the processing type to set
176         */
177        public void setProcessing( Processing processing )
178        {
179            this.processing = processing;
180        }
181    
182    
183        /**
184         * Gets the on error handling type of the request
185         *
186         * @return
187         *      the on error handling type of the request
188         */
189        public OnError getOnError()
190        {
191            return onError;
192        }
193    
194    
195        /**
196         * Sets the on error handling type of the request
197         *
198         * @param onError
199         *      the on error handling type to set
200         */
201        public void setOnError( OnError onError )
202        {
203            this.onError = onError;
204        }
205    
206    
207        /**
208         * Gets the reponse order type of the request
209         *
210         * @return
211         *      the reponse order type of the request
212         */
213        public ResponseOrder getResponseOrder()
214        {
215            return responseOrder;
216        }
217    
218    
219        /**
220         * Sets the reponse order type of the request
221         *
222         * @param responseOrder
223         *      the reponse order type to set
224         */
225        public void setResponseOrder( ResponseOrder responseOrder )
226        {
227            this.responseOrder = responseOrder;
228        }
229    
230    
231        /**
232         * Gets the List of all the requests in the Batch Request
233         *
234         * @return
235         *      the List of all the requests in the Batch Request
236         */
237        public List getRequests()
238        {
239            return requests;
240        }
241    
242    
243        /* (non-Javadoc)
244         * @see java.lang.Object#toString()
245         */
246        @Override
247        public String toString()
248        {
249            StringBuffer sb = new StringBuffer();
250    
251            sb.append( "[" );
252            sb.append( "processing: " + processing );
253            sb.append( " - " );
254            sb.append( "onError: " + onError );
255            sb.append( " - " );
256            sb.append( "responseOrder: " + responseOrder );
257            sb.append( "]" );
258    
259            return sb.toString();
260        }
261    }