// Path: jsr377-api/src/main/java/javax/application/converter/Converter.java
// public interface Converter<T> {
//     /**
//      * Converts the input argument to the given type {@code T}.
//      *
//      * @param value the value to be converted. May be {@code null}.
//      *
//      * @return the converted value. May be {@code null}.
//      *
//      * @throws ConversionException if the given value could not be converted to the target type.
//      */
//     T fromObject(Object value) throws ConversionException;
// 
//     /**
//      * Converts the input argument to the a {@code String}.
//      *
//      * @param value the value to be converted. May be {@code null}.
//      *
//      * @return the {@code String} representation of the given value. May be {@code null}.
//      *
//      * @throws ConversionException if the given value could not be converted to a String.
//      */
//     default String toString(T value) throws ConversionException {
//         return Objects.toString(value, null);
//     }
// }
// 
// Path: jsr377-api/src/main/java/javax/application/converter/NoopConverter.java
// public class NoopConverter implements Converter<Object> {
//     @Override
//     public Object fromObject(Object value) throws ConversionException {
//         return value;
//     }
// }


import javax.application.converter.Converter;
import javax.application.converter.NoopConverter;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/*
 * SPDX-License-Identifier: Apache-2.0
 *
 * Copyright 2015-2021 the original author or authors.
 *
 * Licensed 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
 *
 *     http://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 javax.application.configuration;


/**
 * @author Andres Almiray
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Configured {
    String NO_VALUE = "javax.application.configuration.Configured.NO_VALUE";

    String value();

    String[] args() default {};

    String defaultValue() default NO_VALUE;

    String format() default "";

// Path: jsr377-api/src/main/java/javax/application/converter/Converter.java
// public interface Converter<T> {
//     /**
//      * Converts the input argument to the given type {@code T}.
//      *
//      * @param value the value to be converted. May be {@code null}.
//      *
//      * @return the converted value. May be {@code null}.
//      *
//      * @throws ConversionException if the given value could not be converted to the target type.
//      */
//     T fromObject(Object value) throws ConversionException;
// 
//     /**
//      * Converts the input argument to the a {@code String}.
//      *
//      * @param value the value to be converted. May be {@code null}.
//      *
//      * @return the {@code String} representation of the given value. May be {@code null}.
//      *
//      * @throws ConversionException if the given value could not be converted to a String.
//      */
//     default String toString(T value) throws ConversionException {
//         return Objects.toString(value, null);
//     }
// }
// 
// Path: jsr377-api/src/main/java/javax/application/converter/NoopConverter.java
// public class NoopConverter implements Converter<Object> {
//     @Override
//     public Object fromObject(Object value) throws ConversionException {
//         return value;
//     }
// }


// Path: jsr377-api/src/main/java/javax/application/configuration/Configured.java
import javax.application.converter.Converter;
import javax.application.converter.NoopConverter;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Inherited;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/*
 * SPDX-License-Identifier: Apache-2.0
 *
 * Copyright 2015-2021 the original author or authors.
 *
 * Licensed 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
 *
 *     http://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 javax.application.configuration;


/**
 * @author Andres Almiray
 */
@Documented
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.FIELD, ElementType.METHOD})
public @interface Configured {
    String NO_VALUE = "javax.application.configuration.Configured.NO_VALUE";

    String value();

    String[] args() default {};

    String defaultValue() default NO_VALUE;

    String format() default "";

    Class<? extends Converter<?>> converter() default NoopConverter.class;