001: package com.silvermindsoftware.hitch.annotations;
002:
003: /**
004: * Copyright 2007 Brandon Goodin
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: import com.silvermindsoftware.hitch.ReadOnly;
020:
021: import java.lang.annotation.*;
022:
023: /**
024: * BoundComponent to bind domain objects to Swing components
025: */
026: @Target({ElementType.FIELD})
027: @Documented
028: @Retention(RetentionPolicy.RUNTIME)
029: public @interface BoundComponent {
030: /**
031: * <p>
032: * If specified. This is the type the component value
033: * will be converted to before being set on the model
034: * object.
035: * <p/>
036: * If not specified an attempt will be made to determine
037: * the type to be set based on the model objects getter
038: * return type or field type.
039: *
040: * @return
041: */
042: Class type() default void.class;
043:
044: /**
045: * <p>
046: * If specified. This is the property the component
047: * will be bound to on the model class.
048: * <p/>
049: * If not specified an attempt will be made to find an
050: * identically named property on the model.
051: *
052: * @return
053: */
054: String property() default "[default]";
055:
056: /**
057: * If specified. This is the id of the ModelObject
058: * that will be used when performing bindings.
059: * <p/>
060: * If not it will use the default ModelObject
061: *
062: * @return
063: */
064: String modelId() default "[default]";
065:
066: /**
067: * If specified. This is a custom component handler
068: * that will be used to handle value extraction and
069: * setting of a component.
070: *
071: * If not specified the default class component handler
072: * will be used. void.class is used in this case because
073: * Java annotations does not provide a means to default
074: * a value to null.
075: *
076: * @return
077: */
078: Class handler() default void.class;
079:
080: /**
081: * This is a set of string parameters that can be passed
082: * component handler. These parameters need to be passed
083: * in the form of "[property]=[value]". You can pass
084: * as many property/value combos as you like. In order for
085: * the property/value to be useful your ComponentHandler
086: * must have compatible setters.
087: *
088: * @return
089: */
090: String[] handlerValues() default "";
091:
092: /**
093: * This attribute specifies whether a component is read only.
094: * If read only is true the component will be updated during
095: * the updateForm but will not be accessed when performing
096: * an updateModel. If default is specified then the default behavior
097: * is used. This could be different for the type of component being
098: * bound. Currently JLabels are defaulted to be read-only.
099: * @return
100: */
101: ReadOnly readOnly() default ReadOnly.DEFAULT;
102:
103: }
|