View Javadoc
1   package org.eclipse.aether.util;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   * 
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   * 
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
20   */
21  
22  import java.util.ArrayList;
23  import java.util.Collection;
24  import java.util.Collections;
25  import java.util.List;
26  import java.util.Map;
27  
28  import org.eclipse.aether.RepositorySystemSession;
29  
30  /**
31   * A utility class to read configuration properties from a repository system session.
32   * 
33   * @see RepositorySystemSession#getConfigProperties()
34   */
35  public final class ConfigUtils
36  {
37  
38      private ConfigUtils()
39      {
40          // hide constructor
41      }
42  
43      /**
44       * Gets the specified configuration property.
45       * 
46       * @param properties The configuration properties to read, must not be {@code null}.
47       * @param defaultValue The default value to return in case none of the property keys are set, may be {@code null}.
48       * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
49       *            a valid value is found.
50       * @return The property value or {@code null} if none.
51       */
52      public static Object getObject( Map<?, ?> properties, Object defaultValue, String... keys )
53      {
54          for ( String key : keys )
55          {
56              Object value = properties.get( key );
57  
58              if ( value != null )
59              {
60                  return value;
61              }
62          }
63  
64          return defaultValue;
65      }
66  
67      /**
68       * Gets the specified configuration property.
69       * 
70       * @param session The repository system session from which to read the configuration property, must not be
71       *            {@code null}.
72       * @param defaultValue The default value to return in case none of the property keys are set, may be {@code null}.
73       * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
74       *            a valid value is found.
75       * @return The property value or {@code null} if none.
76       */
77      public static Object getObject( RepositorySystemSession session, Object defaultValue, String... keys )
78      {
79          return getObject( session.getConfigProperties(), defaultValue, keys );
80      }
81  
82      /**
83       * Gets the specified configuration property.
84       * 
85       * @param properties The configuration properties to read, must not be {@code null}.
86       * @param defaultValue The default value to return in case none of the property keys is set to a string, may be
87       *            {@code null}.
88       * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
89       *            a string value is found.
90       * @return The property value or {@code null} if none.
91       */
92      public static String getString( Map<?, ?> properties, String defaultValue, String... keys )
93      {
94          for ( String key : keys )
95          {
96              Object value = properties.get( key );
97  
98              if ( value instanceof String )
99              {
100                 return (String) value;
101             }
102         }
103 
104         return defaultValue;
105     }
106 
107     /**
108      * Gets the specified configuration property.
109      * 
110      * @param session The repository system session from which to read the configuration property, must not be
111      *            {@code null}.
112      * @param defaultValue The default value to return in case none of the property keys is set to a string, may be
113      *            {@code null}.
114      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
115      *            a string value is found.
116      * @return The property value or {@code null} if none.
117      */
118     public static String getString( RepositorySystemSession session, String defaultValue, String... keys )
119     {
120         return getString( session.getConfigProperties(), defaultValue, keys );
121     }
122 
123     /**
124      * Gets the specified configuration property.
125      * 
126      * @param properties The configuration properties to read, must not be {@code null}.
127      * @param defaultValue The default value to return in case none of the property keys is set to a number.
128      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
129      *            a {@link Number} or a string representation of an {@link Integer} is found.
130      * @return The property value.
131      */
132     public static int getInteger( Map<?, ?> properties, int defaultValue, String... keys )
133     {
134         for ( String key : keys )
135         {
136             Object value = properties.get( key );
137 
138             if ( value instanceof Number )
139             {
140                 return ( (Number) value ).intValue();
141             }
142 
143             try
144             {
145                 return Integer.parseInt( (String) value );
146             }
147             catch ( Exception e )
148             {
149                 // try next key
150             }
151         }
152 
153         return defaultValue;
154     }
155 
156     /**
157      * Gets the specified configuration property.
158      * 
159      * @param session The repository system session from which to read the configuration property, must not be
160      *            {@code null}.
161      * @param defaultValue The default value to return in case none of the property keys is set to a number.
162      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
163      *            a {@link Number} or a string representation of an {@link Integer} is found.
164      * @return The property value.
165      */
166     public static int getInteger( RepositorySystemSession session, int defaultValue, String... keys )
167     {
168         return getInteger( session.getConfigProperties(), defaultValue, keys );
169     }
170 
171     /**
172      * Gets the specified configuration property.
173      * 
174      * @param properties The configuration properties to read, must not be {@code null}.
175      * @param defaultValue The default value to return in case none of the property keys is set to a number.
176      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
177      *            a {@link Number} or a string representation of a {@link Long} is found.
178      * @return The property value.
179      */
180     public static long getLong( Map<?, ?> properties, long defaultValue, String... keys )
181     {
182         for ( String key : keys )
183         {
184             Object value = properties.get( key );
185 
186             if ( value instanceof Number )
187             {
188                 return ( (Number) value ).longValue();
189             }
190 
191             try
192             {
193                 return Long.parseLong( (String) value );
194             }
195             catch ( Exception e )
196             {
197                 // try next key
198             }
199         }
200 
201         return defaultValue;
202     }
203 
204     /**
205      * Gets the specified configuration property.
206      * 
207      * @param session The repository system session from which to read the configuration property, must not be
208      *            {@code null}.
209      * @param defaultValue The default value to return in case none of the property keys is set to a number.
210      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
211      *            a {@link Number} or a string representation of a {@link Long} is found.
212      * @return The property value.
213      */
214     public static long getLong( RepositorySystemSession session, long defaultValue, String... keys )
215     {
216         return getLong( session.getConfigProperties(), defaultValue, keys );
217     }
218 
219     /**
220      * Gets the specified configuration property.
221      * 
222      * @param properties The configuration properties to read, must not be {@code null}.
223      * @param defaultValue The default value to return in case none of the property keys is set to a number.
224      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
225      *            a {@link Number} or a string representation of a {@link Float} is found.
226      * @return The property value.
227      */
228     public static float getFloat( Map<?, ?> properties, float defaultValue, String... keys )
229     {
230         for ( String key : keys )
231         {
232             Object value = properties.get( key );
233 
234             if ( value instanceof Number )
235             {
236                 return ( (Number) value ).floatValue();
237             }
238 
239             try
240             {
241                 return Float.parseFloat( (String) value );
242             }
243             catch ( Exception e )
244             {
245                 // try next key
246             }
247         }
248 
249         return defaultValue;
250     }
251 
252     /**
253      * Gets the specified configuration property.
254      * 
255      * @param session The repository system session from which to read the configuration property, must not be
256      *            {@code null}.
257      * @param defaultValue The default value to return in case none of the property keys is set to a number.
258      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
259      *            a {@link Number} or a string representation of a {@link Float} is found.
260      * @return The property value.
261      */
262     public static float getFloat( RepositorySystemSession session, float defaultValue, String... keys )
263     {
264         return getFloat( session.getConfigProperties(), defaultValue, keys );
265     }
266 
267     /**
268      * Gets the specified configuration property.
269      * 
270      * @param properties The configuration properties to read, must not be {@code null}.
271      * @param defaultValue The default value to return in case none of the property keys is set to a boolean.
272      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
273      *            a {@link Boolean} or a string (to be {@link Boolean#parseBoolean(String) parsed as boolean}) is found.
274      * @return The property value.
275      */
276     public static boolean getBoolean( Map<?, ?> properties, boolean defaultValue, String... keys )
277     {
278         for ( String key : keys )
279         {
280             Object value = properties.get( key );
281 
282             if ( value instanceof Boolean )
283             {
284                 return (Boolean) value;
285             }
286             else if ( value instanceof String )
287             {
288                 return Boolean.parseBoolean( (String) value );
289             }
290         }
291 
292         return defaultValue;
293     }
294 
295     /**
296      * Gets the specified configuration property.
297      * 
298      * @param session The repository system session from which to read the configuration property, must not be
299      *            {@code null}.
300      * @param defaultValue The default value to return in case none of the property keys is set to a boolean.
301      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
302      *            a {@link Boolean} or a string (to be {@link Boolean#parseBoolean(String) parsed as boolean}) is found.
303      * @return The property value.
304      */
305     public static boolean getBoolean( RepositorySystemSession session, boolean defaultValue, String... keys )
306     {
307         return getBoolean( session.getConfigProperties(), defaultValue, keys );
308     }
309 
310     /**
311      * Gets the specified configuration property.
312      * 
313      * @param properties The configuration properties to read, must not be {@code null}.
314      * @param defaultValue The default value to return in case none of the property keys is set to a collection.
315      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
316      *            a collection is found.
317      * @return The property value or {@code null} if none.
318      */
319     public static List<?> getList( Map<?, ?> properties, List<?> defaultValue, String... keys )
320     {
321         for ( String key : keys )
322         {
323             Object value = properties.get( key );
324 
325             if ( value instanceof List )
326             {
327                 return (List<?>) value;
328             }
329             else if ( value instanceof Collection )
330             {
331                 return Collections.unmodifiableList( new ArrayList<>( (Collection<?>) value ) );
332             }
333         }
334 
335         return defaultValue;
336     }
337 
338     /**
339      * Gets the specified configuration property.
340      * 
341      * @param session The repository system session from which to read the configuration property, must not be
342      *            {@code null}.
343      * @param defaultValue The default value to return in case none of the property keys is set to a collection.
344      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
345      *            a collection is found.
346      * @return The property value or {@code null} if none.
347      */
348     public static List<?> getList( RepositorySystemSession session, List<?> defaultValue, String... keys )
349     {
350         return getList( session.getConfigProperties(), defaultValue, keys );
351     }
352 
353     /**
354      * Gets the specified configuration property.
355      * 
356      * @param properties The configuration properties to read, must not be {@code null}.
357      * @param defaultValue The default value to return in case none of the property keys is set to a map.
358      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
359      *            a map is found.
360      * @return The property value or {@code null} if none.
361      */
362     public static Map<?, ?> getMap( Map<?, ?> properties, Map<?, ?> defaultValue, String... keys )
363     {
364         for ( String key : keys )
365         {
366             Object value = properties.get( key );
367 
368             if ( value instanceof Map )
369             {
370                 return (Map<?, ?>) value;
371             }
372         }
373 
374         return defaultValue;
375     }
376 
377     /**
378      * Gets the specified configuration property.
379      * 
380      * @param session The repository system session from which to read the configuration property, must not be
381      *            {@code null}.
382      * @param defaultValue The default value to return in case none of the property keys is set to a map.
383      * @param keys The property keys to read, must not be {@code null}. The specified keys are read one after one until
384      *            a map is found.
385      * @return The property value or {@code null} if none.
386      */
387     public static Map<?, ?> getMap( RepositorySystemSession session, Map<?, ?> defaultValue, String... keys )
388     {
389         return getMap( session.getConfigProperties(), defaultValue, keys );
390     }
391 
392 }