001    /*
002     * Copyright 2007-2014 UnboundID Corp.
003     * All Rights Reserved.
004     */
005    /*
006     * Copyright (C) 2008-2014 UnboundID Corp.
007     *
008     * This program is free software; you can redistribute it and/or modify
009     * it under the terms of the GNU General Public License (GPLv2 only)
010     * or the terms of the GNU Lesser General Public License (LGPLv2.1 only)
011     * as published by the Free Software Foundation.
012     *
013     * This program is distributed in the hope that it will be useful,
014     * but WITHOUT ANY WARRANTY; without even the implied warranty of
015     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
016     * GNU General Public License for more details.
017     *
018     * You should have received a copy of the GNU General Public License
019     * along with this program; if not, see <http://www.gnu.org/licenses>.
020     */
021    package com.unboundid.util;
022    
023    
024    
025    import static com.unboundid.util.Debug.*;
026    import static com.unboundid.util.StaticUtils.*;
027    import static com.unboundid.util.UtilityMessages.*;
028    
029    
030    
031    /**
032     * This class provides a number of methods that can be used to enforce
033     * constraints on the behavior of SDK methods.
034     */
035    public final class Validator
036    {
037      /**
038       * Prevent this class from being instantiated.
039       */
040      private Validator()
041      {
042        // No implementation is required.
043      }
044    
045    
046    
047      /**
048       * Ensures that the provided object is not {@code null}.
049       *
050       * @param  o  The object to examine.
051       *
052       * @throws  LDAPSDKUsageException  If the provided object is {@code null}.
053       */
054      public static void ensureNotNull(final Object o)
055             throws LDAPSDKUsageException
056      {
057        if (o == null)
058        {
059          final LDAPSDKUsageException e = new LDAPSDKUsageException(
060               ERR_VALIDATOR_NULL_CHECK_FAILURE.get(0,
061                    getStackTrace(Thread.currentThread().getStackTrace())));
062          debugCodingError(e);
063          throw e;
064        }
065      }
066    
067    
068    
069      /**
070       * Ensures that the provided object is not {@code null}.
071       *
072       * @param  o        The object to examine.
073       * @param  message  The message to include in the exception thrown if the
074       *                  provided object is {@code null}.
075       *
076       * @throws  LDAPSDKUsageException  If the provided object is {@code null}.
077       */
078      public static void ensureNotNullWithMessage(final Object o,
079                                                  final String message)
080             throws LDAPSDKUsageException
081      {
082        if (o == null)
083        {
084          final LDAPSDKUsageException e = new LDAPSDKUsageException(
085               ERR_VALIDATOR_FAILURE_CUSTOM_MESSAGE.get(message,
086                    getStackTrace(Thread.currentThread().getStackTrace())));
087          debugCodingError(e);
088          throw e;
089        }
090      }
091    
092    
093    
094      /**
095       * Ensures that none of the provided objects is {@code null}.
096       *
097       * @param  o1  The first object for which to make the determination.
098       * @param  o2  The second object for which to make the determination.
099       *
100       * @throws  LDAPSDKUsageException  If any of the provided objects is
101       *                                 {@code null}.
102       */
103      public static void ensureNotNull(final Object o1, final Object o2)
104             throws LDAPSDKUsageException
105      {
106        if ((o1 == null) || (o2 == null))
107        {
108          final int index;
109          if (o1 == null)
110          {
111            index = 0;
112          }
113          else
114          {
115            index = 1;
116          }
117    
118          final LDAPSDKUsageException e = new LDAPSDKUsageException(
119               ERR_VALIDATOR_NULL_CHECK_FAILURE.get(index,
120                    getStackTrace(Thread.currentThread().getStackTrace())));
121          debugCodingError(e);
122          throw e;
123        }
124      }
125    
126    
127    
128      /**
129       * Ensures that none of the provided objects is {@code null}.
130       *
131       * @param  o1  The first object for which to make the determination.
132       * @param  o2  The second object for which to make the determination.
133       * @param  o3  The third object for which to make the determination.
134       *
135       * @throws  LDAPSDKUsageException  If any of the provided objects is
136       *                                 {@code null}.
137       */
138      public static void ensureNotNull(final Object o1, final Object o2,
139                                       final Object o3)
140             throws LDAPSDKUsageException
141      {
142        if ((o1 == null) || (o2 == null) || (o3 == null))
143        {
144          final int index;
145          if (o1 == null)
146          {
147            index = 0;
148          }
149          else if (o2 == null)
150          {
151            index = 1;
152          }
153          else
154          {
155            index = 2;
156          }
157    
158          final LDAPSDKUsageException e = new LDAPSDKUsageException(
159               ERR_VALIDATOR_NULL_CHECK_FAILURE.get(index,
160                    getStackTrace(Thread.currentThread().getStackTrace())));
161          debugCodingError(e);
162          throw e;
163        }
164      }
165    
166    
167    
168      /**
169       * Ensures that none of the provided objects is {@code null}.
170       *
171       * @param  o1  The first object for which to make the determination.
172       * @param  o2  The second object for which to make the determination.
173       * @param  o3  The third object for which to make the determination.
174       * @param  o4  The fourth object for which to make the determination.
175       *
176       * @throws  LDAPSDKUsageException  If any of the provided objects is
177       *                                 {@code null}.
178       */
179      public static void ensureNotNull(final Object o1, final Object o2,
180                                       final Object o3, final Object o4)
181             throws LDAPSDKUsageException
182      {
183        if ((o1 == null) || (o2 == null) || (o3 == null) || (o4 == null))
184        {
185          final int index;
186          if (o1 == null)
187          {
188            index = 0;
189          }
190          else if (o2 == null)
191          {
192            index = 1;
193          }
194          else if (o3 == null)
195          {
196            index = 2;
197          }
198          else
199          {
200            index = 3;
201          }
202    
203          final LDAPSDKUsageException e = new LDAPSDKUsageException(
204               ERR_VALIDATOR_NULL_CHECK_FAILURE.get(index,
205                    getStackTrace(Thread.currentThread().getStackTrace())));
206          debugCodingError(e);
207          throw e;
208        }
209      }
210    
211    
212    
213      /**
214       * Ensures that none of the provided objects is {@code null}.
215       *
216       * @param  o1  The first object for which to make the determination.
217       * @param  o2  The second object for which to make the determination.
218       * @param  o3  The third object for which to make the determination.
219       * @param  o4  The fourth object for which to make the determination.
220       * @param  o5  The fifth object for which to make the determination.
221       *
222       * @throws  LDAPSDKUsageException  If any of the provided objects is
223       *                                 {@code null}.
224       */
225      public static void ensureNotNull(final Object o1, final Object o2,
226                                       final Object o3, final Object o4,
227                                       final Object o5)
228             throws LDAPSDKUsageException
229      {
230        if ((o1 == null) || (o2 == null) || (o3 == null) || (o4 == null) ||
231            (o5 == null))
232        {
233          final int index;
234          if (o1 == null)
235          {
236            index = 0;
237          }
238          else if (o2 == null)
239          {
240            index = 1;
241          }
242          else if (o3 == null)
243          {
244            index = 2;
245          }
246          else if (o4 == null)
247          {
248            index = 3;
249          }
250          else
251          {
252            index = 4;
253          }
254    
255          final LDAPSDKUsageException e = new LDAPSDKUsageException(
256               ERR_VALIDATOR_NULL_CHECK_FAILURE.get(index,
257                    getStackTrace(Thread.currentThread().getStackTrace())));
258          debugCodingError(e);
259          throw e;
260        }
261      }
262    
263    
264    
265      /**
266       * Ensures that the provided condition is {@code true}.
267       *
268       * @param  condition  The condition to verify.
269       *
270       * @throws  LDAPSDKUsageException  If the provided condition is {@code false}.
271       */
272      public static void ensureTrue(final boolean condition)
273             throws LDAPSDKUsageException
274      {
275        if (! condition)
276        {
277          final LDAPSDKUsageException e = new LDAPSDKUsageException(
278               ERR_VALIDATOR_TRUE_CHECK_FAILURE.get(
279                    getStackTrace(Thread.currentThread().getStackTrace())));
280          debugCodingError(e);
281          throw e;
282        }
283      }
284    
285    
286    
287      /**
288       * Ensures that the provided condition is {@code true}.
289       *
290       * @param  condition  The condition to verify.
291       * @param  message    The message to include in the exception thrown if the
292       *                    provided object is {@code null}.
293       *
294       * @throws  LDAPSDKUsageException  If the provided condition is {@code false}.
295       */
296      public static void ensureTrue(final boolean condition, final String message)
297             throws LDAPSDKUsageException
298      {
299        if (! condition)
300        {
301          final LDAPSDKUsageException e = new LDAPSDKUsageException(
302               ERR_VALIDATOR_FAILURE_CUSTOM_MESSAGE.get(message,
303                    getStackTrace(Thread.currentThread().getStackTrace())));
304          debugCodingError(e);
305          throw e;
306        }
307      }
308    
309    
310    
311      /**
312       * Ensures that the provided condition is {@code false}.
313       *
314       * @param  condition  The condition to verify.
315       *
316       * @throws  LDAPSDKUsageException  If the provided condition is {@code true}.
317       */
318      public static void ensureFalse(final boolean condition)
319             throws LDAPSDKUsageException
320      {
321        if (condition)
322        {
323          final LDAPSDKUsageException e = new LDAPSDKUsageException(
324               ERR_VALIDATOR_FALSE_CHECK_FAILURE.get(
325                    getStackTrace(Thread.currentThread().getStackTrace())));
326          debugCodingError(e);
327          throw e;
328        }
329      }
330    
331    
332    
333      /**
334       * Ensures that the provided condition is {@code false}.
335       *
336       * @param  condition  The condition to verify.
337       * @param  message    The message to include in the exception thrown if the
338       *                    provided object is {@code null}.
339       *
340       * @throws  LDAPSDKUsageException  If the provided condition is {@code true}.
341       */
342      public static void ensureFalse(final boolean condition, final String message)
343             throws LDAPSDKUsageException
344      {
345        if (condition)
346        {
347          final LDAPSDKUsageException e = new LDAPSDKUsageException(
348               ERR_VALIDATOR_FAILURE_CUSTOM_MESSAGE.get(message,
349                    getStackTrace(Thread.currentThread().getStackTrace())));
350          debugCodingError(e);
351          throw e;
352        }
353      }
354    }