View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.vfs2;
18  
19  import java.nio.charset.Charset;
20  import java.time.Duration;
21  import java.util.Objects;
22  import java.util.function.Function;
23  
24  import org.apache.commons.lang3.StringUtils;
25  import org.apache.commons.lang3.time.DurationUtils;
26  
27  /**
28   * Abstracts configuring {@link FileSystemOptions}s.
29   */
30  public abstract class FileSystemConfigBuilder {
31  
32      /** Default prefix to use when resolving system properties */
33      private static final String PREFIX = "vfs.";
34  
35      /** The root URI of the file system */
36      private static final String ROOTURI = "rootURI";
37  
38      /** The prefix to use when resolving system properties */
39      private final String prefix;
40  
41      /**
42       * Constructs builder with default prefix.
43       *
44       * @since 1.0
45       */
46      protected FileSystemConfigBuilder() {
47          prefix = PREFIX;
48      }
49  
50      /**
51       * Constructs builder with specified component name.
52       *
53       * @param component component name to be used in prefix
54       * @since 2.0
55       */
56      protected FileSystemConfigBuilder(final String component) {
57          prefix = PREFIX + component;
58      }
59  
60      /**
61       * Gets a named option as a Boolean.
62       *
63       * @param fileSystemOptions file system options to query, may be null.
64       * @param name the option name
65       * @return the option in {@code opts} or system properties, otherwise null
66       * @see #getBoolean(FileSystemOptions, String, Boolean)
67       * @since 2.0
68       */
69      protected Boolean getBoolean(final FileSystemOptions fileSystemOptions, final String name) {
70          return getBoolean(fileSystemOptions, name, null);
71      }
72  
73      /**
74       * Gets a named option as a Boolean.
75       *
76       * @param fileSystemOptions file system options to query, may be null.
77       * @param name the option name
78       * @param defaultValue value to return if option is not present
79       * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
80       * @see #getBoolean(FileSystemOptions, String, Boolean)
81       * @since 2.0
82       */
83      protected boolean getBoolean(final FileSystemOptions fileSystemOptions, final String name,
84          final boolean defaultValue) {
85          return getBoolean(fileSystemOptions, name, Boolean.valueOf(defaultValue)).booleanValue();
86      }
87  
88      /**
89       * Gets a named option as a Boolean.
90       *
91       * @param fileSystemOptions file system options to query, may be null.
92       * @param name the option name
93       * @param defaultValue value to return if option is not present
94       * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
95       * @see #getBoolean(FileSystemOptions, String, Boolean)
96       * @since 2.0
97       */
98      protected Boolean getBoolean(final FileSystemOptions fileSystemOptions, final String name,
99          final Boolean defaultValue) {
100         return getParam(fileSystemOptions, name, defaultValue, Boolean::valueOf, Boolean.class);
101     }
102 
103     /**
104      * Gets a named option as a Byte.
105      *
106      * @param fileSystemOptions file system options to query, may be null.
107      * @param name the option name
108      * @return the option in {@code opts} or system properties, otherwise null
109      * @see #getByte(FileSystemOptions, String, Byte)
110      * @since 2.0
111      */
112     protected Byte getByte(final FileSystemOptions fileSystemOptions, final String name) {
113         return getByte(fileSystemOptions, name, null);
114     }
115 
116     /**
117      * Gets a named option as a Byte.
118      *
119      * @param fileSystemOptions file system options to query, may be null.
120      * @param name the option name
121      * @param defaultValue value to return if option is not present
122      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
123      * @see #getByte(FileSystemOptions, String, Byte)
124      * @since 2.0
125      */
126     protected byte getByte(final FileSystemOptions fileSystemOptions, final String name, final byte defaultValue) {
127         return getByte(fileSystemOptions, name, Byte.valueOf(defaultValue)).byteValue();
128     }
129 
130     /**
131      * Gets a named option as a Byte.
132      *
133      * @param fileSystemOptions file system options to query, may be null.
134      * @param name the option name
135      * @param defaultValue value to return if option is not present
136      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
137      * @since 2.0
138      */
139     protected Byte getByte(final FileSystemOptions fileSystemOptions, final String name, final Byte defaultValue) {
140         return getParam(fileSystemOptions, name, defaultValue, Byte::valueOf, Byte.class);
141     }
142 
143     /**
144      * Gets a named option as a Character.
145      *
146      * @param fileSystemOptions file system options to query, may be null.
147      * @param name the option name
148      * @return the option in {@code opts} or system properties, otherwise null
149      * @see #getCharacter(FileSystemOptions, String, Character)
150      * @since 2.0
151      */
152     protected Character getCharacter(final FileSystemOptions fileSystemOptions, final String name) {
153         return getCharacter(fileSystemOptions, name, null);
154     }
155 
156     /**
157      * Gets a named option as a Character.
158      *
159      * @param fileSystemOptions file system options to query, may be null.
160      * @param name the option name
161      * @param defaultValue value to return if option is not present
162      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
163      * @see #getCharacter(FileSystemOptions, String, Character)
164      * @since 2.0
165      */
166     protected char getCharacter(final FileSystemOptions fileSystemOptions, final String name, final char defaultValue) {
167         return getCharacter(fileSystemOptions, name, Character.valueOf(defaultValue)).charValue();
168     }
169 
170     /**
171      * Gets a named option as a Character.
172      *
173      * @param fileSystemOptions file system options to query, may be null.
174      * @param name the option name
175      * @param defaultValue value to return if option is not present
176      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
177      * @since 2.0
178      */
179     protected Character getCharacter(final FileSystemOptions fileSystemOptions, final String name,
180         final Character defaultValue) {
181         Character value = getParam(fileSystemOptions, name);
182         if (value == null) {
183             final String str = getProperty(name);
184             if (StringUtils.isEmpty(str)) {
185                 return defaultValue;
186             }
187             value = Character.valueOf(str.charAt(0));
188         }
189         return value;
190     }
191 
192     /**
193      * Gets a named option as a Charset.
194      *
195      * @param fileSystemOptions file system options to query, may be null.
196      * @param name the option name
197      * @return the option in {@code opts} or system properties, otherwise null
198      * @see #getCharset(FileSystemOptions, String, Charset)
199      * @since 2.11.0
200      */
201     protected Charset getCharset(final FileSystemOptions fileSystemOptions, final String name) {
202         return getCharset(fileSystemOptions, name, null);
203     }
204 
205     /**
206      * Gets a named option as a Charset.
207      *
208      * @param fileSystemOptions file system options to query, may be null.
209      * @param name the option name
210      * @param defaultValue value to return if option is not present
211      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
212      * @since 2.11.0
213      */
214     protected Charset getCharset(final FileSystemOptions fileSystemOptions, final String name, final Charset defaultValue) {
215         return getParam(fileSystemOptions, name, defaultValue, Charset::forName, Charset.class);
216     }
217 
218     /**
219      * Gets the target of this configuration.
220      *
221      * @return the specific file system class
222      * @since 1.0
223      */
224     protected abstract Class<? extends FileSystem> getConfigClass();
225 
226     /**
227      * Gets a named option as a Double.
228      *
229      * @param fileSystemOptions file system options to query, may be null.
230      * @param name the option name
231      * @return the option in {@code opts} or system properties, otherwise null
232      * @see #getDouble(FileSystemOptions, String, Double)
233      * @since 2.0
234      */
235     protected Double getDouble(final FileSystemOptions fileSystemOptions, final String name) {
236         return getDouble(fileSystemOptions, name, null);
237     }
238 
239     /**
240      * Gets a named option as a Double.
241      *
242      * @param fileSystemOptions file system options to query, may be null.
243      * @param name the option name
244      * @param defaultValue value to return if option is not present
245      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
246      * @see #getDouble(FileSystemOptions, String, Double)
247      * @since 2.0
248      */
249     protected double getDouble(final FileSystemOptions fileSystemOptions, final String name,
250         final double defaultValue) {
251         return getDouble(fileSystemOptions, name, Double.valueOf(defaultValue)).doubleValue();
252     }
253 
254     /**
255      * Gets a named option as a Double.
256      *
257      * @param fileSystemOptions file system options to query, may be null.
258      * @param name the option name
259      * @param defaultValue value to return if option is not present
260      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
261      * @since 2.0
262      */
263     protected Double getDouble(final FileSystemOptions fileSystemOptions, final String name,
264         final Double defaultValue) {
265         return getParam(fileSystemOptions, name, defaultValue, Double::valueOf, Double.class);
266     }
267 
268     /**
269      * Gets a named option as a Duration.
270      *
271      * @param fileSystemOptions file system options to query, may be null.
272      * @param name the option name
273      * @return the option in {@code opts} or system properties, otherwise null
274      * @see #getLong(FileSystemOptions, String, Long)
275      * @since 2.8.0
276      */
277     protected Duration getDuration(final FileSystemOptions fileSystemOptions, final String name) {
278         return getDuration(fileSystemOptions, name, null);
279     }
280 
281     /**
282      * Gets a named option as a Duration.
283      *
284      * @param fileSystemOptions file system options to query, may be null.
285      * @param name the option name
286      * @param defaultValue value to return if option is not present
287      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
288      * @since 2.8.0
289      */
290     protected Duration getDuration(final FileSystemOptions fileSystemOptions, final String name,
291         final Duration defaultValue) {
292         return getParam(fileSystemOptions, name, defaultValue, Duration::parse, Duration.class);
293     }
294 
295     /**
296      * Gets a named option as a Duration bound to the integer range.
297      *
298      * @param fileSystemOptions file system options to query, may be null.
299      * @param name the option name
300      * @return the option in {@code opts} or system properties, otherwise null
301      * @see #getLong(FileSystemOptions, String, Long)
302      * @since 2.8.0
303      */
304     protected Integer getDurationInteger(final FileSystemOptions fileSystemOptions, final String name) {
305         return getDurationInteger(fileSystemOptions, name, null);
306     }
307 
308     /**
309      * Gets a named option as a Duration bound to the integer range.
310      *
311      * @param fileSystemOptions file system options to query, may be null.
312      * @param name the option name
313      * @param defaultValue value to return if option is not present
314      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
315      * @since 2.8.0
316      */
317     protected Integer getDurationInteger(final FileSystemOptions fileSystemOptions, final String name,
318         final Duration defaultValue) {
319         return DurationUtils.toMillisInt(getParam(fileSystemOptions, name, defaultValue, Duration::parse, Duration.class));
320     }
321 
322     /**
323      *Gets a named option as a Double.
324      *
325      * @param <E> enumeration type
326      * @param enumClass class of enumeration type
327      * @param fileSystemOptions file system options to query, may be null.
328      * @param name the option name *
329      * @return the option in {@code opts} or system properties, otherwise null
330      * @see #getEnum(Class, FileSystemOptions, String, Enum)
331      * @throws IllegalArgumentException if option value is not a known enumeration.
332      * @since 2.1
333      */
334     protected <E extends Enum<E>> E getEnum(final Class<E> enumClass, final FileSystemOptions fileSystemOptions,
335         final String name) {
336         return this.getEnum(enumClass, fileSystemOptions, name, null);
337     }
338 
339     /**
340      * Gets a named option as an Enum.
341      *
342      * @param <E> enumeration type
343      * @param enumClass class of enumeration type
344      * @param fileSystemOptions file system options to query, may be null.
345      * @param name the option name
346      * @param defaultValue value to return if option is not present
347      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
348      * @see #getEnum(Class, FileSystemOptions, String, Enum)
349      * @throws IllegalArgumentException if option value is not a known enumeration.
350      * @since 2.1
351      */
352     protected <E extends Enum<E>> E getEnum(final Class<E> enumClass, final FileSystemOptions fileSystemOptions,
353         final String name, final E defaultValue) {
354         E value = getParam(fileSystemOptions, name);
355         if (value == null) {
356             final String str = getProperty(name);
357             if (str == null) {
358                 return defaultValue;
359             }
360             value = Enum.valueOf(enumClass, str);
361         }
362         return value;
363     }
364 
365     /**
366      * Gets a named option as a Float.
367      *
368      * @param fileSystemOptions file system options to query, may be null.
369      * @param name the option name
370      * @return the option in {@code opts} or system properties, otherwise null
371      * @see #getFloat(FileSystemOptions, String, Float)
372      * @throws NumberFormatException if option value is not a valid float.
373      * @since 2.0
374      */
375     protected Float getFloat(final FileSystemOptions fileSystemOptions, final String name) {
376         return getFloat(fileSystemOptions, name, null);
377     }
378 
379     /**
380      * Gets a named option as a Float.
381      *
382      * @param fileSystemOptions file system options to query, may be null.
383      * @param name the option name
384      * @param defaultValue value to return if option is not present
385      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
386      * @see #getFloat(FileSystemOptions, String, Float)
387      * @throws NumberFormatException if option value is not a valid float.
388      * @since 2.0
389      */
390     protected float getFloat(final FileSystemOptions fileSystemOptions, final String name, final float defaultValue) {
391         return getFloat(fileSystemOptions, name, Float.valueOf(defaultValue)).floatValue();
392     }
393 
394     /**
395      * Gets a named option as a Float.
396      *
397      * @param fileSystemOptions file system options to query, may be null.
398      * @param name the option name
399      * @param defaultValue value to return if option is not present
400      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
401      * @throws NumberFormatException if option value is not a valid float.
402      * @since 2.0
403      */
404     protected Float getFloat(final FileSystemOptions fileSystemOptions, final String name, final Float defaultValue) {
405         return getParam(fileSystemOptions, name, defaultValue, Float::valueOf, Float.class);
406     }
407 
408     /**
409      * Gets a named option as an Integer.
410      *
411      * @param fileSystemOptions file system options to query, may be null.
412      * @param name the option name
413      * @return the option in {@code opts} or system properties, otherwise null
414      * @see #getInteger(FileSystemOptions, String, Integer)
415      * @throws NumberFormatException if option value is not a valid integer.
416      * @since 2.0
417      */
418     protected Integer getInteger(final FileSystemOptions fileSystemOptions, final String name) {
419         return getInteger(fileSystemOptions, name, null);
420     }
421 
422     /**
423      * Gets a named option as an Integer.
424      *
425      * @param fileSystemOptions file system options to query, may be null.
426      * @param name the option name
427      * @param defaultValue value to return if option is not present
428      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
429      * @see #getInteger(FileSystemOptions, String, Integer)
430      * @throws NumberFormatException if option value is not a valid integer.
431      * @since 2.0
432      */
433     protected int getInteger(final FileSystemOptions fileSystemOptions, final String name, final int defaultValue) {
434         return getInteger(fileSystemOptions, name, Integer.valueOf(defaultValue)).intValue();
435     }
436 
437     /**
438      * Gets a named option as an Integer.
439      *
440      * @param fileSystemOptions file system options to query, may be null.
441      * @param name the option name
442      * @param defaultValue value to return if option is not present
443      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
444      * @throws NumberFormatException if option value is not a valid integer.
445      * @since 2.0
446      */
447     protected Integer getInteger(final FileSystemOptions fileSystemOptions, final String name,
448         final Integer defaultValue) {
449         return getParam(fileSystemOptions, name, defaultValue, Integer::valueOf, Integer.class);
450     }
451 
452     /**
453      * Gets a named option as a Long.
454      *
455      * @param fileSystemOptions file system options to query, may be null.
456      * @param name the option name
457      * @return the option in {@code opts} or system properties, otherwise null
458      * @see #getLong(FileSystemOptions, String, Long)
459      * @throws NumberFormatException if option value is not a valid long.
460      * @since 2.0
461      */
462     protected Long getLong(final FileSystemOptions fileSystemOptions, final String name) {
463         return getLong(fileSystemOptions, name, null);
464     }
465 
466     /**
467      * Gets a named option as a Long.
468      *
469      * @param fileSystemOptions file system options to query, may be null.
470      * @param name the option name
471      * @param defaultValue value to return if option is not present
472      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
473      * @see #getLong(FileSystemOptions, String, Long)
474      * @throws NumberFormatException if option value is not a valid long.
475      * @since 2.0
476      */
477     protected long getLong(final FileSystemOptions fileSystemOptions, final String name, final long defaultValue) {
478         return getLong(fileSystemOptions, name, Long.valueOf(defaultValue)).longValue();
479     }
480 
481     /**
482      * Gets a named option as a Long.
483      *
484      * @param fileSystemOptions file system options to query, may be null.
485      * @param name the option name
486      * @param defaultValue value to return if option is not present
487      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
488      * @throws NumberFormatException if option value is not a valid long.
489      * @since 2.0
490      */
491     protected Long getLong(final FileSystemOptions fileSystemOptions, final String name, final Long defaultValue) {
492         return getParam(fileSystemOptions, name, defaultValue, Long::valueOf, Long.class);
493     }
494 
495     /**
496      * Gets a named parameter.
497      *
498      * @param <T> The expected return type.
499      * @param fileSystemOptions file system options to query, may be null.
500      * @param name get option with this name
501      * @return the named option or null
502      * @since 1.0
503      */
504     protected <T> T getParam(final FileSystemOptions fileSystemOptions, final String name) {
505         return fileSystemOptions == null ? null : fileSystemOptions.getOption(getConfigClass(), name);
506     }
507 
508     /**
509      * Gets a named parameter.
510      *
511      * @param <T> The expected return type.
512      * @param fileSystemOptions file system options to query, may be null.
513      * @param name get option with this name
514      * @param defaultValue value to use if the system property value is null.
515      * @param function Builds an instance of T from a system property String value.
516      * @param returnType TODO
517      * @return the named option or null
518      * @since 2.8.0
519      */
520     private <T> T getParam(final FileSystemOptions fileSystemOptions, final String name, final T defaultValue, final Function<String, T> function,
521             final Class<T> returnType) {
522         T value = getParam(fileSystemOptions, name);
523         if (value == null) {
524             final String str = getProperty(name);
525             if (str == null) {
526                 return defaultValue;
527             }
528             value = function.apply(str);
529         }
530         return returnType == null ? null : returnType.isInstance(value) ? value : function.apply(Objects.toString(value));
531     }
532 
533     /**
534      * Gets a named parameter.
535      *
536      * @param <T> The expected return type.
537      * @param fileSystemOptions file system options to query, may be null.
538      * @param name get option with this name
539      * @param defaultValue The default value if absent.
540      * @return the named option or {@code defaultValue}.
541      * @since 2.10.0
542      */
543     protected <T> T getParamOrDefault(final FileSystemOptions fileSystemOptions, final String name, final T defaultValue) {
544         return fileSystemOptions == null ? defaultValue : fileSystemOptions.getOptionOrDefault(getConfigClass(), name, defaultValue);
545     }
546 
547     /**
548      * Gets the system property for the given name.
549      *
550      * @param name The name to lookup combined with the prefix.
551      * @return a system property or null
552      * @since 2.1
553      */
554     private String getProperty(final String name) {
555         return System.getProperty(toPropertyKey(name));
556     }
557 
558     /**
559      * Gets the root URI of the file system.
560      *
561      * @param fileSystemOptions file system options to query, may be null.
562      * @return The root URI, or null.
563      * @since 2.0
564      */
565     public String getRootURI(final FileSystemOptions fileSystemOptions) {
566         return getString(fileSystemOptions, ROOTURI);
567     }
568 
569     /**
570      * Gets a named option as a Short.
571      *
572      * @param fileSystemOptions file system options to query, may be null.
573      * @param name the option name
574      * @return the option in {@code opts} or system properties, otherwise null
575      * @see #getShort(FileSystemOptions, String, Short)
576      * @throws NumberFormatException if option value is not a valid short.
577      * @since 2.0
578      */
579     protected Short getShort(final FileSystemOptions fileSystemOptions, final String name) {
580         return getShort(fileSystemOptions, name, null);
581     }
582 
583     /**
584      * Gets a named option as a Short.
585      *
586      * @param fileSystemOptions file system options to query, may be null.
587      * @param name the option name
588      * @param defaultValue value to return if option is not present
589      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
590      * @see #getShort(FileSystemOptions, String, Short)
591      * @throws NumberFormatException if option value is not a valid short
592      * @since 2.0
593      */
594     protected short getShort(final FileSystemOptions fileSystemOptions, final String name, final short defaultValue) {
595         return getShort(fileSystemOptions, name, Short.valueOf(defaultValue)).shortValue();
596     }
597 
598     /**
599      * Gets a named option as a Short.
600      *
601      * @param fileSystemOptions file system options to query, may be null.
602      * @param name the option name
603      * @param defaultValue value to return if option is not present
604      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
605      * @throws NumberFormatException if option value is not a valid short
606      * @since 2.0
607      */
608     protected Short getShort(final FileSystemOptions fileSystemOptions, final String name, final Short defaultValue) {
609         return getParam(fileSystemOptions, name, defaultValue, Short::valueOf, Short.class);
610     }
611 
612     /**
613      * Gets a named option as a String.
614      *
615      * @param fileSystemOptions file system options to query, may be null.
616      * @param name the option name
617      * @return the option in {@code opts} or system properties, otherwise null
618      * @see #getString(FileSystemOptions, String, String)
619      * @since 2.0
620      */
621     protected String getString(final FileSystemOptions fileSystemOptions, final String name) {
622         return getString(fileSystemOptions, name, null);
623     }
624 
625     /**
626      * Gets a named option as a String.
627      *
628      * @param fileSystemOptions file system options to query, may be null.
629      * @param name the option name
630      * @param defaultValue value to return if option is not present
631      * @return the option in {@code opts} or system properties, otherwise {@code defaultValue}
632      * @since 2.0
633      */
634     protected String getString(final FileSystemOptions fileSystemOptions, final String name,
635         final String defaultValue) {
636         return getParam(fileSystemOptions, name, defaultValue, String::valueOf, String.class);
637     }
638 
639     /**
640      * Checks the named setting specified.
641      *
642      * @param fileSystemOptions file system options to query, may be null.
643      * @param name the option to check in {@code opts} or system properties
644      * @return true if option exists
645      * @since 2.0
646      */
647     protected boolean hasObject(final FileSystemOptions fileSystemOptions, final String name) {
648         return hasParam(fileSystemOptions, name) || System.getProperties().containsKey(toPropertyKey(name));
649     }
650 
651     /**
652      * Checks if option exists.
653      *
654      * @param fileSystemOptions file system options to query, may be null.
655      * @param name the name to look up in {@code opts}
656      * @return true if opts have the named parameter
657      * @since 1.0
658      */
659     protected boolean hasParam(final FileSystemOptions fileSystemOptions, final String name) {
660         return fileSystemOptions != null && fileSystemOptions.hasOption(getConfigClass(), name);
661     }
662 
663     /**
664      * Sets the named parameter.
665      *
666      * @param fileSystemOptions the file system options to modify
667      * @param name set option with this name
668      * @param value boolean value to set
669      * @since 2.1
670      */
671     protected void setParam(final FileSystemOptions fileSystemOptions, final String name, final boolean value) {
672         setParam(fileSystemOptions, name, Boolean.valueOf(value));
673     }
674 
675     /**
676      * Sets the named parameter.
677      *
678      * @param fileSystemOptions the file system options to modify
679      * @param name set option with this name
680      * @param value object value to set
681      * @since 1.0
682      */
683     protected void setParam(final FileSystemOptions fileSystemOptions, final String name, final Object value) {
684         Objects.requireNonNull(fileSystemOptions, "fileSystemOptions").setOption(getConfigClass(), name, value);
685     }
686 
687     /**
688      * Sets the root URI of the file system.
689      *
690      * @param fileSystemOptions the file system options to modify
691      * @param rootURI The creator name to be associated with the file.
692      * @since 2.0
693      */
694     public void setRootURI(final FileSystemOptions fileSystemOptions, final String rootURI) {
695         setParam(fileSystemOptions, ROOTURI, rootURI);
696     }
697 
698     /**
699      * Converts the given primitive boolean to a Boolean object.
700      *
701      * @param value a primitive boolean.
702      * @return the given primitive boolean as Boolean object.
703      * @since 2.7.0
704      */
705     protected Boolean toBooleanObject(final boolean value) {
706         return value ? Boolean.TRUE : Boolean.FALSE;
707     }
708 
709     /**
710      * Converts the given name into a System property key.
711      *
712      * @param name a name to combine with the builder prefix
713      * @return name of system property
714      * @since 2.1
715      */
716     private String toPropertyKey(final String name) {
717         return prefix + name;
718     }
719 
720 }