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.valueOf( (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.valueOf( (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.valueOf( (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<Object>( (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 }