Github user gemmellr commented on a diff in the pull request:

    https://github.com/apache/qpid-proton/pull/48#discussion_r36179361
  
    --- Diff: 
proton-j/src/test/java/org/apache/qpid/proton/engine/EventExtensibilityTest.java
 ---
    @@ -0,0 +1,381 @@
    +package org.apache.qpid.proton.engine;
    +
    +import java.io.IOException;
    +
    +import org.apache.qpid.proton.engine.Event.Type;
    +import org.apache.qpid.proton.reactor.Reactor;
    +import org.apache.qpid.proton.reactor.Selectable;
    +import org.apache.qpid.proton.reactor.Task;
    +import org.junit.Test;
    +
    +import junit.framework.TestCase;
    +
    +public class EventExtensibilityTest extends TestCase {
    +
    +    // //////////////
    +    // / Extra package public API classes
    +    // //////////////
    +
    +    /**
    +     * Sample additional information that gets generated and passed around 
with
    +     * the extension events. The information is stored inside
    +     * {@link Event#attachments()} see {@link 
ExtraEventImpl#getExtraInfo()}
    +     */
    +    public static class ExtraInfo {
    +        public int foo;
    +    }
    +
    +    /**
    +     * Additional events generated by this extension.
    +     * 
    +     * @author bozzo
    +     *
    +     */
    +    public interface ExtraEvent extends Event {
    +        /**
    +         * Enum is a convenient mechanism for defining new event types
    +         */
    +        public enum ExtraTypes implements EventType {
    +            FOO, BAR, NOT_A_EXTRA_EVENT;
    +            ;
    +
    +            /**
    +             * The actual implementation of the dispatch can be moved out 
of
    +             * line
    +             */
    +            @Override
    +            public void dispatch(Event e, Handler h) {
    +                ExtraEventTypeImpl.dispatch(this, e, h);
    +            }
    +
    +            @Override
    +            public boolean isValid() {
    +                return this != NOT_A_EXTRA_EVENT;
    +            }
    +        }
    +
    +        /**
    +         * typesafe access to event type generated by this extension 
useful for
    +         * handling in switch statements
    +         * 
    +         * @return one of enum values. When invoked on an Event that is 
not an
    +         *         ExtraEvent the return value shall be
    +         */
    +        ExtraTypes getExtraEventType();
    +
    +        /**
    +         * typesafe access to extra information attached to additional 
events
    +         */
    +        ExtraInfo getExtraInfo();
    +    }
    +
    +    /**
    +     * New handler methods for handling the extended event types. These 
methods
    +     * can take {@link ExtraEvent} as a parameter to get typesafe access to
    +     * {@link ExtraInfo}
    +     *
    +     * The interface needs to extend the {@link Handler} interface.
    +     */
    +    public interface ExtraHandler extends Handler {
    +        void onFoo(ExtraEvent e);
    +
    +        void onBar(ExtraEvent e);
    +    }
    +
    +    /**
    +     * Implementation of the default base class for ExtraHandler. All 
events
    +     * should be forwarded to the {@link Handler#onUnhandled(Event)} method
    +     */
    +    public static class ExtraBaseHandler extends BaseHandler implements 
ExtraHandler {
    +
    +        @Override
    +        public void onFoo(ExtraEvent e) {
    +            this.onUnhandled(e);
    +        }
    +
    +        @Override
    +        public void onBar(ExtraEvent e) {
    +            this.onUnhandled(e);
    +        }
    +
    +    }
    +
    +    // //////////////
    +    // / Extra package implementation classes
    +    // //////////////
    +
    +    public static class ExtraEventTypeImpl {
    +        /**
    +         * Implementation of dispatch method for this extension
    +         * 
    +         * @param type
    +         *            The implementation should accept only it's own
    +         *            {@link EventType} instances
    +         * @param handler
    --- End diff --
    
    Forgot to comment earlier. The javadoc params dont match the method 
signature.
    
    (I know, only a test, but we have more than enough javadoc warnings/errors 
already :P)


---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at infrastruct...@apache.org or file a JIRA ticket
with INFRA.
---

Reply via email to