01: /*
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * 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: * $Header:$
18: */
19: package org.apache.beehive.controls.api.properties;
20:
21: import java.lang.annotation.ElementType;
22: import java.lang.annotation.Inherited;
23: import java.lang.annotation.Retention;
24: import java.lang.annotation.RetentionPolicy;
25: import java.lang.annotation.Target;
26:
27: /**
28: * The PropertySet annotation type is used to mark an interface that defines a set of
29: * properties that are associated with a Java Control. By convention, property sets
30: * are declared as an inner annotation types on the Java Control public interface.
31: * <p>
32: * Each member of the annotation type targeted by the <code>PropertySet</code> annotation
33: * will define a new property for the control.
34: * <p>
35: * Here is a simple example:
36: * <code><pre>
37: * public interface MyControl extends org.apache.beehive.controls.api.Control
38: * {
39: * <sp>@PropertySet
40: * public @interface MyProperties
41: * {
42: * public String aStringProperty();
43: * public int anIntProperty();
44: * ...
45: }
46: * }
47: * </pre></code>
48: * <p>
49: * A Java Control can have multiple property sets associated with it.
50: */
51: @Inherited
52: @Retention(RetentionPolicy.RUNTIME)
53: @Target({ElementType.ANNOTATION_TYPE})
54: public @interface PropertySet {
55: /**
56: * The prefix member defines a prefix that will be used in all property setter/getter
57: * methods for properties in the <code>PropertySet</code>. It is necessary to specify
58: * a prefixes when a control interface has multiple property sets that contain
59: * properties with the same name.
60: * <p>
61: * The following code shows the basic conventions for setter/getter methods on a Java
62: * Control Bean:
63: * <code><pre>
64: * public void set<prefix><propertyName>(<propertyType> value);
65: * public <propertyType> get<prefix><propertyName>();
66: * </pre>/code>
67: * where <code>prefix</code> is the prefix member value, <code>propertyName</code> is
68: * the name of the declared property member, and <code>propertyType</code> is the
69: * type associated with the declared property member.
70: */
71: String prefix() default "";
72:
73: /**
74: * The externalConfig member defines whether properties in the set will be settable
75: * via external configuration.
76: */
77: boolean externalConfig() default true;
78:
79: /**
80: * The optional member specifies that this property set may optionally be associated
81: * with the control. Because there is no way to represent an 'unset' property value,
82: * optional properties will not expose a getter method to clients; a control
83: * implementation class can determine whether a property is/is not set, because the
84: * PropertySet query APIs on ControlBeanContext will return null if unset. For
85: * properties that are not optional, a PropertySet instance with all default values
86: * will be returned if unset.
87: *
88: * @see org.apache.beehive.controls.api.context.ControlBeanContext#getControlPropertySet
89: * @see org.apache.beehive.controls.api.context.ControlBeanContext#getMethodPropertySet
90: */
91: boolean optional() default false;
92:
93: /**
94: * The hasSetters member defines whether properties in the set will have programmatic
95: * setter methods.
96: */
97: boolean hasSetters() default true;
98: }
|