001/*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements.  See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License.  You may obtain a copy of the License at
008 *
009 *      http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017package org.apache.juneau.marshall.uon;
018
019import static java.lang.annotation.ElementType.*;
020import static java.lang.annotation.RetentionPolicy.*;
021
022import java.lang.annotation.*;
023
024import org.apache.juneau.marshall.*;
025import org.apache.juneau.marshall.serializer.*;
026import org.apache.juneau.marshall.urlencoding.*;
027
028/**
029 * Annotation for specifying config properties defined in {@link UonSerializer} and {@link UonParser}.
030 *
031 * <p>
032 * Used primarily for specifying bean configuration properties on REST classes and methods.
033 *
034 * <h5 class='section'>See Also:</h5><ul>
035 *    <li class='link'><a class="doclink" href="https://juneau.apache.org/docs/topics/UonSupport">UON</a>
036 * </ul>
037 */
038@Target({ TYPE, METHOD })
039@Retention(RUNTIME)
040@Inherited
041@ContextApply({ UonConfigAnnotation.SerializerApply.class, UonConfigAnnotation.ParserApply.class })
042public @interface UonConfig {
043
044   /**
045    * Add <js>"_type"</js> properties when needed.
046    *
047    * <p>
048    * If <js>"true"</js>, then <js>"_type"</js> properties will be added to beans if their type cannot be inferred
049    * through reflection.
050    *
051    * <p>
052    * When present, this value overrides the {@link org.apache.juneau.marshall.serializer.Serializer.Builder#addBeanTypes() Serializer.Builder#addBeanTypes()} setting and is
053    * provided to customize the behavior of specific serializers in a {@link SerializerSet}.
054    *
055    * <ul class='values'>
056    *    <li><js>"true"</js>
057    *    <li><js>"false"</js> (default)
058    * </ul>
059    *
060    * <h5 class='section'>Notes:</h5><ul>
061    *    <li class='note'>
062    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/DefaultVarResolver">VarResolver.DEFAULT</a> (e.g. <js>"$C{myConfigVar}"</js>).
063    * </ul>
064    *
065    * <h5 class='section'>See Also:</h5><ul>
066    *    <li class='jm'>{@link UonSerializer.Builder#addBeanTypesUon()}
067    * </ul>
068    *
069    * @return The annotation value.
070    */
071   String addBeanTypes() default "";
072
073   /**
074    * Decode <js>"%xx"</js> sequences.
075    *
076    * <p>
077    * Specify <js>"true"</js> if URI encoded characters should be decoded, <js>"false"</js> if they've already been decoded
078    * before being passed to this parser.
079    *
080    * <ul class='values'>
081    *    <li><js>"true"</js> (default for {@link UrlEncodingParser})
082    *    <li><js>"false"</js> (default for {@link UonParser})
083    * </ul>
084    *
085    * <h5 class='section'>Notes:</h5><ul>
086    *    <li class='note'>
087    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/DefaultVarResolver">VarResolver.DEFAULT</a> (e.g. <js>"$C{myConfigVar}"</js>).
088    * </ul>
089    *
090    * <h5 class='section'>See Also:</h5><ul>
091    *    <li class='jm'>{@link UonParser.Builder#decoding()}
092    * </ul>
093    *
094    * @return The annotation value.
095    */
096   String decoding() default "";
097
098   /**
099    * Encode non-valid URI characters.
100    *
101    * <p>
102    * Encode non-valid URI characters with <js>"%xx"</js> constructs.
103    *
104    * <p>
105    * If <js>"true"</js>, non-valid URI characters will be converted to <js>"%xx"</js> sequences.
106    * <br>Set to <js>"false"</js> if parameter value is being passed to some other code that will already perform
107    * URL-encoding of non-valid URI characters.
108    *
109    * <ul class='values'>
110    *    <li><js>"true"</js> (default for {@link UrlEncodingSerializer})
111    *    <li><js>"false"</js> (default for {@link UonSerializer})
112    * </ul>
113    *
114    * <h5 class='section'>Notes:</h5><ul>
115    *    <li class='note'>
116    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/DefaultVarResolver">VarResolver.DEFAULT</a> (e.g. <js>"$C{myConfigVar}"</js>).
117    * </ul>
118    *
119    * <h5 class='section'>See Also:</h5><ul>
120    *    <li class='jm'>{@link UonSerializer.Builder#encoding()}
121    * </ul>
122    *
123    * @return The annotation value.
124    */
125   String encoding() default "";
126
127   /**
128    * Format to use for query/form-data/header values.
129    *
130    * <p>
131    * Specifies the format to use for URL GET parameter keys and values.
132    *
133    * <ul class='values'>
134    *    <li><js>"UON"</js> (default) - Use UON notation for parameters.
135    *    <li><js>"PLAINTEXT"</js> - Use plain text for parameters.
136    * </ul>
137    *
138    * <h5 class='section'>Notes:</h5><ul>
139    *    <li class='note'>
140    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/DefaultVarResolver">VarResolver.DEFAULT</a> (e.g. <js>"$C{myConfigVar}"</js>).
141    * </ul>
142    *
143    * <h5 class='section'>See Also:</h5><ul>
144    *    <li class='jm'>{@link UonSerializer.Builder#paramFormat(ParamFormat)}
145    * </ul>
146    *
147    * @return The annotation value.
148    */
149   String paramFormat() default "";
150
151   /**
152    * Optional rank for this config.
153    *
154    * <p>
155    * Can be used to override default ordering and application of config annotations.
156    *
157    * @return The annotation value.
158    */
159   int rank() default 0;
160
161   /**
162    * Validate end.
163    *
164    * <p>
165    * If <js>"true"</js>, after parsing a POJO from the input, verifies that the remaining input in
166    * the stream consists of only comments or whitespace.
167    *
168    * <ul class='values'>
169    *    <li><js>"true"</js>
170    *    <li><js>"false"</js> (default)
171    * </ul>
172    *
173    * <h5 class='section'>Notes:</h5><ul>
174    *    <li class='note'>
175    *       Supports <a class="doclink" href="https://juneau.apache.org/docs/topics/DefaultVarResolver">VarResolver.DEFAULT</a> (e.g. <js>"$C{myConfigVar}"</js>).
176    * </ul>
177    * 
178    * <h5 class='section'>See Also:</h5><ul>
179    *    <li class='jm'>{@link UonParser.Builder#validateEnd()}
180    * </ul>
181    *
182    * @return The annotation value.
183    */
184   String validateEnd() default "";
185}