View Javadoc

1   package com.terradue.jcatalogue.client.internal.lang;
2   
3   import static java.lang.String.format;
4   
5   /**
6    * Code partially extracted from Google Collections
7    *
8    * @since 0.8
9    */
10  public final class Assertions
11  {
12  
13      private Assertions()
14      {
15          // do nothing
16      }
17  
18      /**
19       * Ensures the truth of an expression involving one or more parameters to the
20       * calling method.
21       *
22       * @param expression a boolean expression
23       * @param errorMessageTemplate a template for the exception message should the
24       *     check fail. The message is formed by replacing each {@code %s}
25       *     placeholder in the template with an argument. These are matched by
26       *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
27       *     Unmatched arguments will be appended to the formatted message in square
28       *     braces. Unmatched placeholders will be left as-is.
29       * @param errorMessageArgs the arguments to be substituted into the message
30       *     template. Arguments are converted to strings using
31       *     {@link String#valueOf(Object)}.
32       * @throws IllegalArgumentException if {@code expression} is false
33       * @throws NullPointerException if the check fails and either {@code
34       *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
35       *     this happen)
36       */
37      public static void checkArgument( boolean expression, String errorMessageTemplate, Object... errorMessageArgs )
38      {
39          if ( !expression )
40          {
41              throw new IllegalArgumentException( format( errorMessageTemplate, errorMessageArgs ) );
42          }
43      }
44  
45      /**
46       * Ensures the truth of an expression involving the state of the calling
47       * instance, but not involving any parameters to the calling method.
48       *
49       * @param expression a boolean expression
50       * @param errorMessageTemplate a template for the exception message should the
51       *     check fail. The message is formed by replacing each {@code %s}
52       *     placeholder in the template with an argument. These are matched by
53       *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
54       *     Unmatched arguments will be appended to the formatted message in square
55       *     braces. Unmatched placeholders will be left as-is.
56       * @param errorMessageArgs the arguments to be substituted into the message template.
57       * @throws IllegalStateException if {@code expression} is false
58       * @throws NullPointerException if the check fails and either {@code
59       *     errorMessageTemplate} or {@code errorMessageArgs} is null (don't let
60       *     this happen)
61       */
62      public static void checkState( boolean expression, String errorMessageTemplate, Object... errorMessageArgs )
63      {
64          if ( !expression )
65          {
66              throw new IllegalStateException( format( errorMessageTemplate, errorMessageArgs ) );
67          }
68      }
69  
70      /**
71       * Ensures that an object reference passed as a parameter to the calling
72       * method is not null.
73       *
74       * @param reference an object reference
75       * @param errorMessageTemplate a template for the exception message should the
76       *     check fail. The message is formed by replacing each {@code %s}
77       *     placeholder in the template with an argument. These are matched by
78       *     position - the first {@code %s} gets {@code errorMessageArgs[0]}, etc.
79       *     Unmatched arguments will be appended to the formatted message in square
80       *     braces. Unmatched placeholders will be left as-is.
81       * @param errorMessageArgs the arguments to be substituted into the message
82       *     template. Arguments are converted to strings using
83       *     {@link String#valueOf(Object)}.
84       * @return the non-null reference that was validated
85       * @throws NullPointerException if {@code reference} is null
86       */
87      public static <T> T checkNotNull( T reference, String errorMessageTemplate, Object... errorMessageArgs )
88      {
89          if ( reference == null )
90          {
91              // If either of these parameters is null, the right thing happens anyway
92              throw new NullPointerException( format( errorMessageTemplate, errorMessageArgs ) );
93          }
94          return reference;
95      }
96  
97  }