[ https://issues.apache.org/jira/browse/PROTON-964?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14653499#comment-14653499 ]
ASF GitHub Bot commented on PROTON-964: --------------------------------------- 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) > Proton-J extensible event types > ------------------------------- > > Key: PROTON-964 > URL: https://issues.apache.org/jira/browse/PROTON-964 > Project: Qpid Proton > Issue Type: Improvement > Components: proton-j > Affects Versions: 0.10 > Reporter: Bozo Dragojevic > Assignee: Bozo Dragojevic > Fix For: 0.11 > > > Event.Type is an enum which makes it impossible to extend. > Introduce a separate interface EventType and make Event.Type implement it. -- This message was sent by Atlassian JIRA (v6.3.4#6332)