1 package org.apache.beehive.controls.api.events; 2 /* 3 * Copyright 2004 The Apache Software Foundation. 4 * 5 * Licensed under the Apache License, Version 2.0 (the "License"); 6 * you may not use this file except in compliance with the License. 7 * You may obtain a copy of the License at 8 * 9 * 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 20 import java.lang.annotation.ElementType; 21 import java.lang.annotation.Retention; 22 import java.lang.annotation.RetentionPolicy; 23 import java.lang.annotation.Target; 24 25 /** 26 * The EventSet annotation type is used to mark an interface that defines a group of events 27 * associated with a Java Control. By convention, event interfaces are defined as inner 28 * classes on the Java Control public interface. Each method defined within a 29 * event interface indicates an event that can be delivered by the control. 30 * <p> 31 * Here is a simple example: 32 * <code><pre> 33 * public interface MyControl extends org.apache.beehive.controls.api.Control 34 * { 35 * <sp>@EventSet 36 * public interface MyEvents 37 * { 38 * public void anEvent(); 39 * } 40 * 41 * ... 42 * } 43 * </pre></code> 44 * This will declare an event interface named <code>MyEvents</code> that declares a single 45 * event: <code>anEvent</code> 46 * 47 * The declaration of an EventSet for a control also means that the associated Control 48 * JavaBean will have listener registration/deregistration APIs. The name of these 49 * APIs will be <i>add/remove<EventSetName>Listener</i>, and the argument will be an 50 * listener instance that implements the EventSet interface. 51 * <p> 52 * The above example would result in the following APIs on <code>MyControlBean</code> 53 * 54 * <code><pre> 55 * public class MyControlBean implements MyControl 56 * { 57 * ... 58 * public void addMyEventsListener(MyEvents listener) { ... } 59 * public void removeMyEventsListener(MyEvents listener) { ... } 60 * </pre></code> 61 */ 62 @Retention(RetentionPolicy.RUNTIME) 63 @Target({ElementType.TYPE}) 64 public @interface EventSet 65 { 66 /** 67 * Defines whether the events defined by the interface are unicast events. A unicast 68 * event set may have only a single listener registered to receive events for any 69 * given bean instance. Any attempt to register additional listeners will result in 70 * a <code>java.util.TooManyListenersException</code> being thrown by the event 71 * listener registration method. 72 * <p> 73 * If an event set provides multicast support (the default), then it may only declare 74 * event methods that have a <code>void</code> return type. Unicast event sets may 75 * support event return values, that will be provided by the (single) registered 76 * listener. 77 */ 78 public boolean unicast() default false; 79 } 80