| /* |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. See the NOTICE file distributed with |
| this work for additional information regarding copyright ownership. |
| The ASF licenses this file to You under the Apache License, Version 2.0 |
| (the "License"); you may not use this file except in compliance with |
| the License. You may obtain a copy of the License at |
| |
| https://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. |
| */ |
| package org.apache.commons.cli; |
| |
| import java.io.File; |
| import java.net.MalformedURLException; |
| import java.net.URL; |
| import java.nio.file.InvalidPathException; |
| import java.nio.file.Path; |
| import java.nio.file.Paths; |
| import java.text.SimpleDateFormat; |
| import java.util.Date; |
| |
| /** |
| * The definition of the functional interface to call when doing a conversion. Like {@code Function<String,T>} but can throw an Exception. |
| * |
| * @param <T> The return type for the function. |
| * @param <E> The kind of thrown exception or error. |
| * @since 1.7.0 |
| */ |
| @FunctionalInterface |
| public interface Converter<T, E extends Exception> { |
| // See also Apache Commons Lang FailableFunction |
| |
| /** |
| * The default converter. Does nothing. |
| */ |
| Converter<?, RuntimeException> DEFAULT = s -> s; |
| |
| /** |
| * Class name converter. Calls {@link Class#forName(String)}. |
| */ |
| Converter<Class<?>, ClassNotFoundException> CLASS = Class::forName; |
| |
| /** |
| * File name converter. Calls {@link File#File(String)}. |
| */ |
| Converter<File, NullPointerException> FILE = File::new; |
| |
| /** |
| * Path converter. Calls {@link Paths#get(java.net.URI)}. |
| */ |
| Converter<Path, InvalidPathException> PATH = Paths::get; |
| |
| /** |
| * Number converter. Converts to a Double if a decimal point ('.') is in the string or a Long otherwise. |
| */ |
| Converter<Number, NumberFormatException> NUMBER = s -> s.indexOf('.') != -1 ? (Number) Double.valueOf(s) : (Number) Long.valueOf(s); |
| |
| /** |
| * Converts a class name to an instance of the class. Uses the Class converter to find the class and then call the default constructor. |
| * |
| * @see #CLASS |
| */ |
| Converter<Object, ReflectiveOperationException> OBJECT = s -> CLASS.apply(s).getConstructor().newInstance(); |
| |
| /** |
| * Creates a URL. Calls {@link URL#URL(String)}. |
| */ |
| Converter<URL, MalformedURLException> URL = URL::new; |
| |
| /** |
| * Converts to a date using the format string Form "EEE MMM dd HH:mm:ss zzz yyyy". |
| */ |
| Converter<Date, java.text.ParseException> DATE = s -> new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy").parse(s); |
| |
| /** |
| * Applies the conversion function to the String argument. |
| * |
| * @param string the String to convert. |
| * @return the Object from the conversion. |
| * @throws E on error. |
| */ |
| T apply(String string) throws E; |
| } |