View Javadoc

1   package org.apache.onami.autobind.configuration;
2   
3   /*
4    * Licensed to the Apache Software Foundation (ASF) under one or more
5    * contributor license agreements.  See the NOTICE file distributed with
6    * this work for additional information regarding copyright ownership.
7    * The ASF licenses this file to You under the Apache License, Version 2.0
8    * (the "License"); you may not use this file except in compliance with
9    * the License.  You may obtain a copy of the License at
10   *
11   *  http://www.apache.org/licenses/LICENSE-2.0
12   *
13   * Unless required by applicable law or agreed to in writing, software
14   * distributed under the License is distributed on an "AS IS" BASIS,
15   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   * See the License for the specific language governing permissions and
17   * limitations under the License.
18   */
19  
20  import static java.lang.annotation.ElementType.TYPE;
21  import static java.lang.annotation.RetentionPolicy.RUNTIME;
22  import static org.apache.onami.autobind.configuration.Configuration.Type.CONFIGURATION;
23  
24  import java.lang.annotation.Documented;
25  import java.lang.annotation.Retention;
26  import java.lang.annotation.Target;
27  import java.util.Properties;
28  
29  import javax.inject.Named;
30  
31  /**
32   * Use this Annotation to express your need, that a Configuration should be
33   * loaded, so it can be bound to an Object.
34   */
35  @Documented
36  @Retention( RUNTIME )
37  @Target( TYPE )
38  public @interface Configuration
39  {
40  
41      /**
42       * Name the Configuration should be bound to.
43       *
44       * @return Name the Configuration should be bound to.
45       */
46      Named name() default @Named( "" );
47  
48      /**
49       * Path/URL where the Configuration could be found.
50       *
51       * @return Path/URL where the Configuration could be found.
52       */
53      PathConfig location();
54  
55      PathConfig alternative() default @PathConfig( "" );
56  
57      /**
58       * Class/Interface where the Configuration should be bound to.
59       *
60       * @return Class/Interface where the Configuration should be bound to.
61       */
62      Class<? extends Object> to() default Properties.class;
63  
64      /**
65       * This does only make sense if you are using the Provider Interface. public class Service{
66       *
67       * @Inject Provider<Properties> properties; public void do(){ Properties properties = properties.get(); } }
68       * @return true if the Configuration should be load lazy
69       */
70      boolean lazy() default false;
71  
72      /**
73       * Specify what should be bound for the Configuration Configuration -> Configuration only Values -> Named Bindings
74       * for the Values Both -> Configuration and Named Bindings
75       *
76       * @return
77       */
78      Type type() default CONFIGURATION;
79  
80      public static enum Type
81      {
82  
83          /**
84           * Binds only the Configuration itself.
85           */
86          CONFIGURATION,
87  
88          /**
89           * Named Bindings for the Key/Values (only possible if not lazy)
90           */
91          VALUES,
92  
93          /**
94           * The Configuration and Named Bindings will be done. (only possible if not lazy)
95           */
96          BOTH
97  
98      }
99  
100 }